2014-03-13 9 views
0

나는 Go에서 코드 DHT를 구축하고 있습니다 (그러나 언어 부분은 중요하지 않습니다).코드 DHT 응답 방법

그리고 노드 간의 응답 동작을 파악하려고합니다. 노드 C에 후속 요청 메시지를 보내려하지만 노드 A -> 노드 B로 먼저 이동 한 다음 노드 C에 도착해야합니다. 노드 C가 원래 노드에 응답하는 가장 좋은 방법은 무엇입니까?

나는 별개의 방법을 생각해 냈지만 DHT에 대해 어느 것이 더 이상하지 않은지 알지 못합니다. 각 노드는 요청을

  1. ,이이 때 노드 그렇게 응답이 원래
  2. 는 요청이 다음에 대해 잊지 확인했다 역방향 경로를 사용하게 원래의 TCP 연결에 응답을 기다립니다 C는 요청 메시지의 보낸 사람 (IPAddress) 필드에 표시된 원래 노드로 직접 응답을 보내는 요청을 수신합니다.
  3. 다른 메시지와 마찬가지로 발신자 NodeID에 응답을 보내면 코드 링 주위로 라우트됩니다.

어떤 것이 가장 좋은 방법인지 알아낼 수 없습니다.

답변

0

코드에서 라우팅을 사용하는 유일한 이유는 리소스를 찾는 것입니다. 그래서 접근 자와 전임자뿐만 아니라 2^n의 거리에있는 추가 노드를 알아야합니다. 이렇게하면 O(log N)의 조회 성능을 얻을 수 있습니다. 자세한 내용은 Wikipedia article about Chord을 참조하십시오.

그래서 C 노드가 직접 응답 할 수 있도록 원본 노드의 주소를 노드 C에 보내는 메시지에 첨부해야합니다. 이것은 모든 것보다 훨씬 나은 성능을 발휘합니다.

+0

감사합니다. 나는 손가락 테이블의 필요성을 이해합니다. C가 DHT에 대한 일반적인 idomatic 메서드에 직접 회신하고 있습니까? 가짜를 유지하고 싶다면, 메시지가 반대 경로를 취한 경우, 즉 각 노드가 열린 TCP 연결 (방법 # 1)에서 응답 대기 중일 경우 큰 성능 패널티가 발생합니다. –

+0

내가 배운 한 직접적인 응답이 필요합니다. 데이터 센터 나 다른 로컬 네트워크에서 코드를 배포하는 경우 동일한 경로를 다시 취하는 데 큰 불이익이 없다고 주장 할 수 있습니다. 그러나 코드가 여러 데이터 센터에서 인터넷을 통해 배포 될 때 크게 변경됩니다. – peter