๏ผป๋…์„œ๊ธฐ๋ก๏ผฝ ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ 7์žฅ

๐Ÿ“– ์ œ๋ชฉ : ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ : 7์žฅ
๐Ÿ™‹โ€โ™‚๏ธ ์ €์ž : ์•Œ๋ ‰์Šค ์‰ฌ
7์žฅ์—์„œ๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์œ ์ผ ID ์ƒ์„ฑ๊ธฐ ์„ค๊ณ„์— ๋Œ€ํ•ด ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค. ๋‹จ์ผ ์„œ๋ฒ„, ๋‹จ์ผ DB ํ™˜๊ฒฝ์—์„œ๋Š” AutoInc๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ฒ ์ง€๋งŒ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹ค๋ฅธ ๋Œ€์•ˆ์ด ํ•„์š”ํ•˜๋‹ค. ์–ด๋–ค ๋Œ€์•ˆ๋“ค์ด ์žˆ๊ณ , ์žฅ๋‹จ์ ์€ ๋ฌด์—‡์ธ์ง€ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

๐Ÿ“Œ๋ฌธ์ œ ์ •์˜

  • ๋ชฉํ‘œ: ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ๋„ ์ถฉ๋Œ ์—†์ด ์œ ์ผํ•œ ID๋ฅผ ๋น ๋ฅด๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•œ๋‹ค.
  • ์ „์ œ ์กฐ๊ฑด
    • ID๋Š” ์ „์—ญ์ ์œผ๋กœ ๊ณ ์œ ํ•ด์•ผ ํ•œ๋‹ค.
    • ์ƒ์„ฑ ์†๋„๋Š” ๋งค์šฐ ๋นจ๋ผ์•ผ ํ•œ๋‹ค(์ดˆ๋‹น 10,000๊ฑด ์ด์ƒ)
    • ID๋Š” 64๋น„ํŠธ๋กœ ํ‘œํ˜„ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด์–ด์•ผ ํ•˜๊ณ , ์ˆซ์ž๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค.
    • ๋ถ„์‚ฐ๋œ ์—ฌ๋Ÿฌ ๋…ธ๋“œ์—์„œ ์ƒ์„ฑ๋˜๋”๋ผ๋„ ์ค‘๋ณต๋˜๋ฉด ์•ˆ ๋œ๋‹ค.
    • ID๋Š” ๋ฐœ๊ธ‰ ๋‚ ์งœ์— ๋”ฐ๋ผ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.

์ด์ œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์„ ํƒ์ง€๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด์„œ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด๊ธฐ๋กœ ํ•˜์ž.

๐Ÿ“Œ๋‹ค์ค‘ ๋งˆ์Šคํ„ฐ ๋ณต์ œ (Multi-Master Replication)

๊ฐ ์„œ๋ฒ„๊ฐ€ ๋…๋ฆฝ์ ์ธ ID ์ƒ์„ฑ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง์œผ๋กœ์จ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋กœ ๋ณต์ œ(Master A, B, C)ํ•˜๊ณ  ๊ฐ ๋งˆ์Šคํ„ฐ์—๊ฒŒ ๊ณ ์œ ํ•œ ID๋ฒ”์œ„ ๋˜๋Š” ์ฆ๊ฐ€ ๊ฐ„๊ฒฉ์„ ๋ถ€์—ฌํ•˜๊ฒŒ ๋œ๋‹ค.

  • Master A: 1, 4, 7, 10, โ€ฆ
  • Master B: 2, 5, 8, 11, โ€ฆ
  • Master C: 3, 6, 9, 12, โ€ฆ

โœ… ์žฅ์ 

  • ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ๋กœ ๋ณ‘๋ ฌ ID ์ƒ์„ฑ ๊ฐ€๋Šฅ, ์ •๋ ฌ ๊ฐ€๋Šฅ

โŒ ๋‹จ์ 

  • ๋งˆ์Šคํ„ฐ ๊ฐ„ ์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ ํ•ด๊ฒฐ ์–ด๋ ค์›€
  • ๊ฐ„๊ฒฉ(step) ์„ค์ •์„ ์ž˜๋ชปํ•˜๋ฉด ID ์†Œ๋ชจ ๋น„ํšจ์œจ
  • ๋ณต์ œ ์ง€์—ฐ ์‹œ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ ๊ฐ€๋Šฅ
  • ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ์—๋„ ์ž˜ ๋™์ž‘ํ•˜๋„๋ก ๋งŒ๋“ค๊ธฐ ์–ด๋ ต๋‹ค.

๐Ÿ“Œํ‹ฐ์ผ“ ์„œ๋ฒ„ ๋ฐฉ์‹(Ticker Server)

์ค‘์•™์˜ ํ‹ฐ์ผ“ ์„œ๋ฒ„๊ฐ€ ID๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ , ๋ถ„์‚ฐ ์„œ๋ฒ„๋Š” ์ด๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ID ๋ฐœ๊ธ‰์„ ์œ„ํ•œ ์ „์šฉ ์„œ๋ฒ„(ํ‹ฐ์ผ“ ์„œ๋ฒ„)๋ฅผ ๋‘๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋“ค์€ ํ•„์š”ํ•  ๋•Œ ๋งˆ๋‹ค ID๋ฅผ ์š”์ฒญํ•œ๋‹ค.

โœ… ์žฅ์ 

  • ID ์ƒ์„ฑ ๋กœ์ง์„ ์ค‘์•™ ์ง‘์ค‘ โ†’ ๊ด€๋ฆฌ ์šฉ์ด
  • ์ •๋ ฌ ๊ฐ€๋Šฅ, ๋‹จ์ˆœํ•œ ID ๊ตฌ์กฐ ์œ ์ง€

โŒ ๋‹จ์ 

  • ์ค‘์•™ ์„œ๋ฒ„ ์žฅ์•  ์‹œ ์ „์ฒด ID ๋ฐœ๊ธ‰ ๋ถˆ๊ฐ€
  • ๋„คํŠธ์›Œํฌ ๋ณ‘๋ชฉ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • ์ˆ˜ํ‰ ํ™•์žฅ์ด ์–ด๋ ค์›€

์ด ๋ฐฉ์‹์€ ๊ฐ•๋ ฅํ•œ ๊ณ ๊ฐ€์šฉ์„ฑ(HA) ๊ตฌ์„ฑ ์—†์ด๋Š” ์œ„ํ—˜ํ•˜๋‹ค๋Š” ์ ์„ ์•Œ์•„๋‘์ž.

๐Ÿ“ŒUUID ์‚ฌ์šฉ(Universally Unique Identifier)

UUID๋Š” ์œ ์ผ์„ฑ์ด ๋ณด์žฅ๋˜๋Š” ID๋ฅผ ๋งŒ๋“œ๋Š” ๋˜ ํ•˜๋‚˜์˜ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. UUID๊ฐ’์€ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ์ง€๊ทนํžˆ ๋‚ฎ์œผ๋ฏ€๋กœ ์„œ๋ฒ„ ๊ฐ„ ์กฐ์œจ ์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

โœ… ์žฅ์ 

  • ์ถฉ๋Œ ์œ„ํ—˜์ด ๊ฑฐ์˜ ์—†์Œ (128๋น„ํŠธ ๋ฌด์ž‘์œ„ ๊ฐ’)
  • ์ค‘์•™ ์„œ๋ฒ„ ์—†์ด๋„ ๊ฐ ๋…ธ๋“œ๊ฐ€ ID ์ƒ์„ฑ ๊ฐ€๋Šฅ

โŒ ๋‹จ์ 

  • ID๊ฐ€ ๋„ˆ๋ฌด ๊ธธ๋‹ค (32์ž ์ด์ƒ)
  • ์ •๋ ฌ ๋ถˆ๊ฐ€๋Šฅ: ์‹œ๊ฐ„ ์ˆœ ์ •๋ ฌ์ด ์–ด๋ ค์›Œ ๋กœ๊ทธ, DB ์ธ๋ฑ์‹ฑ์— ๋ถˆ๋ฆฌ

๐Ÿ“ŒTwitter์˜ Snowflake ์•Œ๊ณ ๋ฆฌ์ฆ˜

์‹ค์ œ ์„œ๋น„์Šค์—์„œ ์ •๋ ฌ ๊ฐ€๋Šฅํ•˜๊ณ  ์ถฉ๋Œ ์—†๋Š” ID๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์†”๋ฃจ์…˜์ด๋‹ค.
64๋น„ํŠธ ์ •์ˆ˜ํ˜• ID๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

1๋น„ํŠธ 41๋น„ํŠธ 10๋น„ํŠธ 12๋น„ํŠธ
์˜ˆ์•ฝ ํƒ€์ž„์Šคํƒฌํ”„ ๋จธ์‹ ID(๋…ธ๋“œID) ์‹œํ€€์Šค ๋ฒˆํ˜ธ

๐Ÿ“Œ ๊ฐ ํ•„๋“œ ์„ค๋ช…

  • 1๋น„ํŠธ: ๋ถ€ํ˜ธ ๋น„ํŠธ (ํ•ญ์ƒ 0)
  • 41๋น„ํŠธ: ์‹œ๊ฐ„ ์ •๋ณด (1970๋…„ ์ดํ›„ ๊ฒฝ๊ณผ๋œ ๋ฐ€๋ฆฌ์ดˆ)
  • 10๋น„ํŠธ: ๋…ธ๋“œ ID (์„œ๋ฒ„ ๋ฒˆํ˜ธ + ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๋ฒˆํ˜ธ ๋“ฑ)
  • 12๋น„ํŠธ: ๊ฐ™์€ ๋ฐ€๋ฆฌ์ดˆ ๋‚ด์—์„œ ์ˆœ๋ฒˆ (๋™์ผ ๋ฐ€๋ฆฌ์ดˆ์— ์ตœ๋Œ€ 4096๊ฐœ ์ƒ์„ฑ ๊ฐ€๋Šฅ)

โœ… ์žฅ์ 

  • ์ „์—ญ ๊ณ ์œ ์„ฑ ๋ณด์žฅ
  • ์ •๋ ฌ ๊ฐ€๋Šฅ (์‹œ๊ฐ„ ๊ธฐ๋ฐ˜) โ†’ ๋กœ๊ทธ ์ •๋ ฌ, ๋ฉ”์‹œ์ง€ ์ •๋ ฌ ๋“ฑ์— ์œ ๋ฆฌ
  • ๋น ๋ฆ„: DB ์ ‘๊ทผ ์—†์ด ID ์ƒ์„ฑ ๊ฐ€๋Šฅ

โŒ ๋‹จ์ 

  • ์‹œ์Šคํ…œ ์‹œ๊ฐ„์ด ๋ฐ€๋ฆฌ๋ฉด ID๊ฐ€ ์ค‘๋ณต๋˜๊ฑฐ๋‚˜ ์ˆœ์„œ๊ฐ€ ๊ผฌ์ผ ์ˆ˜ ์žˆ์Œ
  • ID๋ฅผ ์žฌ์ƒ์„ฑํ•˜๋ฉด ๋™์‹œ์„ฑ ์ œ์–ด ํ•„์š” (๊ฐ™์€ ๋ฐ€๋ฆฌ์ดˆ์— 4096๊ฐœ ์ดˆ๊ณผ ์‹œ ๋ธ”๋กœํ‚น ๋˜๋Š” ๋Œ€๊ธฐ ํ•„์š”)

์ด ์ฑ…์˜ ์ €์ž๋Š” ์Šค๋…ธ์šฐ ํ”Œ๋ ˆ์ดํฌ ๋ฐฉ์‹์„ ๊ฐ€์žฅ ๋‚˜์€ ๋‹ต์œผ๋กœ ์ฑ„ํƒํ–ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ์‹๋“ค์— ๋น„ํ•ด ์ „์ œ ์กฐ๊ฑด์„ ๋Œ€๋ถ€๋ถ„ ๋งŒ์กฑํ•˜๊ณ , ๋‹จ์ ๋„ ๋œ ์น˜๋ช…์ ์œผ๋กœ ๋ณด์ด์ง€๋งŒ Snowflake ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ๋•Œ ์ถ”๊ฐ€๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ ๋“ค๋„ ์žˆ๋‹ค.

  1. ์‹œ๊ฐ„ ๋™๊ธฐํ™” ๋ฌธ์ œ : ์‹œ๊ฐ„ ์—ญํ–‰ ์‹œ ์ถฉ๋Œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.
    • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: NTP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹œ๊ฐ„์„ ๋™๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜, ์‹œ๊ฐ„์ด ์—ญํ–‰ํ•˜๋ฉด ์‹œํ€€์Šค๋ฅผ ์ดˆ๊ธฐํ™” ๋˜๋Š” ๋Œ€๊ธฐ
  2. ๋…ธ๋“œ ID ์ถฉ๋Œ ๋ฐฉ์ง€ : ๋…ธ๋“œ ID๊ฐ€ ์ค‘๋ณต๋˜๋ฉด ์œ ์ผ์„ฑ์ด ๊นจ์ง„๋‹ค.
    • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ๋ฐฐํฌ ์‹œ ์„ค์ • ํŒŒ์ผ์— ๋…ธ๋“œ ID ๊ณ ์ •, Zookeeper ๋“ฑ์œผ๋กœ ๋™์ ์œผ๋กœ ํ• ๋‹น/๊ด€๋ฆฌ