2011-11-14 4 views
4

여러 모듈로 구성된 응용 프로그램에서 서로 정보를 공유해야합니다. 예 : 게시/구독 모듈이 특정 정보 (예 : 상태 변수)를 게시하고 특정 정보에 관심이있는 모듈이이를 얻는 시나리오. 또는 요청/응답 시나리오에서 관심있는 모듈이 정보에 대해 명시 적으로 질문하고 대답을 얻습니다. ØMQ I 다른 메시지 버스 구현, 즉 D 버스 찾고있다메시지 버스 대 멀티 캐스트

, 및 QPID가 (후자의 두 AMQP를 기반으로) RabbitMQ. 그러나 누군가는 복잡하고 무거운 메시지 버스 구현을 시도하는 대신 문제를 해결하기 위해 단순히 멀티 캐스트를 사용하지 않는 것이 좋을 것이라고 지적했습니다.

멀티 캐스트가 실제로 내 문제를 해결할 수 있는지, 두 솔루션의 장단점을 이해할 수 있는지 경험이 부족하여 전문가의 도움을 받아야합니다. 대단히 감사하겠습니다.

+0

메시지 속도, 크기, 지속성 및 안정성 요구 사항은 무엇입니까? –

+0

@ScottA. 정보를 공유해야하는 약 30 개의 모듈이 있습니다. 메시지 속도는 극단적으로 높지 않습니다. 이것은 대부분 다른 모듈들에 통신 될 필요가있는 상태 정보이다. 상태가 변경되거나 모듈이 상태 변수의 값을 요청할 때. 게시/구독 시나리오에서는 신뢰성이 중요하지 않지만 요청/응답 시나리오에서는 신뢰성이 중요합니다. –

+0

얼마나 많은 정보가 공유 상태로 유지되고 있습니까? 사육사의 경우 사용 사례는 높은 읽기, 낮은 쓰기, 합리적으로 적은 양의 데이터입니다. 메시징 시스템이 아니지만 악용 될 수 있습니다. –

답변

4

대용량 프로덕션 환경에서 메시지 버스와 멀티 캐스트를 모두 경험하고 문제에 대해 숙련 된 네트워크 엔지니어와상의 한 결과 브로드 캐스트중인 경우가 아니면 전염병처럼 멀티 캐스트를 피해야한다고 말할 수 있습니다 매우 많은 노드 (수백).

멀티 캐스트를 사용하려면 신뢰할 수없는 프로토콜이라는 점을 알아야합니다. 메시지가 누락되거나 복제 될 수 있습니다. 멀티 캐스트의 최상위에서 안정성 프로토콜 (재시도, 중복 검색, 다시 보내기)을 유용하게 사용하려면 시간을 많이 소비해야합니다. 멀티 캐스트 지휘 로봇 탱크에 대한 군대 테스트에 대한 훌륭한 일화가 있습니다. 참조를 찾으려고합니다. 기본적으로 "90도 회전, 90도 회전, 화재"를 탱크 라인에 보낼 때입니다. 그들 중 일부는 1 턴 만 우회전하고 나머지는 3을 얻습니다. 그것은 신체 상해에 대한 처방입니다.

공유해야하는 정보의 종류에 따라 몇 가지 옵션이 있습니다.

구성 정보를 공유하는 경우 Zookeeper와 (과) 비슷한 것을 확인하십시오. 가볍고 사용하기 쉽고 안정적입니다. 공유 상태의 가장 최근 값은 항상 사용 가능하고 지속됩니다. 메시지 버스를 사용하면 모듈이 작동 중지되어 모듈이 마지막 구성 메시지를 놓친 경우 재전송 프로토콜이 필요합니다.

메시지 버스의 경우 복잡 할 수 있습니다. 그러나 필자는 ZeroMQ를 반드시이 범주에 포함시키지 않을 것입니다. 그것은 메시지 버스를 에뮬레이트 할 수 있지만 포인트 투 포인트 메커니즘에 가깝습니다. 나는 그것을 생산에 사용하지는 않았지만 나는 그것으로 수행 한 연구와 프로토 타이핑은 매우 호의적이었다.

또 다른 옵션은 Oracle Coherence, GridGain, GigaSpaces 등과 같은 분산 데이터 그리드 일 수 있습니다. 다시 말하지만, 이것은 설치 및 유지 보수를위한 또 다른 응용 프로그램이므로 복잡성은 증가하지만 데이터 그리드에는 많은 용도가 있습니다.

다른 MQ 옵션은 HornetMQ입니다. 필자는 그것을 사용하지 않았습니다 (우리는 사내 MQ라는 두 가지 상업용 MQ를 Sonic과 MQ 시리즈 모두 사용합니다). 그러나 나는 우호적 인 비교를 보았습니다.

D-Bus는 단일 컴퓨터에서 통신하기에 최적화 된 것으로 보이며 피어 - 투 - 피어, 클러스터링 또는 다른 유사한 작업을 수행하는 경우 FAQ에서는 다른 곳을 찾아 볼 것을 권장합니다. 경고 : D- 버스를 사용한 적이 없기 때문에 기본적으로 읽은 정보에 근본적으로 역행합니다.

+0

답장을 보내 주셔서 감사합니다. 대부분 모듈이 공유해야하는 상태 정보입니다. 나는 사육사를 들여다 볼 것이다. 불행히도 제한된 메모리 및 CPU 리소스로 하드웨어에서 실행해야하므로 소프트웨어 크기가 문제이므로 언급 한 다른 솔루션을 고려할 수 없습니다. –

+0

@JahanzebFarooq 사육사는 HornetMQ와 비슷한 발자국을 가지고있을 것입니다. 다시 말하지만, 그것은 당신이 거래하는 것에 달려 있습니다. 상태 정보는 사육사 사용 사례처럼 들릴 것입니다. ZeroMQ는 가벼운 것을 찾고 있다면 좋은 선택이지만, 다시 프로토콜을 추가해야합니다. 몇 대의 기계가 통신해야합니까? –

+0

일반적인 시나리오에서는 모두 동일한 호스트에 있습니다. 그러나 특정 모듈이 다른 호스트간에 통신해야하는보다 고급 시나리오에서 호스트의 수는 10 개에서 50 개까지입니다. –

1

패킷/메시지가 삭제되거나 손실 될 것을 염려하십니까? 멀티 캐스트는 기본적으로 지원되지 않지만 메시지 버스는 이러한 문제를 처리하거나 완화 할 수 있습니다.

+2

댓글이 있어야하는 것 같습니다. 질문에 대답하기 전에 설명을 통해 필요한 설명을 수집하십시오. –