2012-11-06 3 views
3

Linux (서버) 호스트의 한 응용 프로그램이 VM의 Win7 (클라이언트) 응용 프로그램과 통신하기를 원합니다. 선택의 여지는 ZeroMQ입니다. 하지만 비동기 작업을 어떻게 관리합니까?비동기 작업. 어떤 아키텍처입니까? (0MQ의 패턴)

예를 들어 보겠습니다. VM의 응용 프로그램은 임의의 간격으로 작업을 생성하고 Linux 상자로 보냅니다. 이것은 처리하지만 답할 시간이 필요합니다. 이 시간에 REQ/REP 패턴의 소켓이 차단되고 WinApp에서 들어오는 작업을 LinuxApp로 전달할 수 없습니다. 어떻게 해결해야합니까? 0MQ가 없더라도 이것이 일반적으로 어떻게 해결됩니까? 서버와 클라이언트를 모두 만들고 두 개의 연결을 설정해야합니까?

요구 사항 :

  • 클라이언트는 고유 한 작업 생성기입니다.
  • 서버는 연결하는 클라이언트마다 workerthread를 만듭니다. (하나 개의 소켓을 통해 각 클라이언트의 WorkerThread 쌍 사이 REQ/REQ)>
  • 서버가 즉시 들어오는 작업을 전달해야합니다 -.
  • 서버는 고유 한 클라이언트 사이의 연결의 WorkerThread (일부 tunnle)
  • 을 설정합니다.
  • 서버는 여러 클라이언트 (WT 연결)를 처리 할 수 ​​있어야합니다.

따라서 REQ/REP/REQ/REP/... 시퀀스를 달성 할 수 없습니다.

답변

4

ZMQ Guide에 설명 된 몇 가지 패턴을 살펴보고 그 중 하나가 단순한 REQ/REP보다 적합한 지 확인하십시오.

일반적으로 Linux 서버의 서버는 수신 작업을 일련의 작업자에게 전달하는 ROUTER/DEALER 패턴의 구현이 필요합니다.

ZMQ는 기존 소켓 기반 클라이언트/서버 솔루션과 비교할 때 자체 토폴로지가 있습니다. 다른 솔루션은 스레드 풀을 사용하여 들어오는 작업을 전달하는 소켓 기반 서버를 구현하는 것일 수 있습니다.

UPDATE : 당신이 당신의 요구 사항에 precising 봤는데 이후 나는 집사 패턴이 당신의 목적을 위해 좋은하고 신뢰할 수있는 출발점이 될 것 같아요. 그의 의견에 @gvd 언급처럼 더 나은 피팅 패턴이있을 수 있습니다.

+0

다음 링크를 참조하십시오. http://zguide.zeromq.org/page:all#Least-Recently-Used-Routing-LRU-Pattern – gvd

+0

@gvd LRU 정말?!? 내 첫 생각은 오히려 [majordomo] (http://zguide.zeromq.org/page:all#Service-Oriented-Reliable-Queuing-Majordomo-Pattern)와 같지만 클라이언트 요구 사항에 따라 과잉 공격이 될 수 있습니다 (같은 시간에 여러 번) . –

+0

그것도 작동합니다. Mongrel2 does (push/pull and pub/sub)와 같은 여러 패턴을 결합 할 수도 있습니다. – gvd

3

DevNoob에 따르면 비동기 클라이언트 서버 패턴은 필요한 것처럼 들립니다.

"LRU"는 가장 오래 전에 사용되지는 않았지만 가이드의 최신 텍스트에서 해당 용어를 삭제했으며 "로드 균형 조정"을 대신 사용하고 있습니다. 목표는 작업자 집합 전체에서로드 밸런스하는 것이기 때문에 ...

1

ZMQ를 원하는 라이브러리로 언급했음을 알고 있지만 겸손하게 Akka (www.akka.io)를 제안 할 수 있습니까? Akka는 좋은 경험이있는 ZQM 확장을 가지고 있으므로 전송 메커니즘 (netty 기반)과 ZMQ 사이를 쉽게 변환 할 수 있습니다. 액터 모델을 구현하고 더 중요한 것은 작업자간에 비동기 처리를위한 'ask'와 'tell'을 제공한다는 것입니다. Akka는 또한 메시징 속도 측면에서 ZMQ와 매우 유리하게 경쟁하는 것으로 보이며 제 경험에서 훨씬 잘 설명됩니다.

Akka가 갖고 있지 않은 한 가지는 언어 간 지원입니다.하지만 지금은 ZMQ 확장을 사용하고 있습니다.ZMQ와 Akka의 결합은 실제로 매우 강력하고 유연한 플랫폼으로 입증되었습니다.