๐ ์ ๋ชฉ : ๊ฐ์ ๋ฉด์ ์ฌ๋ก๋ก ๋ฐฐ์ฐ๋ ๋๊ท๋ชจ ์์คํ
์ค๊ณ ๊ธฐ์ด : 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 ๋ฐฉ์์ ์ฌ์ฉํ ๋ ์ถ๊ฐ๋ก ๊ณ ๋ คํด์ผ ํ ์ ๋ค๋ ์๋ค.
- ์๊ฐ ๋๊ธฐํ ๋ฌธ์ : ์๊ฐ ์ญํ ์ ์ถฉ๋ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ: NTP๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ๊ธฐ์ ์ผ๋ก ์๊ฐ์ ๋๊ธฐํํ๊ฑฐ๋, ์๊ฐ์ด ์ญํํ๋ฉด ์ํ์ค๋ฅผ ์ด๊ธฐํ ๋๋ ๋๊ธฐ
- ๋
ธ๋ ID ์ถฉ๋ ๋ฐฉ์ง : ๋
ธ๋ ID๊ฐ ์ค๋ณต๋๋ฉด ์ ์ผ์ฑ์ด ๊นจ์ง๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ: ๋ฐฐํฌ ์ ์ค์ ํ์ผ์ ๋ ธ๋ ID ๊ณ ์ , Zookeeper ๋ฑ์ผ๋ก ๋์ ์ผ๋ก ํ ๋น/๊ด๋ฆฌ