Design Consistent Hashing

μˆ˜ν‰μ  규λͺ¨ ν™•μž₯을 μœ„ν•΄μ„œλŠ” μš”μ²­ λ˜λŠ” 데이터가 각 μ„œλ²„μ— κ· λ“±ν•˜κ²Œ λΆ„λ°°λ˜λŠ” 것이 μ€‘μš”ν•˜λ‹€. μ•ˆμ • ν•΄μ‹œλŠ” μ΄λŸ¬ν•œ λͺ©μ μ„ λ‹¬μ„±ν•˜κΈ° μœ„ν•΄ 보편적으둜 μ‚¬μš©λ˜λŠ” ν•΄μ‹œ 방식이닀.

ν•΄μ‹œ ν‚€ 재배치(refresh) 문제

μ„œλ²„λ“€μ˜ λΆ€ν•˜λ₯Ό κ· λ“±ν•˜κ²Œ λ‚˜λˆ„κΈ° μœ„ν•΄ κ°„λ‹¨ν•œ ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.(serverIndex = hash(key) % serverCount) 이 방법은 μ„œλ²„ ν’€μ˜ 크기가 κ³ μ •λ˜μ–΄ μžˆκ±°λ‚˜, 데이터 뢄포가 κ· λ“±ν•  λ•ŒλŠ” 잘 λ™μž‘ν•˜μ§€λ§Œ λ‹€μŒμ˜ 경우 λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.

  1. μ„œλ²„κ°€ μ‚­μ œλ˜κ±°λ‚˜ μΆ”κ°€λ˜λŠ” 상황 λ°œμƒ

  2. μ„œλ²„ ν’€μ˜ 크기가 λ³€κ²½λ˜μ–΄ serverIndexκ°€ λ³€κ²½

  3. κΈ°μ‘΄ μš”μ²­μ΄ λ‹€λ₯Έ μ„œλ²„μ— μ „λ‹¬λ˜μ–΄ λŒ€κ·œλͺ¨ μΊμ‹œ λ―ΈμŠ€κ°€ λ°œμƒ

κΈ°μ‘΄ ν•΄μ‹œ ν•¨μˆ˜λŠ” 이 λ¬Έμ œκ°€ λ°œμƒν•˜μ—¬, μ•ˆμ • ν•΄μ‹œλ₯Ό μ‚¬μš©ν•˜μ—¬ 이 문제λ₯Ό 효과적으둜 ν•΄κ²°ν•˜κ³  μžˆλ‹€.

μ•ˆμ •ν•΄μ‹œ ν‚€ 재배치 방법

μ•ˆμ • ν•΄μ‹œλŠ” ν•΄μ‹œ ν…Œμ΄λΈ” 크기가 μ‘°μ • 될 λ•Œ λŒ€λΆ€λΆ„ μž¬λ°°μΉ˜λ˜λŠ” 전톡적 ν•΄μ‹œ ν…Œμ΄λΈ”κ³ΌλŠ” λ‹€λ₯΄κ²Œ 였직 ν‚€μ˜ 개수/슬둯의 개수만큼의 ν‚€λ§Œ μž¬λ°°μΉ˜ν•˜λ©΄ λœλ‹€. ν•΄μ‹œ κ³΅κ°„μ˜ λ²”μœ„λ₯Ό 링 ν˜•νƒœλ‘œ ν‘œν˜„ν•˜κ³ , 각 μ„œλ²„μ™€ ν‚€λ₯Ό 이 링 상에 λ°°μΉ˜ν•˜μ—¬ ν‚€λ₯Ό μ„œλ²„μ— ν• λ‹Ήν•˜λŠ” 방식을 μ‚¬μš©ν•œλ‹€.

각 ν‚€λŠ” λ‚˜λ¨Έμ§€ 연산이 μ•„λ‹Œ, ν•΄λ‹Ή ν‚€μ˜ μœ„μΉ˜λ‘œλΆ€ν„° μ‹œκ³„ λ°©ν–₯으둜 링을 νƒμƒ‰ν•˜μ—¬ κ°€μž₯ κ°€κΉŒμš΄ μ„œλ²„μ— ν• λ‹Ήν•˜κ²Œ λœλ‹€.

  • μ„œλ²„ μΆ”κ°€ μ‹œ: Key 0만 Server 0μ—μ„œ Server 4둜 재배치

  • μ„œλ²„ μ‚­μ œ μ‹œ: Key 2만 Server 2μ—μ„œ Server 3둜 재배치

가상 λ…Έλ“œ(virtual node)

재배치 λ¬Έμ œλŠ” ν•΄κ²°λ˜μ—ˆμœΌλ‚˜, νŒŒν‹°μ…˜μ˜ 크기 λΆˆκ· λ“± λ¬Έμ œλ‚˜ ν‚€κ°€ λΆˆκ· λ“±ν•˜κ²Œ λΆ„ν¬λ˜μ–΄ ν•˜λ‚˜μ˜ μ„œλ²„μ— λ„ˆλ¬΄ λ§Žμ€ ν‚€ ν˜Ήμ€ λ„ˆλ¬΄ 적은 ν‚€κ°€ ν• λ‹Ήλ˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 가상 λ…Έλ“œλΌλŠ” 기법을 μ‚¬μš©ν•œλ‹€.

μ‚¬μ§„μœΌλ‘  μ„Έ 개의 가상 λ…Έλ“œλ₯Ό ν• λ‹Ήν–ˆμ§€λ§Œ μ‹€μ œλ‘œλŠ” 훨씬 큰 값을 μ‚¬μš©ν•˜μ—¬ κ· λ“±ν•˜κ²Œ ν• λ‹Ήν•  수 μžˆλ„λ‘ ν•œλ‹€.(늘릴수둝 κ· λ“±ν•΄μ§€μ§€λ§Œ 가상 λ…Έλ“œλ₯Ό μœ„ν•œ 데이터 곡간이 μ»€μ§€κ²Œ 됨)

참고자료

Last updated