2016-07-11 2 views
0

모든 클라이언트가 공유 설정 집합을 유지해야하는 간단한 (희망을 갖고) P2P 네트워크를 만들어야합니다. 내 네트워크 것들 중 일부는 할 필요가 :여러 피어간에 상태 동기화 유지

  1. 가 계속 나는 몇 가지 아이디어를 가지고 할 수 있지만
  2. 이 & 모든 동료

에 공유 리소스를 배포 가져 오기 명령을 수행 각 피어의 상태를 업데이트 이것을 구현하는 방법에 대해, 나는 바퀴를 재발 명하고있을 것이라고 확신한다. 그러나 내 Google-fu는 너무 약해서 추가 검색을 시작할 참조/용어를 찾을 수 없습니다.

피어를 설정하는 것은 여기에 문제가되지 않습니다. 중앙 서버에 관련된 모든 피어에 대한 정확한 정보가 있으며 피어가 원하는대로 서버에 쿼리 할 수 ​​있습니다. 단순화 - -

나는 내 문제는 두 가지로 분할하거나 할 수 있다고 생각 하나의 문제 :

  1. 을 글로벌 상태를 유지 그들이 동기화가되면 동료가 알 수있는 방법이 어디
  2. (1) 다음 명령을 수행 할 피어를 결정하십시오.

2는 동기화 된 글로벌 상태에서 비교적 쉬워야합니다. 수행 할 작업이 있으면 수행 한 것으로 표시하고, 동료에게 통보를 한 다음 수행합니다.

그래서 해결해야 할 한 가지 실제적인 문제는 국가의 모든 변화에 대해 모든 피어에게 수백 가지의 IP 요청을하지 않고 전역 상태를 유지하는 방법입니다. 내 말은, 모든 동료가 알림을 받아야한다는 것을 알기 때문에, 원래 피어가 모든 것을 자체적으로 수행 할 필요가없는 알고리즘을 기대하고있었습니다. 또한 여러 상태 변경이 동시에 여러 피어에 의해 감지 될 수 있으며 이미 그러한 충돌을 해결하는 무언가가있을 수 있습니다.

답변

0

성명서에는 중앙 서버가있는 P2P 네트워크가 있으므로 모순이 있습니다.하지만 원하는대로 얻을 수있을 것 같습니다.

먼저 분산 해시 테이블을 확인하십시오 : https://en.wikipedia.org/wiki/Distributed_hash_table.

DHT는 기본적으로 P2P 네트워크에 임의의 데이터 조각을 할당하고 찾아내는 방법입니다. 귀하의 경우에는 데이터 외에도 작업이있는 것으로 보입니다. 구현을 수정하여 각 작업에 고유 한 ID (잘 분산 된 일부 해시가 바람직 함)를 제공 한 다음 DHT 알고리즘을 실행하여 일반 데이터 인 경우 데이터를 보유 할 피어를 식별 할 수 있지만 수행 할 대상을 저장하는 대신 계산.

당신은 내가 상태를 저장하는 것에 대해 이야기하지 않는다는 것을 알았습니다. 이는이 솔루션에서 상태가 P2P 네트워크를 통해 분산되기 때문입니다. 어떤 노드도 전체 상태를 유지하지 않지만 누구나 네트워크에 쿼리하여 올바른 ID를 얻을 수 있습니다. 많은 주위에 검색

+0

DHT를 조사했지만 해시 테이블로 작동한다는 이유로 계정을 거부했습니다. 데이터를 검색하기 위해 키를 알아야합니다. 내가 잘못 찾고있을 수 있습니다,하지만 난 다른 문제가 있다고 생각 : 나는 모든 데이터를 포함하고 최소한의 의사 소통과 함께 이것을 달성하기 위해 모든 노드가 필요합니다. – velis

+0

내가 필요로하는 것은 BitCoin과 그 거래와 더 비슷하다고 생각합니다. – velis

0

나에게 특별히 the tutorial 내 사용 사례 언급 JGroups 라이브러리를 가리키는 this question 발견 (2.6을 추가 크레딧 :. 공유 클러스터 상태을 유지하는).

나는 그것을 조사하고 있지만 확실한 방법인지는 모르겠습니다.의사 소통은 다루지 만 충돌 해결은 다루지 않습니다.