Design Consistent Hashing

์ˆ˜ํ‰์  ๊ทœ๋ชจ ํ™•์žฅ์„ ์œ„ํ•ด์„œ๋Š” ์š”์ฒญ ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ ์„œ๋ฒ„์— ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐ๋˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์•ˆ์ • ํ•ด์‹œ๋Š” ์ด๋Ÿฌํ•œ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ณดํŽธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ•ด์‹œ ๋ฐฉ์‹์ด๋‹ค.

ํ•ด์‹œ ํ‚ค ์žฌ๋ฐฐ์น˜(refresh) ๋ฌธ์ œ

์„œ๋ฒ„๋“ค์˜ ๋ถ€ํ•˜๋ฅผ ๊ท ๋“ฑํ•˜๊ฒŒ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํ•œ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.(serverIndex = hash(key) % serverCount) ์ด ๋ฐฉ๋ฒ•์€ ์„œ๋ฒ„ ํ’€์˜ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ๊ฑฐ๋‚˜, ๋ฐ์ดํ„ฐ ๋ถ„ํฌ๊ฐ€ ๊ท ๋“ฑํ•  ๋•Œ๋Š” ์ž˜ ๋™์ž‘ํ•˜์ง€๋งŒ ๋‹ค์Œ์˜ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  1. ์„œ๋ฒ„๊ฐ€ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋˜๋Š” ์ƒํ™ฉ ๋ฐœ์ƒ

  2. ์„œ๋ฒ„ ํ’€์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด serverIndex๊ฐ€ ๋ณ€๊ฒฝ

  3. ๊ธฐ์กด ์š”์ฒญ์ด ๋‹ค๋ฅธ ์„œ๋ฒ„์— ์ „๋‹ฌ๋˜์–ด ๋Œ€๊ทœ๋ชจ ์บ์‹œ ๋ฏธ์Šค๊ฐ€ ๋ฐœ์ƒ

๊ธฐ์กด ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ, ์•ˆ์ • ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ๋‹ค.

์•ˆ์ •ํ•ด์‹œ ํ‚ค ์žฌ๋ฐฐ์น˜ ๋ฐฉ๋ฒ•

์•ˆ์ • ํ•ด์‹œ๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ” ํฌ๊ธฐ๊ฐ€ ์กฐ์ • ๋  ๋•Œ ๋Œ€๋ถ€๋ถ„ ์žฌ๋ฐฐ์น˜๋˜๋Š” ์ „ํ†ต์  ํ•ด์‹œ ํ…Œ์ด๋ธ”๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์˜ค์ง ํ‚ค์˜ ๊ฐœ์ˆ˜/์Šฌ๋กฏ์˜ ๊ฐœ์ˆ˜๋งŒํผ์˜ ํ‚ค๋งŒ ์žฌ๋ฐฐ์น˜ํ•˜๋ฉด ๋œ๋‹ค. ํ•ด์‹œ ๊ณต๊ฐ„์˜ ๋ฒ”์œ„๋ฅผ ๋ง ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜๊ณ , ๊ฐ ์„œ๋ฒ„์™€ ํ‚ค๋ฅผ ์ด ๋ง ์ƒ์— ๋ฐฐ์น˜ํ•˜์—ฌ ํ‚ค๋ฅผ ์„œ๋ฒ„์— ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

Consistent Hashing

๊ฐ ํ‚ค๋Š” ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์ด ์•„๋‹Œ, ํ•ด๋‹น ํ‚ค์˜ ์œ„์น˜๋กœ๋ถ€ํ„ฐ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ๋ง์„ ํƒ์ƒ‰ํ•˜์—ฌ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์„œ๋ฒ„์— ํ• ๋‹นํ•˜๊ฒŒ ๋œ๋‹ค.

  • ์„œ๋ฒ„ ์ถ”๊ฐ€ ์‹œ: Key 0๋งŒ Server 0์—์„œ Server 4๋กœ ์žฌ๋ฐฐ์น˜

  • ์„œ๋ฒ„ ์‚ญ์ œ ์‹œ: Key 2๋งŒ Server 2์—์„œ Server 3๋กœ ์žฌ๋ฐฐ์น˜

๊ฐ€์ƒ ๋…ธ๋“œ(virtual node)

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

Consistent Hashing with Virtual Node

์‚ฌ์ง„์œผ๋ก  ์„ธ ๊ฐœ์˜ ๊ฐ€์ƒ ๋…ธ๋“œ๋ฅผ ํ• ๋‹นํ–ˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ํ›จ์”ฌ ํฐ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ท ๋“ฑํ•˜๊ฒŒ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.(๋Š˜๋ฆด์ˆ˜๋ก ๊ท ๋“ฑํ•ด์ง€์ง€๋งŒ ๊ฐ€์ƒ ๋…ธ๋“œ๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„์ด ์ปค์ง€๊ฒŒ ๋จ)

์ฐธ๊ณ ์ž๋ฃŒ

Last updated

Was this helpful?