[Algorithm] consistent hash (hash ring)

consistent hash์€ DB์˜ ์ƒค๋”ฉ ๊ฐ™์€ ๋ถ„์‚ฐ ์ €์žฅ์— ์‘์šฉ๋˜๋Š” ํ…Œํฌ๋‹‰์ด๋‹ค. hash ring์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ๋Œ€ํ˜• ๋ถ„์‚ฐ DB์ธ Dynamo์™€ Cassandra๊ฐ€ ์ด ๋ฐฉ์‹์œผ๋กœ ์ƒค๋”ฉ์„ ๊ตฌํ˜„ํ•œ๋‹ค.



๋ฌธ์ œ

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ์กฐ๊ฑด์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ๊ฐ์˜ ๋…ธ๋“œ-์ƒคํŠธ์— ๋‚˜๋ˆ ์„œ ์ €์žฅํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

https://binux.tistory.com/119
๊ทธ๋Ÿฌ๋ฉด ๋ฐ์ดํ„ฐ์˜ ํŠน์ • ์ƒค๋“œ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด์‹œ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ๊ฐ๊ฐ์˜ ์ƒค๋“œ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ฐ€๋ น, ์ƒค๋“œ ํ‚ค๊ฐ€ ์ •์ˆ˜๊ณ  ์ƒค๋“œ๊ฐ€ 3๊ฐœ๋ผ๋ฉด ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ(x%3) ์„ ํ†ตํ•ด 0~2์˜ ํ•ด์‹œ๊ฐ’์„ ์ถ”์ถœํ•ด์„œ ์ €์žฅํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ƒค๋“œ๊ฐ€ 2๊ฐœ ๋Š˜์–ด์„œ 5๊ฐœ๊ฐ€ ๋œ๋‹ค๋ฉด ์–ด๋–จ ๊ฒƒ ๊ฐ™์€๊ฐ€?
๊ทธ๋Ÿฌ๋ฉด ํ•ด์‹œ ๊ณ„์‚ฐ๋ฒ•๋„ ์ƒค๋“œ ๊ฐœ์ˆ˜์— ๋งž์ถฐ ๋ณ€๊ฒฝ๋ ํ…๋ฐ, (x%5) ๊ธฐ์กด ์ €์žฅ ๋ฐ์ดํ„ฐ๋“ค์„ ๋ฐ”๋€ ํ•ด์‹œ๊ฐ’์œผ๋กœ๋Š” ๋งค์นญ์‹œํ‚ฌ ์ˆ˜๊ฐ€ ์—†๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ  ์ƒค๋“œ๊ฐ€ ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค ํ•ด์‹œ๊ฐ’์— ๋งž์ถฐ์„œ ๋ฐ์ดํ„ฐ ์žฌ๋ฐฐ์น˜๋ฅผ ๊ณ„์† ๋Œ๋ฆฌ๋Š” ๊ฒƒ๋„ ๋ง์ด ์•ˆ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.



hash ring

hash ring์€ ์กฐ๊ธˆ ๋…ํŠนํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ฌธ์ œํ‹€์„ ํ•ด๊ฒฐํ•œ๋‹ค. ์žฌ๋ฐฐ์น˜๋ฅผ ์•„์˜ˆ ํ”ผํ•˜์ง€๋Š” ๋ชปํ•˜๊ณ , ์ข€ ์ค„์ด๋Š” ์ •๋„๋‹ค.

https://binux.tistory.com/119
์ผ๋‹จ ์œ ํ•œํ•œ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๋Š” ์‹ค์ˆ˜ ํ•ด์‹œ๊ฐ’์„ ์ถ”์ถœํ•˜๊ฒŒ๋” ๋งŒ๋“ ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 0~1๋กœ ๋ฒ”์œ„๋ฅผ ์žก์„ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ƒค๋“œ๊ฐ€ 3๊ฐœ๋ผ๋ฉด, ๊ฐ๊ฐ์˜ ์ƒค๋“œ๋Š” ํ•ด์‹œ๊ฐ’ ์˜์—ญ์„ ๊ฐ€์ง„๋‹ค. 1์ƒค๋“œ๋Š” 0~0.3, 2์ƒค๋“œ๋Š” 0.3~0.6, 3์ƒค๋“œ๋Š” 0.6~1 ๊ฐ™์€ ์‹์œผ๋กœ ํ• ๋‹นํ•˜๊ณ , ๊ฐ๊ฐ์˜ ํ•ด์‹œ๊ฐ’์„ ์ € ๋ฒ”์œ„์— ๋“ค์–ด๊ฐ€๋Š” ์ƒค๋“œ๋กœ ๋งค์นญ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.


https://binux.tistory.com/119
์ด ๊ตฌ์กฐ์—์„œ ์ƒค๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด, ์ ๋‹นํžˆ ์–ด๋А ๋ฒ”์œ„์— ์ƒˆ๋กœ์šด ์ƒค๋“œ์˜ ์˜์—ญ์„ ๋ถ€์—ฌํ•ด์ค€๋‹ค.
0.6~1๋ฅผ ์ฐจ์ง€ํ•˜๋˜ 3์ƒค๋“œ์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ ธ๊ฐ€์„œ 0.8~1 ์˜์—ญ์„ ๋ฐฐ์ •ํ•˜๊ณ , ํ•ด๋‹น ์œ„์น˜๋กœ ๋งค์นญ๋˜๋˜ ํ•ญ๋ชฉ๋“ค๋งŒ ์žฌ๋ฐฐ์น˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.


https://binux.tistory.com/119
๊ทธ๋ฆฌ๊ณ  ์ƒค๋“œ๊ฐ€ ์ œ๊ฑฐ๋  ๋•Œ๋Š” ๊ทธ ์˜์—ญ์— ์žˆ๋˜ ๋งค์นญ ํ•ญ๋ชฉ๋งŒ ์žฌ๋ฐฐ์น˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ทผ๋ฐ ์—ฌ๊ธฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ 2๊ฐ€์ง€๋งŒ ๋ด๋„ ์•Œ๊ฒ ์ง€๋งŒ, ์ƒค๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์ค„์–ด๋“ค๋‹ค๋ณด๋ฉด ์ƒค๋“œ๊ฐ€ ๊ฐ–๊ณ ์žˆ๋Š” ์˜์—ญ์ด ๋ถˆ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„ํฌ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
hash ring์€ ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด vnode๋ผ๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.



vnode

๊ฐ€์ƒ ๋…ธ๋“œ๋ผ๋Š” ๋ง์ธ๋ฐ, ๊ทธ๋ ‡๊ฒŒ ๊ฑฐ์ฐฝํ•˜์ง€๋Š” ์•Š๋‹ค.

๊ทธ๋ƒฅ ์‹ค์ œ ์ƒค๋“œ ํ•˜๋‚˜๋งˆ๋‹ค ์—ฌ๋Ÿฌ๊ฐœ์˜ vnode ์˜์—ญ์„ ์žก์•„๋†“๊ณ , ์ž์ž˜ํ•˜๊ณ  ๋žœ๋คํ•˜๊ฒŒ ์˜์—ญ์„ ์ฐจ์ง€ํ•˜๊ฒŒ ๋‘๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋ž˜์„œ ํ•ด์‹œ๊ฐ’์ด ๋‚˜์˜ค๋ฉด ๊ทธ ์ฃผ๋ณ€์— ์œ„์น˜ํ•œ vnode์˜ ์‹ค์ œ ์ƒค๋“œ์— ์ €์žฅํ•˜๋„๋ก ํ•œ๋‹ค.

๋ฒ”์œ„๋ฅผ ๋” ์ž˜๊ฒŒ ์ชผ๊ฐœ๊ณ  ํฉ๋ฟŒ๋ ค์„œ ์ง‘์ค‘์„ ์ค„์ด๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค.



์ฐธ์กฐ
https://www.designgurus.io/course-play/grokking-the-advanced-system-design-interview/doc/6376795982f3782df575c65f
https://binux.tistory.com/119