Global Unique ID

๐Ÿ€: ไปฅๅ‰(ใ„ใœใ‚“) ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใงๅฎŸ่ฃ…(ใ˜ใฃใใ†) ๆธˆ(ใš) ใฟ

Approaches

  • UUID
  • Database (SQL)
  • Redis ๐Ÿ€
  • Snowflake
  • Baidu
    • UidGeneratorDefaultUidGenerator
    • CachedUidGenerator
  • Meituan Leaf
    • Leaf-segment: Database
    • Leaf-snowflake

Redis

  • ใ‚ทใƒณใ‚ฐใƒซใ‚นใƒฌใƒƒใƒ‰
  • INCR(), INCRBY() ใฎใ‚ขใƒˆใƒŸใƒƒใ‚ฏๆ“ไฝœ(ใใ†ใ•) ใง GUID ใ‚’ๅฎŸ่ฃ…(ใ˜ใฃใใ†)
  • ็”Ÿๆˆ(ใ›ใ„ใ›ใ„) ใ•ใ‚ŒใŸใƒ‡ใƒผใ‚ฟใฏ้ †ๅบ(ใ˜ใ‚…ใ‚“ใ˜ใ‚‡) ไป˜(ใฅ) ใ‘ใ‚‰ใ‚ŒใฆใŠใ‚Šใ€ใ‚ฝใƒผใƒˆๆฅญๅ‹™(ใŽใ‚‡ใ†ใ‚€) ใซๆœ‰ๅˆฉ(ใ‚†ใ†ใ‚Š)

Design Considerations

First Thought

  • ๅพ“ๆฅ(ใ˜ใ‚…ใ†ใ‚‰ใ„) ใฎใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใง auto_increment ๅฑžๆ€ง(ใžใใ›ใ„) ใ‚’ๆŒ(ใ‚‚) ใคไธป(ใ—ใ‚…) ใ‚ญใƒผใ‚’ไฝฟ็”จ(ใ—ใ‚ˆใ†) ใ™ใ‚‹ใ“ใจใ‚’่€ƒ(ใ‹ใ‚“ใŒ) ใˆใ‚‹ใ‹ใ‚‚ใ—ใ‚Œใพใ›ใ‚“ใ€‚
  • ๆ‚ช(ใ‚ใ‚‹) ใ„ใ‚ขใ‚คใƒ‡ใ‚ข:
    • auto_increment ใฏๅˆ†ๆ•ฃ(ใถใ‚“ใ•ใ‚“) ็’ฐๅขƒ(ใ‹ใ‚“ใใ‚‡ใ†) ใงใฏๅ‹•ไฝœ(ใฉใ†ใ•) ใ—ใพใ›ใ‚“
    • ๅ˜ไธ€(ใŸใ‚“ใ„ใค) ใฎใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใ‚ตใƒผใƒใƒผใงใฏๅๅˆ†(ใ˜ใ‚…ใ†ใถใ‚“) ใชๅฎน้‡(ใ‚ˆใ†ใ‚Šใ‚‡ใ†) ใŒใ‚ใ‚Šใพใ›ใ‚“
    • ่ค‡ๆ•ฐ(ใตใใ™ใ†) ใฎใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น้–“(ใ‹ใ‚“) ใงๆœ€ๅฐ(ใ•ใ„ใ—ใ‚‡ใ†) ใฎ้…ๅปถ(ใกใˆใ‚“) ใงไธ€ๆ„(ใ„ใกใ„) ใฎ ID ใ‚’็”Ÿๆˆ(ใ›ใ„ใ›ใ„) ใ™ใ‚‹ใฎใฏๅ›ฐ้›ฃ(ใ“ใ‚“ใชใ‚“) ใงใ™

Questions to Ask

  • ไธ€ๆ„(ใ„ใกใ„) ID ใฎ็‰นๆ€ง(ใจใใ›ใ„) ใฏไฝ•(ใชใซ) ใงใ™ใ‹๏ผŸ
  • ๆ–ฐ(ใ‚ใŸใ‚‰) ใ—ใ„ใƒฌใ‚ณใƒผใƒ‰ใ”ใจใซ ID ใฏ 1 ใšใคๅข—ๅŠ (ใžใ†ใ‹) ใ—ใพใ™ใ‹๏ผŸ
  • ID ใฏๆ•ฐๅ€ค(ใ™ใ†ใก) ใฎใฟใ‚’ๅซ(ใตใ) ใฟใพใ™ใ‹๏ผŸ
  • ID ใฎ้•ท(ใชใŒ) ใ•ใฎ่ฆไปถ(ใ‚ˆใ†ใ‘ใ‚“) ใฏไฝ•(ใชใซ) ใงใ™ใ‹๏ผŸ
  • ใ‚ทใ‚นใƒ†ใƒ ใฎ่ฆๆจก(ใใผ) ใฏไฝ•(ใชใซ) ใงใ™ใ‹๏ผŸ

Use Cases

Multi-master Replication

็Ÿญๆ‰€(ใŸใ‚“ใ—ใ‚‡) :

  • ่ค‡ๆ•ฐ(ใตใใ™ใ†) ใฎใƒ‡ใƒผใ‚ฟใ‚ปใƒณใ‚ฟใƒผใงใฎใ‚นใ‚ฑใƒผใƒชใƒณใ‚ฐใŒๅ›ฐ้›ฃ(ใ“ใ‚“ใชใ‚“)
  • ่ค‡ๆ•ฐ(ใตใใ™ใ†) ใฎใ‚ตใƒผใƒใƒผ้–“(ใ‹ใ‚“) ใง ID ใŒๆ™‚้–“(ใ˜ใ‹ใ‚“) ใจใจใ‚‚ใซๅข—ๅŠ (ใžใ†ใ‹) ใ—ใชใ„
  • ใ‚ตใƒผใƒใƒผใฎ่ฟฝๅŠ (ใคใ„ใ‹) ใ‚„ๅ‰Š้™ค(ใ•ใใ˜ใ‚‡) ๆ™‚(ใ˜) ใซใ‚นใ‚ฑใƒผใƒซใ—ใซใใ„

UUID

่ก็ช(ใ—ใ‚‡ใ†ใจใค) ใฎ็ขบ็އ(ใ‹ใใ‚Šใค) ใฏ้žๅธธ(ใฒใ˜ใ‚‡ใ†) ใซไฝŽ(ใฒใ) ใ„ใ€‚

Wikipedia ใ‹ใ‚‰ใฎๅผ•็”จ(ใ„ใ‚“ใ‚ˆใ†) ๏ผšใ€Œ็ด„(ใ‚„ใ) 100 ๅนด้–“(ใญใ‚“ใ‹ใ‚“) ใ€ๆฏŽ็ง’(ใพใ„ใณใ‚‡ใ†) 10 ๅ„„(ใŠใ) ๅ€‹ใฎ UUID ใ‚’็”Ÿๆˆ(ใ›ใ„ใ›ใ„) ใ—ใŸๅพŒ(ใ‚ใจ) ใ€ๅ˜ไธ€(ใŸใ‚“ใ„ใค) ใฎ้‡่ค‡(ใ˜ใ‚…ใ†ใตใ) ใŒ็™บ็”Ÿ(ใฏใฃใ›ใ„) ใ™ใ‚‹็ขบ็އ(ใ‹ใใ‚Šใค) ใฏ 50% ใซ้”(ใŸใฃ) ใ™ใ‚‹ใ€

Ticket Server

ๅ‚่€ƒ(ใ•ใ‚“ใ“ใ†) : Ticket Servers: Distributed Unique Primary Keys on the Cheap

็Ÿญๆ‰€(ใŸใ‚“ใ—ใ‚‡) :

  • ๅ˜ไธ€้šœๅฎณ็‚น(ใŸใ‚“ใ„ใคใ—ใ‚‡ใ†ใŒใ„ใฆใ‚“) ๏ผˆSPOF๏ผ‰

Twitter Snowflake Approach

  • ๅˆ†ๅ‰ฒ็ตฑๆฒป(ใถใ‚“ใ‹ใคใจใ†ใก)

Additional Talking Points

  • ๆ™‚ๅˆป(ใ˜ใ“ใ) ๅŒๆœŸ(ใฉใ†ใ) ๏ผˆใƒใƒƒใƒˆใƒฏใƒผใ‚ฏใ‚ฟใ‚คใƒ ใƒ—ใƒญใƒˆใ‚ณใƒซ๏ผ‰
  • ใ‚ปใ‚ฏใ‚ทใƒงใƒณ้•ท(ใกใ‚‡ใ†) ใฎ่ชฟๆ•ด(ใกใ‚‡ใ†ใ›ใ„)
  • ้ซ˜ๅฏ็”จๆ€ง(ใ“ใ†ใ‹ใ‚ˆใ†ใ›ใ„)