//
Search
Duplicate

7μž₯ λΆ„μ‚° μ‹œμŠ€ν…œμ„ μœ„ν•œ 유일 ID 생성기 섀계

DB λΆ„μ‚° ν™˜κ²½μ—μ„œλŠ” auto increment λ₯Ό μ‚¬μš©ν•˜κΈ° νž˜λ“€λ‹€.

문제 이해 및 섀계 λ²”μœ„ ν™•μ •

β€’
ID λŠ” μœ μΌν•˜κ³  μ •λ ¬ κ°€λŠ₯
β€’
ID 의 값이 μ‹œκ°„μ˜ 흐름에 따라 μ»€μ§€μ§€λ§Œ 항상 1μ”© 컀질 ν•„μš”λŠ” μ—†λ‹€.
β€’
ID λŠ” 숫자둜만 κ΅¬μ„±λœλ‹€.
β€’
μ΄ˆλ‹Ή 10000 개의 ID λ₯Ό 생성할 수 μžˆμ–΄μ•Ό ν•œλ‹€.

개랡적 μ„€κ³„μ•ˆ μ œμ‹œ

닀쀑 λ§ˆμŠ€ν„° 볡제(multi-master replication)

β€’
μ„œλ²„μ˜ 수만큼 μ¦κ°€ν•˜λŠ” DB의 auto increment κΈ°λŠ₯을 ν™œμš©
β€’
DB 수λ₯Ό 늘리면 μ΄ˆλ‹Ή 생산 κ°€λŠ₯ ID μˆ˜λ„ 늘릴 수 μžˆλ‹€.
β€’
ν•˜μ§€λ§Œ 단점이 크닀.
β—¦
μ—¬λŸ¬ 데이터 센터에 걸쳐 규λͺ¨λ₯Ό 늘리기 μ–΄λ ΅λ‹€.
β—¦
ID 의 μœ μΌμ„±μ€ 보μž₯λ˜μ§€λ§Œ μ„œλ²„ μ²˜λ¦¬μ— 따라 μ‹œκ°„ 흐름에 맞좰 컀지도둝 보μž₯ν•  μˆ˜λŠ” μ—†λ‹€.
β—¦
μ„œλ²„λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ‚­μ œν•˜κΈ° νž˜λ“€λ‹€. ν™•μž₯μ„± 거의 제둜

ν‹°μΌ“ μ„œλ²„

β€’
auto increment κΈ°λŠ₯을 κ°–μΆ˜ DB 이닀. 즉, ν‹°μΌ“ μ„œλ²„λ₯Ό 쀑앙 μ§‘μ€‘ν˜•μœΌλ‘œ ν•˜λ‚˜λ§Œ μ‚¬μš©ν•œλ‹€.
β€’
μž₯점
β—¦
μœ μΌμ„±μ΄ 보μž₯λ˜λŠ” 숫자둜 κ΅¬μ„±λœ ID λ₯Ό 생성
β—¦
μ‹œκ°„ μˆœλŒ€λ‘œ 생성 κ°€λŠ₯
β—¦
κ΅¬ν˜„ν•˜κΈ° 쉽닀.
β€’
단점
β—¦
SPOF 이닀.
β—¦
μ—¬λŸ¬ ν‹°μΌ“ μ„œλ²„λ₯Ό κ΅¬μ„±ν•˜λ©΄ λ‹€μ‹œ 데이터 동기화 λ¬Έμ œκ°€ λ°œμƒ

νŠΈμœ„ν„° μŠ€λ…Έν”Œλ ˆμ΄ν¬ 접근법

β€’
unused
β—¦
사인 λΉ„νŠΈμ΄λ‹€. μ§€κΈˆμ€ μ•ˆμ“°λŠ”λ° λ‚˜μ€‘μ— μ“Έ 수 μžˆμœΌλ‹ˆ μœ λ³΄ν•œλ‹€κ³  ν•œλ‹€.
β€’
time in millliseconds
β—¦
41λΉ„νŠΈμ˜ νƒ€μž„μŠ€νƒ¬ν”„μ΄λ‹€. 기원 μ‹œκ°(epoch, 1970.01.01) 이후 κ²½κ³Όν•œ λ°€λ¦¬μ΄ˆ 값이닀.
β—¦
41λΉ„νŠΈλ‘œ ν‘œν˜„ν•  수 μžˆλŠ” μ΅œλŒ€κ°’μ€ μ•½ 69년인데 기원 μ‹œκ°μ„ ν˜„μž¬μ— κ°€κΉκ²Œ 맞좰 μ˜€λ²„ν”Œλ‘œμš°κ°€ λ°œμƒν•˜λŠ” μ‹œμ μ„ λŠ¦μΆ˜λ‹€.
β€’
data center id
β—¦
5λΉ„νŠΈλ₯Ό ν• λ‹Ήν•΄μ„œ 2**5=32 개의 데이터 μ„Όν„°λ₯Ό μ§€μ›ν•œλ‹€.
β€’
worker id
β—¦
μ„œλ²„ id 이고 μ—­μ‹œ 5λΉ„νŠΈλΌμ„œ 데이터 μ„Όν„°λ‹Ή 32개의 μ„œλ²„λ₯Ό μ§€μ›ν•œλ‹€.
β€’
sequence id
β—¦
일련 λ²ˆν˜Έμ— 12λΉ„νŠΈλ₯Ό ν• λ‹Ήν•œλ‹€. ID λ₯Ό 생성할 λ•Œλ§ˆλ‹€ 1만큼 μ¦κ°€ν•˜κ³  1λ°€λ¦¬μ΄ˆκ°€ κ²½κ³Όν•  λ•Œλ§ˆλ‹€ 0으둜 μ΄ˆκΈ°ν™”λœλ‹€.
β€’
데이터 μ„Όν„° id 와 μ„œλ²„ id λŠ” μ‹œμŠ€ν…œμ΄ μ‹œμž‘ν•  λ•Œ κ²°μ •λ˜κ³  잘λͺ» λ³€κ²½ν•˜κ²Œ 되면 id 좩돌이 λ°œμƒν•  수 μžˆλ‹€.