❓사용자의 요청을 고르게 분배하기 위해 사용되는 로드밸런서에서는 안정해시 기술을 사용안할까?
- 목적
- 로드 밸런서: 네트워크 트래픽을 여러 서버에 분산시켜 서버 과부하를 방지하고 가용성을 높이는 데 사용
- 안정 해시: 분산 시스템에서 데이터를 균등하게 분배하고 노드의 추가 및 제거 시 재분배를 최소화하는 데 사용
- 즉, 주된 분산 대상이 다름 ! 로드밸런서는 주로 네트워크 요청이나 트래픽을 분산하며, 안정 해시는 주로 데이터를 분산함
- 알고리즘의 복잡성
- 로드 밸런서: 일반적으로 간단한 분산 알고리즘(예: 라운드 로빈, 최소 연결, IP 해시 등)을 사용하여 실시간으로 트래픽 분배
- 안정 해시: 복잡한 해싱 기술을 사용하여 데이터를 분배하며, 노드의 추가/제거 시에도 최소한의 재분배를 보장하는 알고리즘을 사용
- 하지만 로드밸런서에서도 안정해시 기술 도입할 수 있음!
- 구글에서 개발한 Maglev 네트워크 로드 밸런서는 안정 해시 기술을 활용하여 대규모 분산 시스템에서 효율적인 트래픽 분산을 실현
- NGINX 도 안정해시 알고리즘 지원
❓ 서버 풀의 크기가 고정되어 있을 때는 무슨 상관이 있는거지?
- 재분배할 필요가 없으니까 hash % N 의 결과가 항상 일정하여 캐시 일관성이 유지됨.
대규모 캐시 미스(cache miss)가 발생하게 되며 안정 해시는 이 문제를 효과적으로 해결하는 기술이다안정해시는 해시 테이블 크기가 조정될 때 평균적으로 오직 k/n 개의 키만 재배치하는 해시 기술



안정 해시의 기본적인 절차는 다음과 같다
✅ 균등 분포 해시 함수 예시
- SHA-1 (Secure Hash Algorithm 1) : 0부터 2^160-1까지의 범위를 갖고 입력값을 해시 공간에 고르게 분포 시킴
- MD5 (Message Digest algorithm 5) : 128비트 해시값을 생성하며, 빠른 계산 속도를 제공
이 접근법에는 두가지 문제가 있다.
파티션의 크기를 균등하게 유지하는 게 불가능하다

키의 균등 분포를 달성하기 어렵다
이 두 문제를 해결하기 위해 제안된 기법이 가상노드/복제 라 불리는 기법이다.

가상 노드 : 실제 노드 또는 서버를 가리키는 노드로서, 하나의 서버는 링 위에 여러 개의 가상 노드를 가질 수 있다.❓실 사용 사례에서는 가상 노드의 개수를 어느정도로 가져가는가?
❓가상 노드는 실제 노드/서버랑 동일 스펙으로 구성되나?
- 가상 노드는 실제 물리적인 서버가 아니라, 해시 링 상에서 실제 서버를 여러 개로 나누어 표현하는 논리적 개념이다
- 따라서 실제 데이터를 저장하지 않고, 단지 실제 서버로 데이터를 라우팅하는 역할을 한다
- 데이터 분산과 로드 밸런싱을 위한 메타데이터로 사용
- 가상 노드에서 실제 노드로의 데이터 전달 과정
- 키 해싱: 데이터의 키가 해시되어 해시 링 상의 위치가 결정됨
- 가상 노드 매핑: 해당 위치에서 시계 방향으로 가장 가까운 가상 노드를 찾음
- 실제 서버 식별: 각 가상 노드는 자신이 속한 실제 서버의 정보를 가지고 있으므로 이 정보를 사용하여 해당 데이터가 어느 실제 서버로 가야 하는지 결정
- 데이터 전송: 식별된 실제 서버로 데이터가 직접 전송
- 저장 및 처리: 실제 서버에서 데이터를 저장하고 처리
- 메모리 내 데이터 구조
- 가상 노드 정보는 주로 해시 맵이나 배열과 같은 메모리 내 데이터 구조에 저장됨
- 이 구조는 가상 노드의 ID와 해당 실제 노드의 정보(예: IP 주소, 포트 번호)를 매핑함