대용량 프로덕션 환경에서 메시지 버스와 멀티 캐스트를 모두 경험하고 문제에 대해 숙련 된 네트워크 엔지니어와상의 한 결과 브로드 캐스트중인 경우가 아니면 전염병처럼 멀티 캐스트를 피해야한다고 말할 수 있습니다 매우 많은 노드 (수백).
멀티 캐스트를 사용하려면 신뢰할 수없는 프로토콜이라는 점을 알아야합니다. 메시지가 누락되거나 복제 될 수 있습니다. 멀티 캐스트의 최상위에서 안정성 프로토콜 (재시도, 중복 검색, 다시 보내기)을 유용하게 사용하려면 시간을 많이 소비해야합니다. 멀티 캐스트 지휘 로봇 탱크에 대한 군대 테스트에 대한 훌륭한 일화가 있습니다. 참조를 찾으려고합니다. 기본적으로 "90도 회전, 90도 회전, 화재"를 탱크 라인에 보낼 때입니다. 그들 중 일부는 1 턴 만 우회전하고 나머지는 3을 얻습니다. 그것은 신체 상해에 대한 처방입니다.
공유해야하는 정보의 종류에 따라 몇 가지 옵션이 있습니다.
구성 정보를 공유하는 경우 Zookeeper와 (과) 비슷한 것을 확인하십시오. 가볍고 사용하기 쉽고 안정적입니다. 공유 상태의 가장 최근 값은 항상 사용 가능하고 지속됩니다. 메시지 버스를 사용하면 모듈이 작동 중지되어 모듈이 마지막 구성 메시지를 놓친 경우 재전송 프로토콜이 필요합니다.
메시지 버스의 경우 복잡 할 수 있습니다. 그러나 필자는 ZeroMQ를 반드시이 범주에 포함시키지 않을 것입니다. 그것은 메시지 버스를 에뮬레이트 할 수 있지만 포인트 투 포인트 메커니즘에 가깝습니다. 나는 그것을 생산에 사용하지는 않았지만 나는 그것으로 수행 한 연구와 프로토 타이핑은 매우 호의적이었다.
또 다른 옵션은 Oracle Coherence, GridGain, GigaSpaces 등과 같은 분산 데이터 그리드 일 수 있습니다. 다시 말하지만, 이것은 설치 및 유지 보수를위한 또 다른 응용 프로그램이므로 복잡성은 증가하지만 데이터 그리드에는 많은 용도가 있습니다.
다른 MQ 옵션은 HornetMQ입니다. 필자는 그것을 사용하지 않았습니다 (우리는 사내 MQ라는 두 가지 상업용 MQ를 Sonic과 MQ 시리즈 모두 사용합니다). 그러나 나는 우호적 인 비교를 보았습니다.
D-Bus는 단일 컴퓨터에서 통신하기에 최적화 된 것으로 보이며 피어 - 투 - 피어, 클러스터링 또는 다른 유사한 작업을 수행하는 경우 FAQ에서는 다른 곳을 찾아 볼 것을 권장합니다. 경고 : D- 버스를 사용한 적이 없기 때문에 기본적으로 읽은 정보에 근본적으로 역행합니다.
메시지 속도, 크기, 지속성 및 안정성 요구 사항은 무엇입니까? –
@ScottA. 정보를 공유해야하는 약 30 개의 모듈이 있습니다. 메시지 속도는 극단적으로 높지 않습니다. 이것은 대부분 다른 모듈들에 통신 될 필요가있는 상태 정보이다. 상태가 변경되거나 모듈이 상태 변수의 값을 요청할 때. 게시/구독 시나리오에서는 신뢰성이 중요하지 않지만 요청/응답 시나리오에서는 신뢰성이 중요합니다. –
얼마나 많은 정보가 공유 상태로 유지되고 있습니까? 사육사의 경우 사용 사례는 높은 읽기, 낮은 쓰기, 합리적으로 적은 양의 데이터입니다. 메시징 시스템이 아니지만 악용 될 수 있습니다. –