나는 여러 작업자 컴퓨터에서 무거운 컴퓨팅 작업을 병렬 처리하려고합니다.이 작업자는 서로간에 데이터를 공유해야합니다. 나는 모든 근로자들이 연결되어 그들의 "이웃들"에 대한 정보를 얻는 서버를 가지고있어서 그들과 연결하고 데이터를 교환 할 수있다. 다음은 내가 염두에 두었던 구조의 그림입니다. ZeroMQ가 서로에 대해 알리는 클라이언트
모든 노드에는 4 개의 이웃이 있습니다 (그림에서 더 그리기를 원하지 않음). 나는 소켓 유형에서 전혀 고쳐지지 않는다, 나는 그들이 선택할 최선이 될 것이라고 생각했다.
그러나 ZeroMQ는 한 연결에 대한 연결 정보를 다른 연결에 전달할 방법이 없습니다. 이것이 실제로는 매우 일반적인 일이라고 생각하기 때문에 이에 대한 해결책이 있어야합니다. 네트워크 유형은 다양 할 수 있습니다. 표준 tcp/ip 네트워크 일 수도 있고 라우터를 통해 연결된 많은 컴퓨터가있을 수도 있고 infiniband를 통해 연결된 클러스터 일 수도 있습니다. 그래서 기본적으로 내가 원하는 것은 connect() 또는 bind()에 하나의 클라이언트에 간단하게 삽입 할 수있는 문자열이고 프로토콜과 네트워크 유형 및 모든 내용에 대해 걱정할 필요가 없습니다. 제로 맷이 성취하려고 시도하는 것을 정확하게 이해합니다. .
미리 답변 해주세요. :)
편집 :
WorkerMiddle.sendToServer("Hey server, please tell me my neighbours")
Server.sendToWorkerMiddle(Worker.top.connectionInfo())
WorkerMiddle.connectTo(WorkerTop)
Server.sendToWorkerMiddle(Worker.bottom.connectionInfo())
WorkerMiddle.connectTo(WorkerBottom)
Server.sendToWorkerMiddle(Worker.left.connectionInfo())
WorkerMiddle.connectTo(WorkerLeft)
Server.sendToWorkerMiddle(Worker.right.connectionInfo())
WorkerMiddle.connectTo(WorkerRight)
이것은 매우 광범위하므로 자세한 정보없이 유용한 답변을 드릴 수 없습니다. 우선, [docs (http://zguide.zeromq.org/page:all)를 읽으면서, 그들은 매우 유익하고 찾고있는 일을 성취 할 수있는 많은 연결 패턴을 포함합니다. 보다 유용한 정보를 제공하려면 a) 네트워크의 토폴로지 (물리적으로 배치/연결되는 방법 b) 사용중인 프로토콜 c) 사용중인 소켓 유형 pub/sub, rep/req 등) d) 누가 바인딩하고 누가 연결하는지, 그리고 종점은 어떻게 명명 되나요? – Jason
Jason에게 감사드립니다. 이미했습니다. 하지만 그것은 누군가가 솔루션으로 제공하는 것에 따라 소켓 유형을 선택하기 때문에 내가 말할 수있는 모든 것입니다. 하지만 그것을 명확히하려고 노력하겠습니다 :) – wlfbck
질문에 대한 훌륭한 업데이트! 필자는 당신이 문서를 읽었다 고 말했고, 4, 7, 8 장은 좀 더 복잡한 피어 투 피어 토폴로지에서 얻을 수있는 몇 가지 개념을 제공하고 거기에 링크되어있는 오픈 소스 통신 패턴의 저장소가 도움이 될 수 있습니다. 그러나 이러한 것들을 설계하는 것은 확실히 복잡합니다. 부분 응답을 게시하고 나중에 소켓 선택과 의사 소통 전략을 가지고 시간을 할애 해 보겠습니다. – Jason