안정해시란,

수평적 규모 확장성을 위해서는, 쉽게 말해 서버를 여러대로 늘려 성능을 높이려면 사용자의 요청이나 데이터를 여러 서버에 골고루 분배하는 것이 중요하다.

1장에서 살펴보았듯, 사용자의 요청이나 데이터가 한 서버에 몰리면서버가 느려지거나 죽기 때문이다.


안정해시로 어떤 문제를 해결할 수 있나요?

해시 키 재배치(rehash) 문제

서버의 개수가 변경될 때 기존 키들이 다른 서버로 대량 이동하는 문제


N개의 캐시 서버가 있을 때, 이 서버들에 부하를 균등하게 나누는 보편적 방법은 해시 함수를 사용하는 것이다.

serverlndex = hash(key) % N // N = 서버의 개수

그리고 서버의 개수를 변경하면, N이 달라지기 때문에 해시 함수에 의한 해시키 배치도 변경된다.

책은 너무 어렵다 ㅠㅠ

조금 다가가기 쉬운 예시로 개념을 이해해보자.

Q. 윤아는 클로드♡, 코덱스, 제미나이, 커서, Aider 등의 ai에게만 의존해
100만명의 회원이 있는 웹페이지를 만들었다!

그런데, 회원정보를 노린 해커가 윤아의 사이트를 공격했다.
어찌저찌 공격을 막아냈지만 웹페이지 주요기능이 다운되었고 서버 롤백을 해야만 하는 상황...

이 사이트는 1개의 데이터 서버에 100만 명의 개인정보를 모두 보관하고 있었기 때문에,
윤아는 데이터를 롤백하며 롤백시점 이전 회원가입한 신규회원 데이터, 비밀번호 등 개인정보를 변경한 회원의 변경이력 등을 날려버렸고 엄청난 악플에 시달리게 된다. ㅠㅠ


이후 윤아는 과거의 실수를 반복하지 않기 위해, ai에서 찾은 정보를 토대로 데이터를 종류별로 서버를 나눠 저장하기로 했다.

회원 프로필 DB (User DB) → 이름, 이메일, 가입일 등 기본 정보
인증 정보 DB 3대 (Auth DB) → 비밀번호(해시값), 로그인 관련 정보
그외 DB 20대 (Guitar DB) → 기타 다른 정보

Auth DB는 로그인 요청이 워낙 많아 1대의 서버로는 감당이 안 됐다.
그래서 윤아는 hash(user_id) % N 방식으로 여러 대의 서버에 나눠 저장하기로 했다.
계산 한 번으로 어느 서버에 그 유저의 인증 정보가 있는지 즉시 알 수 있어,
2번 이상의 조회 없이 빠르게 값을 읽고 가져올 수 있기 때문이다.

그리고 왜인지 삘을 받은 윤아는 스스로 Auth DB의 대수를 추가했다.

그리고 다음 날, 윤아는 100만 명의 회원들로부터 로그인이 되지 않는다는 수많은 항의를 받게 된다...

이유는 무엇일까?


A. 작업을 하기 전 클로드에게 이 일을 해도 되냐는 질문을 하지 않았기 때문

서버 대수를 추가하면서 hash(user_id) % N의 N값이 변경되었지만, 기존 인증 정보는 이전 해시 규칙에 따라 저장된 상태였다. 따라서 로그인 요청은 새로운 계산 결과에 따라 다른 서버를 조회하게 되었고, 실제 인증 정보가 저장된 서버를 찾지 못해 대부분의 사용자가 로그인에 실패하게 되었다.

이것이 일반 해시 방식에서 발생하는 해시 키 재배치(Rehash) 문제이다.


해시 공간과 해시링

해시공간과 해시링은 해시 키 재배치(rehash) 문제를 논리적으로 이해하는데 도움이 되는 개념이다.
나는 이해하지 못했다만, 여러분은 이해해보길 바란다.


오늘 발표의 목표 중 하나는 다음 순서 발표자를 빛내자이며,
실제로 다음 순서에 있는 발표자를 빛내기 위해 발표길이를 많이 줄였다.
ㄹㅇㄹㅇㄹㅇ이다.



팅!

profile
양치기소녀

0개의 댓글