Pastry Distributed Hash Table을 구현하려고하는데 몇 가지 사항이 이해를 피하고 있습니다. 누군가가 명확히 할 수 있기를 바랐습니다.
면책 조항 : 저는 컴퓨터 과학 학생이 아닙니다. 나는 내 인생에서 정확히 두 개의 컴퓨터 과학 과정을 밟았으며 원격으로 복잡한 것을 다루지 않았습니다. 나는 수년간 소프트웨어를 사용해 왔기 때문에 아이디어를 내 머리에 감쌀 수 있다면 구현 작업에 달려 있다고 생각합니다. 그래서 나는 명백한 것을 놓치고있을 수 있습니다.
필자는 저자들이 발표 한 논문을 읽었으며 [1] 좋은 진전을 보였지만 라우팅 테이블이 작동하는 방식에 대한 한 가지 특별한 점에 계속 매달리고 있습니다.
이 논문은
노드의 라우팅 테이블, ,로 구성되어 ⌈ 로그 2 B N ⌉ 있는 행 (2) B - 1 개 항목 각각. 2 B - 1 명 행의 엔트리 N 라우팅 테이블의 각각은 그 노드 아이디 공유 본 노드의 노드 아이디를 인터넷에 처음 N 자리수하지만 그 노드를 참조 N + 1 번째 자리가 하나 갖는 2 B - 1 개 보다 가능한 값 다른 N + 1 은 본 노드의 ID의 제 자리.
애플리케이션 특정 변수, 보통 약자 . 간단히하기 위해 사용합시다 . 위의 내용은
노드의 라우팅 테이블, ,로 구성되어 ⌈ 로그 (16) N ⌉ 와 행 15 개 항목 각. 15 명 행에있는 엔트리 N 라우팅 테이블들의 각각은 그 노드 아이디 RST Fi를 지분 현재 노드의 노드 아이디를 숫자이지만 그 N 노드 참조 N + 1 번째 자리가 하나 갖는 2 B - 1 개 수있는 값 이외의 N의 + 현재 노드의 ID에서 1 번째 숫자입니다.
나는 그것을 많이 이해합니다. 또한 은 클러스터의 서버 수입니다. 나도 알아
내 질문은 항목이 배치 된 행이 키의 공유 길이에 따라 달라지면 왜 행 수에 임의의 한계가 보이는 것입니까? (128 비트 nodeId를 b 비트의 숫자로 나눔) 인 경우 각 nodeId에는 32 자리가 있습니다. 따라서 N 이 충분히 높아지면 ⌈ log 16 N ⌉ > 32 ? 이 시나리오에 도달하려면 340,282,366,920,938,463,463,374,607,431,768,211,457 (수학이 옳다면) 서버가 필요하지만 이상한 포함처럼 보이며 상관 관계는 설명되지 않습니다.
또한 서버 수가 적 으면 어떻게됩니까? 서버가 16 개 미만인 경우 테이블에 하나의 행만 있습니다. 또한 어떤 상황에서도 행의 모든 항목에 해당 서버가 없습니다. 항목을 비워 두어야합니까? 서버 수가 적더라도 리프 세트에서 서버를 찾을 수 있다는 것을 알고 있지만 두 번째 행에 대해 동일한 quandary가 발생합니다. 노드 ID가있는 서버가 없으면 어떻게됩니까? n 번째 자리의 가능한 모든 순열을 채울 수 있습니까? 마지막으로 4 개의 서버가 있고 임의의 우연히 32 자리 중 20 개를 공유하는 두 개의 노드가있는 경우 해당 노드에 대해 해당 테이블의 20 행을 채워야합니다. 필링에 근접 할 수있는 것보다 훨씬 더 많은 행이 있습니까?
여기에 내가 생각해 낸 방법이 있습니다.
- 접두사와 정확히 일치하는 노드가 없으면 항목은 null 값으로 설정됩니다.
- nodeId의 공유 길이와 일치하기에 충분한 행이 존재할 때까지 빈 행이 추가됩니다.
- 원하는 메시지 ID에 대해 일치하는 항목이없는 경우에만 공유 길이가 현재 nodeId보다 크거나 같고 항목이 수학적으로 현재보다 가까운 nodeId에 대한 라우팅 테이블 검색으로 폴백합니다. nodeId는 원하는 ID입니다.
- # 3에서 적합한 노드를 찾을 수 없으면 이것이 목적지라고 가정하고 메시지를 전달하십시오.
이 네 가지 가정이 모두지지됩니까? 이것에 대한 정보를 찾아야 할 다른 곳이 있습니까?
- 페이스트리 : A. Rowstrong 및 P. Druschel (2001)의 대규모 P2P 시스템을위한 확장 가능하고 분산 된 객체 위치 및 라우팅 - 여기에서 다운로드