맨위로가기

랑데부 해싱

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

랑데부 해싱(Rendezvous hashing)은 1996년 David Thaler와 Chinya Ravishankar가 개발한 분산 해시 테이블 문제를 해결하기 위한 알고리즘이다. 객체를 여러 서버(사이트) 중 가장 적합한 곳에 할당하기 위해 각 객체와 서버에 점수를 부여하고, 가장 높은 점수를 가진 서버를 선택하는 방식으로 작동한다. 랑데부 해싱은 단순성과 일반성으로 인해 실제 응용 분야에서 일관된 해싱보다 선호되는 경향이 있으며, 멀티캐스트, 캐싱, 샤딩, 분산 데이터베이스 등 다양한 분야에서 활용된다. 랑데부 해싱은 낮은 오버헤드, 부하 분산, 사이트 용량 조절, 높은 적중률, 최소 교란, 분산 k-합의 등의 속성을 가진다. 가중 변형, 캐시 배열 라우팅 프로토콜(CARP), 제어된 복제(CRUSH), 스켈레톤 기반 변형 등 다양한 형태로 발전되었으며, 파이썬으로 구현할 수 있다.

더 읽어볼만한 페이지

  • 해싱 - 해시 충돌
    해시 충돌은 해시 함수에서 서로 다른 입력값이 동일한 해시값을 생성하는 현상으로, 데이터 수와 해시 값 범위에 따라 발생 가능성이 높아지며 데이터 무결성 및 보안 상의 문제점을 야기하여 해결 방법이 연구되고 있다.
  • 해싱 - HMAC
    HMAC(Keyed-Hash Message Authentication Code)는 공유된 비밀 키와 암호화 해시 함수를 사용하여 메시지의 무결성을 검증하는 메시지 인증 코드로서, IPsec, SSH, TLS, JSON 웹 토큰 등 다양한 보안 프로토콜에서 활용된다.
  • 알고리즘 - 텍스트-비디오 모델
    텍스트-비디오 모델은 텍스트 입력을 기반으로 비디오를 생성하는 인공지능 모델로서, 다양한 모델들이 개발되고 교육, 홍보, 창작 산업 등 여러 분야에 활용되지만 컴퓨팅 자원 소모, 데이터 부족, 텍스트 해석 오류, 윤리적 문제 등의 한계점을 가진다.
  • 알고리즘 - 마스터 정리
    마스터 정리는 분할 정복 알고리즘의 시간 복잡도 분석 도구로서, 점화식을 세 가지 경우로 나누어 재귀 알고리즘의 효율성을 파악하고, 다양한 정렬 및 일반 알고리즘 분석에 활용되지만, 특정 조건에서는 적용이 제한될 수 있습니다.
랑데부 해싱
일반 정보
자료 구조연관 배열
종류분산 해시 테이블
고안자데이비드 탈러와 치니야 라비샹카르
고안 연도1993년
개요
목적분산 시스템에서 데이터를 저장하고 검색하는 데 사용되는 해싱 기술
특징데이터의 위치를 결정하는 데 있어 일관성 유지
노드의 추가 및 제거 시 데이터 재배치 최소화
부하 분산
작동 원리
노드 및 키 해싱각 노드와 키를 해시 함수를 사용하여 동일한 공간에 매핑
데이터 위치 결정키의 해시 값에 가장 가까운 노드에 데이터를 저장
노드 추가 및 제거추가 시, 새로운 노드는 자신의 해시 값에 따라 공간에 삽입
제거 시, 해당 노드에 저장된 데이터는 인접한 노드로 재분배
장점
일관성노드 변경 시 데이터 재배치 최소화
부하 분산데이터를 여러 노드에 균등하게 분산
확장성시스템 확장이 용이
단점
구현 복잡성알고리즘 구현이 복잡할 수 있음
초기 부하 분산초기 데이터 분산이 불균등할 수 있음
활용 분야
분산 캐시대규모 분산 시스템에서 캐시 데이터 관리
콘텐츠 전송 네트워크 (CDN)사용자에게 가까운 서버에서 콘텐츠 제공
데이터베이스 샤딩대규모 데이터베이스를 여러 샤드로 분할하여 관리
관련 알고리즘
컨시스턴트 해싱랑데부 해싱과 유사한 목적을 가진 해싱 기술

2. 역사

랑데부 해시는 1996년 미시간 대학교의 데이비드 탈러와 치냐 라비샹카르가 발명했다.[34] 1년 후 일관된 해싱이 문헌에 등장했다. 단순성과 일반성으로 인해, 랑데부 해싱은 실제 응용 분야에서 일관된 해싱보다 선호되는 경향이 있다.[3][4][5]

랑데부 해싱의 초기 활용 중 하나는 인터넷 멀티캐스트 클라이언트가 분산된 방식으로 멀티캐스트 랑데부 지점을 식별할 수 있게 하는 것이었다.[35][36] 1998년에는 마이크로소프트의 캐시 배열 라우팅 프로토콜(CARP)에서 분산 캐시 조정 및 라우팅을 위해 사용되었다.[37][38] 일부 프로토콜 독립 멀티캐스트 라우팅 프로토콜은 랑데부 해싱을 사용하여 랑데부 지점을 선택한다.

랑데부 해싱은 모바일 캐싱,[39] 라우터 설계,[40] 보안 키 설정,[41] 샤딩, 분산 데이터베이스 등 다양한 응용 프로그램에 적용되었다.[42]

랑데부 해싱은 깃허브 로드 밸런서,[10] 아파치 이그나이트 분산 데이터베이스,[11] 타호-LAFS 파일 저장소,[12] 코블리츠 대용량 파일 배포 서비스,[13] 아파치 드루이드,[14] IBM의 클라우드 오브젝트 스토어,[15] 아르바도스 데이터 관리 시스템,[16] 아파치 카프카,[17] 트위터 이벤트버스 퍼블리싱/구독 플랫폼 등 다양한 실제 시스템에서 사용되고 있다.[18]

3. 알고리즘

랑데부 해싱 알고리즘의 기본 아이디어는 각 사이트에 객체에 대한 점수(가중치)를 부여하고, 가장 높은 점수를 내는 사이트에 객체를 할당하는 것이다. 모든 클라이언트는 해시 함수 ''h()''에 대해 합의해야 한다.

객체 ''Oi''에 대해 사이트 ''Sj''는 가중치 ''wi,j = h(Oi, Sj)''를 갖는다. 이 가중치가 가장 큰 사이트에 ''Oi''를 할당한다. 예를 들어, ''k=1''인 경우, 객체 O_in개의 사이트 S_1, S_2 \dots S_nn개의 해시 값 h(O_i, S_j)을 계산하여 가장 높은 해시 값을 생성하는 사이트 S_k에 배치된다.

사이트가 추가되거나 제거될 경우, 해당 사이트에 매핑된 개체만 다시 매핑된다. 새 사이트 S_{n+1}이 추가되면, 새로운 객체 배치 또는 요청은 n+1개의 해시 값을 계산하고 이 중 가장 큰 값을 선택한다. 만약 S_k에 이미 있는 객체가 이 새로운 사이트 S_{n+1}에 매핑되면 새롭게 가져와 S_{n+1}에 캐싱된다.

사이트 간 용량이 다른 경우에도 랑데부 해싱은 쉽게 적용할 수 있다. 예를 들어, 특정 사이트의 용량이 다른 사이트의 두 배라면 해당 사이트를 목록에 두 번 나타내는 방식으로 처리할 수 있다.

분산된 ''k''-합의가 필요한 경우, 클라이언트는 ''k''개의 해시 값이 가장 큰 사이트를 독립적으로 선택하면 된다.

기본 HRW의 O(n) 배치 비용은 문제가 되지 않을 수 있지만, HRW 알고리즘의 변형을 통해 객체 위치를 찾는 시간 복잡도를 O(\log n)으로 줄일 수도 있다.

3. 1. 속성

랑데부 해싱은 다음과 같은 속성을 갖는다.

  • '''낮은 오버헤드''': 사용된 해시 함수가 효율적이므로 클라이언트의 오버헤드가 매우 낮다.
  • '''부하 분산''': 해시 함수가 무작위화되므로, 각 ''n''개 사이트가 객체 ''O''를 수신할 가능성이 동일하다. 부하는 사이트 전체에 균일하게 분산된다.
  • '''사이트 용량''': 서로 다른 용량을 가진 사이트는 용량에 비례하는 다중성으로 사이트 목록에 표시될 수 있다. 다른 사이트의 두 배 용량을 가진 사이트는 목록에 두 번 표시되는 반면, 다른 모든 사이트는 한 번 표시된다.
  • '''높은 적중률''': 모든 클라이언트가 객체 ''O''를 동일한 사이트 ''SO''에 배치하는 데 동의하므로 ''SO''에 대한 각 가져오기 또는 배치 작업은 적중률 측면에서 최대 유틸리티를 제공한다. 객체 ''O''는 ''SO''에서 일부 교체 알고리즘에 의해 제거되지 않는 한 항상 발견된다.
  • '''최소 교란''': 사이트가 고장나면 해당 사이트에 매핑된 개체만 다시 매핑하면 된다. 교란은 최소화된다.[45][46]
  • '''분산된 ''k''-agreement''': 클라이언트는 단순히 순서에서 최고의 ''k'' 사이트를 선택하여 ''k'' 개의 사이트에 분산 합의에 도달할 수 있다.[47]

4. 가중 변형

표준 랑데부 해싱은 모든 노드가 동일한 수의 키를 할당받는 것을 가정하지만, 실제로는 노드마다 용량이 다를 수 있다. 예를 들어, 한 노드가 다른 노드보다 저장 용량이 두 배 크다면, 알고리즘이 이를 고려하여 용량이 큰 노드에 더 많은 키를 할당하는 것이 효율적일 수 있다.

이러한 문제를 해결하기 위해, 용량이 큰 노드에 더 많은 키를 할당하기 위한 다양한 변형들이 제안되었다. 간단한 접근 방식은 큰 노드에 여러 개의 가상 위치를 할당하여 더 많은 키를 받도록 하는 것이다. 하지만 이 방식은 노드 간 용량 비율이 정수가 아닐 경우 성능 저하를 유발할 수 있다. 예를 들어, 한 노드가 다른 노드보다 42% 더 큰 용량을 가진 경우, 많은 가상 노드를 추가해야 하므로 성능이 크게 떨어진다. 이러한 제약을 극복하기 위해 여러 수정 방법이 제안되었다.[21]

4. 1. 캐시 목록 라우팅 프로토콜 (CARP)

캐시 배열 라우팅 프로토콜(CARP)은 1998년 IETF 초안으로, 각 노드의 해시 점수에 가중치를 곱하여 노드에 대한 가중치를 임의의 정밀도로 계산하는 방법을 설명한다.[21] 그러나 이 접근 방식은 노드의 가중치가 변경되거나, 노드가 추가 또는 제거될 때 모든 부하 계수를 다시 계산하고 상대적으로 조정해야 한다는 단점이 있다. 부하 계수가 서로 상대적으로 변경되면, 가중치가 변경되지 않았더라도 부하 계수가 시스템의 다른 노드에 상대적으로 변경된 노드 간에 키가 이동하게 된다. 이는 과도한 키 이동을 초래한다.[27]

4. 2. 제어된 복제 (CRUSH)

CRUSH (Controlled Replication Under Scalable Hashing, 확장 가능한 해싱 기반의 제어된 복제)는 RUSH의 확장이다.[48] RUSH는 해시를 이용하여 키를 탐색할 수 있는 트리를 생성하는 것으로 랑데부 해싱을 개선한다.[49]

각 객체 ''O''를 ''O''에 대해 가장 높은 순위의 ''r < m'' 사이트에 복제하여 장애에 대한 복원력을 향상시킬 수 있으며, 원하는 복원력 수준에 따라 ''r''을 선택한다. 가장 간단한 전략은 리프 레벨 클러스터 내에서만 복제하는 것이다.

''O''를 위해 선택된 리프 레벨 사이트를 사용할 수 없는 경우, 동일한 리프 레벨 클러스터 내에서 ''O''에 대해 다음으로 순위가 높은 사이트를 선택한다. ''O''가 리프 레벨 클러스터 내에서 복제된 경우, 순위가 매겨진 ''r''개 사이트의 순서에서 다음 사용 가능한 사이트에서 ''O''를 찾을 수 있다. 실패한 서버가 보유했던 모든 객체는 해당 클러스터의 다른 사이트에 나타난다.

사이트가 시스템에 추가되면, 이미 다른 사이트에 할당된 일부 객체에 대한 승리 사이트가 될 수 있다. 다른 클러스터에 매핑된 객체는 이 새로운 사이트에 매핑되지 않으므로, 해당 클러스터의 다른 사이트에서 보유한 객체만 고려하면 된다. 사이트가 캐시인 경우, 새 사이트에 매핑된 객체에 접근하려고 하면 캐시 미스가 발생하고, 해당 객체가 페치되어 캐시되며, 작업이 정상으로 돌아간다.

사이트가 서버인 경우, 일부 객체는 새로 추가된 이 사이트로 다시 매핑되어야 한다. 이전과 마찬가지로 다른 클러스터에 매핑된 객체는 이 새로운 사이트에 매핑되지 않으므로, 해당 클러스터의 사이트에서 보유한 객체만 고려하면 된다.

CRUSH는 의사 난수 함수(해시)를 사용하여 트리를 탐색하여 특정 키를 최종적으로 담당하는 노드를 찾는 방식이다.[28] 노드를 추가할 때 완벽한 안정성을 제공하지만, 노드를 제거하거나 가중치를 변경할 때는 완벽하게 안정적이지 않으며, 키의 과도한 이동은 트리의 높이에 비례한다.

CRUSH 알고리즘은 Ceph 데이터 저장 시스템에서 데이터 객체를 저장하는 노드에 매핑하는 데 사용된다.[30]

4. 3. 스켈레톤 기반 변형

n이 매우 클 때 스켈레톤 기반 변형은 실행 시간을 크게 향상시킬 수 있다.[50][51][52] 이 방법은 가상 계층 구조(스켈레톤)를 만들고 각 계층에서 HRW를 적용하여 O(log n)의 실행 시간을 가능하게 한다.



위에 설명된 랑데부 해싱의 표준 버전은 적당한 ''n''에 대해서는 꽤 잘 작동하지만, n이 매우 클 경우, 랑데부 해싱의 계층적 사용은 O(\log n) 실행 시간을 달성한다.[23][24][25] 이 방법은 가상 계층 구조 ("스켈레톤")를 생성하고, 계층 구조를 내려가는 동안 각 레벨에서 HRW를 적용하여 O(\log n) 실행 시간을 달성한다. 먼저 상수 m을 선택하고 n개의 사이트를 c = \lceil n / m \rceil개의 클러스터로 구성한다. 그 다음, 상수 f를 선택하고 이러한 c개 클러스터를 각 팬아웃이 f인 가상 노드의 트리 T의 잎에 배치하여 가상 계층 구조를 구축한다.

첨부된 그림에서 클러스터 크기는 m = 4이고, 스켈레톤 팬아웃은 f = 3이다. 108개의 사이트(실제 노드)를 가정하면, 3계층 가상 계층 구조가 생성된다. 가상 노드는 8진수로 번호가 매겨진다.

가상 계층 구조는 위에서 시작하여 아래로 내려가면서 이해하는 것이 가장 쉽다. 계층 구조의 각 레벨에서 가상 노드 집합에 랑데부 해싱을 차례로 적용하고, 승리한 가상 노드에 의해 정의된 분기를 따라 내려간다. 가상 계층 구조의 어느 레벨에서나 시작할 수 있다.

예를 들어, 그림의 모든 108개 실제 노드에 HRW를 적용하는 대신, 먼저 27개 최하위 계층 가상 노드에 HRW를 적용하여 하나를 선택할 수 있다. 그런 다음 해당 클러스터의 4개 실제 노드에 HRW를 적용하고 승리한 사이트를 선택한다. 108개가 아닌 27 + 4 = 31개의 해시만 필요하다. 계층 구조에서 한 레벨 더 위에서 이 방법을 적용하면, 승리한 사이트에 도달하기 위해 9 + 3 + 4 = 16개의 해시가 필요하다. 그림은 스켈레톤의 루트에서 시작하여 최종적으로 사이트 74로 끝나는 방법을 보여준다.

가상 계층 구조는 저장할 필요가 없으며, 가상 노드 이름이 단순히 밑 f(또는 혼합 기수) 표현의 접두사이므로 필요에 따라 생성할 수 있다. T의 높이는 h = O(\log c) = O(\log n)이며, mf는 모두 상수이므로 각 레벨에서 수행되는 작업은 O(1)이다.

m의 값은 예상 실패율 및 원하는 부하 분산 정도와 같은 요소에 따라 선택할 수 있다. m의 값이 높을수록 검색 오버헤드가 증가하는 대신, 실패 발생 시 부하 편향이 줄어든다.

m = n을 선택하면 비계층 랑데부 해싱과 동일하게 된다.

5. 일관된 해싱과의 비교

랑데부 해싱은 일관 해싱에 비해 단순성, 낮은 오버헤드, 일반성 면에서 뚜렷한 장점을 지닌다.[3][4][5] 랑데부 해싱은 토큰을 미리 계산하거나 저장할 필요가 없다는 점에서 일관된 해싱과 차별화된다.

일관된 해싱은 특정 조건을 만족하는 해시 함수를 사용하면 랑데부 해싱의 특수한 경우로 볼 수 있다. 그러나 랑데부 해싱은 사이트당 토큰 수가 제한된 경우 일관된 해싱으로 환원될 수 없다. 이는 랑데부 해싱이 제거된 사이트의 객체를 무제한의 다른 사이트로 재할당할 수 있기 때문이다.

랑데부 해싱은 분산 k-합의와 같은 문제에 대한 간단한 솔루션을 제공한다는 장점도 있다.

특징랑데부 해싱일관된 해싱
단순성개념적, 구현적으로 더 간단함.더 복잡한 로직을 사용하는 변형(예: 아마존의 Dynamo)이 존재.
오버헤드낮음. 토큰을 미리 계산하거나 저장할 필요 없음.사이트당 많은 수(예: 100~200)의 토큰을 사용하는 경우, 객체 할당을 위해 각 사이트에 대해 200개의 해시 값을 저장하거나 다시 계산해야 함. 그러나 주어진 사이트와 관련된 토큰은 미리 계산하여 정렬된 목록에 저장할 수 있으므로 객체에 해시 함수를 한 번만 적용하고 이진 검색을 통해 할당을 계산하면 됨.
일반성모든 k < n에 대해 작동.기본 버전은 사이트 간에 객체를 균일하게 분산하지 못할 수 있음. 사이트가 제거되면 해당 사이트에 할당된 각 객체는 해당 사이트가 가진 토큰 수만큼(예: 100~200개) 다른 사이트에 분산됨.
객체 분산균일한 해시 함수가 주어지면 모든 사이트에 객체를 균일하게 분산.사이트당 많은 토큰이 있어도 기본 버전은 사이트 간에 객체를 균일하게 분산하지 못할 수 있음.
시간 복잡도기본 HRW는 O(n). HRW 알고리즘의 변형(예: 골격)을 사용하면 O(\log n)으로 줄일 수 있지만, 배치에 대한 전반적인 균일성이 줄어듦. 그러나 n이 너무 크지 않다면 기본 HRW의 O(n) 배치 비용은 문제가 되지 않음.일관 해싱은 사이트를 균등하고 무작위로 토큰이라 불리는 단위 원상의 점에 매핑하여 작동함. 객체도 단위 원에 매핑되어 객체의 위치에서 시계 방향으로 이동하면서 처음 만나는 토큰을 가진 사이트에 배치됨. 사이트가 제거되면 해당 사이트가 소유한 객체는 시계 방향으로 이동하면서 다음에 만나는 토큰을 소유한 사이트로 이전됨.
기타각 사이트에 대한 여러 토큰과 관련 메타데이터를 올바르게 처리하는 것과 관련된 모든 오버헤드와 복잡성을 완전히 피함. 분산 k 합의와 같은 다른 중요한 문제에 대한 간단한 솔루션을 제공.더 복잡한 로직을 사용하는 일관성 해싱 변형(예: 아마존의 Dynamo)은 기본 일관성 해싱보다 더 나은 부하 분산을 제공하고, 새로운 사이트 추가에 대한 오버헤드를 줄이며, 메타데이터 오버헤드를 줄이고 다른 이점을 제공.[26]


6. 구현

가중 랑데부 해시(Weighted Rendezvous Hash, WRH)를 구현하는 파이썬 코드는 다음과 같다.[53]

```python

#!/usr/bin/env python

import mmh3

import math

def int_to_float(value: int) -> float:

"""균일하게 임의의 64비트 정수를 [0, 1) 구간의 균일하게 임의의 부동 소수점 숫자로 변환한다."""

fifty_three_ones = (0xFFFFFFFFFFFFFFFF >> (64 - 53))

fifty_three_zeros = float(1 << 53)

return (value & fifty_three_ones) / fifty_three_zeros

class Node(object):

"""가중 랑데부 해시의 일부로 키가 할당된 노드를 나타내는 클래스이다."""

def __init__(self, name: str, seed, weight) -> None:

self.name, self.seed, self.weight = name, seed, weight

def __str__(self):

return "[" + self.name + " (" + str(self.seed) + ", " + str(self.weight) + ")]"

def compute_weighted_score(self, key):

hash_1, hash_2 = mmh3.hash64(str(key), 0xFFFFFFFF & self.seed)

hash_f = int_to_float(hash_2)

score = 1.0 / -math.log(hash_f)

return self.weight * score

def determine_responsible_node(nodes, key):

"""제공된 키를 담당하는 다양한 가중치의 노드 집합 중 노드를 결정한다."""

highest_score, champion = -1, None

for node in nodes:

score = node.compute_weighted_score(key)

if score > highest_score:

champion, highest_score = node, score

return champion

```

WRH의 출력 예는 다음과 같다.

```pycon

[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import wrh

>>> node1 = wrh.Node("node1", 123, 100)

>>> node2 = wrh.Node("node2", 567, 200)

>>> node3 = wrh.Node("node3", 789, 300)

>>> str(wrh.determine_responsible_node([node1, node2, node3], 'foo'))

'[node3 (789, 300)]'

>>> str(wrh.determine_responsible_node([node1, node2, node3], 'bar'))

'[node3 (789, 300)]'

>>> str(wrh.determine_responsible_node([node1, node2, node3], 'hello'))

'[node2 (567, 200)]'

```

해시 함수 h(\cdot)가 선택되면 구현은 간단하다. 각 클라이언트는 n개의 각 사이트에 대한 해시 값을 계산한 다음 가장 큰 값을 선택하면 된다. 이 알고리즘은 O(n) 시간에 실행된다. 해시 함수가 효율적이라면 n이 매우 크지 않은 한 O(n)의 실행 시간은 문제가 되지 않는다.[1][2]

다음은 가중 랑데부 해싱을 파이썬으로 구현한 또 다른 코드이다.[27]

```python

import mmh3

import math

from dataclasses import dataclass

from typing import List

def hash_to_unit_interval(s: str) -> float:

"""문자열을 단위 구간 (0, 1]으로 해싱한다."""

return (mmh3.hash128(s) + 1) / 2**128

@dataclass

class Node:

"""가중 랑데부 해싱의 일부로 키가 할당된 노드를 나타내는 클래스이다."""

name: str

weight: float

def compute_weighted_score(self, key: str):

score = hash_to_unit_interval(f"{self.name}: {key}")

log_score = 1.0 / -math.log(score)

return self.weight * log_score

def determine_responsible_node(nodes: list[Node], key: str):

"""제공된 키를 담당하는 다양한 가중치의 노드 집합 중 노드를 결정한다."""

return max(

nodes, key=lambda node: node.compute_weighted_score(key), default=None)

```

WRH의 출력 예시는 다음과 같다.

```pycon

>>> import wrh

>>> node1 = wrh.Node("node1", 100)

>>> node2 = wrh.Node("node2", 200)

>>> node3 = wrh.Node("node3", 300)

>>> str(wrh.determine_responsible_node([node1, node2, node3], "foo"))

"Node(name='node1', weight=100)"

>>> str(wrh.determine_responsible_node([node1, node2, node3], "bar"))

"Node(name='node2', weight=300)"

>>> str(wrh.determine_responsible_node([node1, node2, node3], "hello"))

"Node(name='node2', weight=300)"

>>> nodes = [node1, node2, node3]

>>> from collections import Counter

>>> responsible_nodes = [wrh.determine_responsible_node(

... nodes, f"key: {key}").name for key in range(45_000)]

>>> print(Counter(responsible_nodes))

Counter({'node3': 22487, 'node2': 15020, 'node1': 7493})

참조

[1] 웹사이트 A Name-Based Mapping Scheme for Rendezvous http://www.eecs.umic[...] University of Michigan Technical Report CSE-TR-316-96 2013-09-15
[2] 논문 Using Name-Based Mapping Schemes to Increase Hit Rates 1998-02
[3] 웹사이트 Rendezvous Hashing Explained - Randorithms https://randorithms.[...] 2021-03-29
[4] 웹사이트 Rendezvous hashing: my baseline "consistent" distribution method - Paul Khuong: some Lisp https://pvk.ca/Blog/[...] 2021-03-29
[5] 웹사이트 Rendezvous Hashing https://medium.com/i[...] 2021-03-29
[6] 논문 Supporting mobile device communications in the presence of broadcast servers http://www.cs.ucr.ed[...] 2006
[7] 논문 An efficient parallelized L7-filter design for multicore servers 2012-10
[8] 논문 Key Foisting and Key Stealing Attacks in Sensor Networks' http://www.cs.ucr.ed[...] 2015
[9] 논문 Distributed Architecture of Oracle Database In-memory 2015-08
[10] 웹사이트 Introducing the GitHub Load Balancer https://github.blog/[...] 2022-02-01
[11] 간행물 Apache Ignite https://en.wikipedia[...] 2022-12-09
[12] 웹사이트 Tahoe-LAFS https://tahoe-lafs.o[...] 2023-01-02
[13] 논문 Scale and performance in the CoBlitz large-file distribution service 2006
[14] 웹사이트 Router Process · Apache Druid https://druid.apache[...] 2023-01-02
[15] 웹사이트 IBM Cloud Object Storage System, Version 3.14.11, Storage Pool Expansion Guide https://www.ibm.com/[...] 2023-01-02
[16] 웹사이트 Arvados {{!}} Keep clients https://doc.arvados.[...] 2023-01-02
[17] 웹사이트 Horizontally scaling Kafka consumers with rendezvous hashing https://www.tinybird[...] 2023-02-15
[18] 웹사이트 Rendezvous Hashing https://medium.com/i[...] 2022-12-09
[19] 논문 Distributed Core Multicast (DCM): a routing protocol for many small groups with application to mobile IP telephony http://tools.ietf.or[...] IETF 2013-09-17
[20] 논문 Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised) http://tools.ietf.or[...] IETF 2013-09-17
[21] 웹사이트 Cache Array Routing Protocol v1.0 http://tools.ietf.or[...] Internet Draft 2013-09-15
[22] 웹사이트 Cache Array Routing Protocol and Microsoft Proxy Server 2.0 http://oldsite.mcoec[...] Microsoft 2013-09-15
[23] 서적 Hash-Based Virtual Hierarchies for Caching in Hybrid Content-Delivery Networks http://static.cs.ucr[...] CSE Department, University of California, Riverside 2015-11-15
[24] 논문 Hash-Based Virtual Hierarchies for Scalable Location Service in Mobile Ad-hoc Networks 2009-01
[25] 간행물 Decentralized Hash-Based Coordination of Distributed Multimedia Caches http://www.cs.ucr.ed[...] IEEE
[26] 논문 Dynamo http://www.allthings[...] 2018-06-07
[27] 웹사이트 New Hashing Algorithms for Data Storage http://www.snia.org/[...]
[28] 웹사이트 CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data http://www.crss.ucsc[...]
[29] 웹사이트 Replication Under Scalable Hashing: A Family of Algorithms for Scalable Decentralized Data Distribution http://www.ssrc.ucsc[...]
[30] 웹사이트 Crush Maps http://docs.ceph.com[...]
[31] 논문 Weighted Distributed Hash Tables
[32] 웹인용 A Name-Based Mapping Scheme for Rendezvous http://www.eecs.umic[...] University of Michigan Technical Report CSE-TR-316-96 2013-09-15
[33] 논문 Using Name-Based Mapping Schemes to Increase Hit Rates
[34] 웹인용 A Name-Based Mapping Scheme for Rendezvous http://www.eecs.umic[...] University of Michigan Technical Report CSE-TR-316-96 2013-09-15
[35] 웹인용 Distributed Core Multicast (DCM): a routing protocol for many small groups with application to mobile IP telephony http://tools.ietf.or[...] IETF 2013-09-17
[36] 웹인용 Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised) http://tools.ietf.or[...] IETF 2013-09-17
[37] 웹인용 Cache Array Routing Protocol v1.0 http://tools.ietf.or[...] Internet Draft 2013-09-15
[38] 웹인용 Cache Array Routing Protocol and Microsoft Proxy Server 2.0 http://oldsite.mcoec[...] Microsoft 2013-09-15
[39] 논문 Supporting mobile device communications in the presence of broadcast servers http://www.cs.ucr.ed[...] 2006
[40] 논문 An efficient parallelized L7-filter design for multicore servers 2012-10
[41] 논문 Key Foisting and Key Stealing Attacks in Sensor Networks' http://www.cs.ucr.ed[...] 2015
[42] 논문 Distributed Architecture of Oracle Database In-memory 2015-08
[43] 웹인용 A Name-Based Mapping Scheme for Rendezvous http://www.eecs.umic[...] University of Michigan Technical Report CSE-TR-316-96 2013-09-15
[44] 논문 Using Name-Based Mapping Schemes to Increase Hit Rates 1998-02
[45] 웹인용 A Name-Based Mapping Scheme for Rendezvous http://www.eecs.umic[...] University of Michigan Technical Report CSE-TR-316-96 2013-09-15
[46] 논문 Using Name-Based Mapping Schemes to Increase Hit Rates 1998-02
[47] 논문 Key Foisting and Key Stealing Attacks in Sensor Networks' http://www.cs.ucr.ed[...] 2015
[48] 웹인용 CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data https://web.archive.[...] 2019-12-31
[49] 웹인용 Replication Under Scalable Hashing: A Family of Algorithms for Scalable Decentralized Data Distribution https://web.archive.[...] 2019-12-31
[50] 서적 Hash-Based Virtual Hierarchies for Caching in Hybrid Content-Delivery Networks http://static.cs.ucr[...] CSE Department, University of California, Riverside 2001-05-13
[51] 논문 Hash-Based Virtual Hierarchies for Scalable Location Service in Mobile Ad-hoc Networks 2009-01
[52] 간행물 Decentralized Hash-Based Coordination of Distributed Multimedia Caches http://www.cs.ucr.ed[...] IEEE
[53] 웹인용 New Hashing Algorithms for Data Storage http://www.snia.org/[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com