문제

에 대한 답변 중 하나에서 TCP의 신뢰성을 바탕으로 UDP와 같은 브로드캐스트, 사용자가 다음을 언급합니다. 확산 메시징 API.나는 또한 ØMQ.나 역시 어느 정도 아는 바가 있다. MPI.

그래서 내 주요 질문은 다음과 같습니다.내가 왜 다른 것보다 하나를 선택하겠습니까?더 구체적으로 말하면, MPI의 성숙한 구현이 있는데 왜 Spread나 ØMQ를 사용하기로 선택하겠습니까?

도움이 되었습니까?

해결책

MPI는 빠르고 안정적인 네트워크를 통해 긴밀하게 결합된 컴퓨팅 클러스터로 설계되었습니다.Spread와 ØMQ는 대규모 분산 시스템을 위해 설계되었습니다.병렬 과학 애플리케이션을 설계하는 경우 MPI를 사용하고, 결함 및 네트워크 불안정성에 대한 복원력이 필요한 영구 분산 시스템을 설계하는 경우 다른 것 중 하나를 사용하십시오.

MPI에는 내결함성을 위한 기능이 매우 제한되어 있습니다.대부분의 구현에서 기본 오류 처리 동작은 시스템 전체에 걸친 실패입니다.또한 MPI의 의미론에 따르면 전송된 모든 메시지는 결국 소비되어야 합니다.이는 클러스터 시뮬레이션에는 적합하지만 분산 애플리케이션에는 적합하지 않습니다.

다른 팁

나는 이러한 라이브러리를 사용하지 않았지만 몇 가지 힌트를 줄 수 있습니다.

  1. MPI는 통신 프로토콜인 반면 Spread와 ØMQ는 실제 구현입니다.
  2. MPI는 "병렬" 프로그래밍에서 나오는 반면 Spread는 "분산" 프로그래밍에서 나옵니다.

따라서 실제로 병렬 시스템을 구축하려는지 분산 시스템을 구축하려는지에 따라 달라집니다.그것들은 서로 관련되어 있지만 암시된 의미/목표는 다릅니다.병렬 프로그래밍은 여러 컴퓨터를 동시에 사용하여 계산 능력을 높이는 것을 다룹니다.분산 프로그래밍은 안정적인(일관되고 내결함성이 있으며 가용성이 높은) 컴퓨터 그룹을 다룹니다.

"신뢰성"의 개념은 TCP의 개념과 약간 다릅니다.TCP의 신뢰성은 "이 패킷을 최종 프로그램에 무엇을 제공하든 상관없이"입니다. 분산 프로그래밍의 신뢰성은 "일부 기계가 죽더라도 시스템 전체가 일관된 방식으로 계속 작동합니다"입니다. 모든 참가자가 메시지를 받았다고 보장하기 위해 2단계 커밋 또는 더 빠른 대안 중 하나입니다.

여기서는 제공되는 서비스 종류와 각 서비스에 대한 인프라에 대한 서로 다른 개념을 사용하여 매우 다른 API를 다루고 있습니다.저는 MPI와 Spread에 대해 답변할 만큼 충분히 알지 못하지만 ZeroMQ로 조금 더 도움을 드릴 수 있습니다.

ZeroMQ는 간단한 메시징 통신 라이브러리입니다.제한된 공통 메시징 패턴(PUSH/PULL, REQUEST/REPLY, PUB/SUB 등) 세트를 기반으로 다른 피어(로컬 피어 포함)에 메시지를 보내는 것 외에는 아무것도 수행하지 않습니다.이는 클라이언트 연결, 검색 및 기본 정체를 해당 패턴에 따라 엄격하게 처리하며 나머지는 사용자가 직접 수행해야 합니다.

매우 제한적으로 보이지만 이 간단한 동작은 대부분 애플리케이션의 통신 계층에 필요한 것입니다.이를 통해 노드 간 간단한 프록시 및 게이트웨이를 사용하여 메모리에 모두 포함된 간단한 프로토타입부터 다양한 환경의 보다 복잡한 분산 애플리케이션까지 매우 빠르게 확장할 수 있습니다.그러나 노드 배포, 네트워크 검색 또는 서버 모니터링을 수행할 것으로 기대하지 마십시오.당신은 그것을 스스로해야 할 것입니다.

간단히 말해서, 간단한 멀티스레드 프로세스에서 분산 및 가변 환경으로 확장하려는 애플리케이션이 있거나 빠르게 실험하고 프로토타입을 만들고 싶고 모델에 적합한 솔루션이 없는 경우 zeromq를 사용하세요.그러나 매우 큰 클러스터로 확장하려면 네트워크 배포 및 모니터링에 약간의 노력을 기울여야 할 것으로 예상됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top