Pipeline pattern 管道模式。 socket
這種模式描述的場景是數據被散佈到以管道方式組織的各個節點上。管道的每一步都鏈接一個或多個節點,鏈接多個節點時數據以RR方式往下流。 分佈式
注意是流,意味着數據跟發佈模式同樣是單向的。這個模式對應的socket是ZMQ_PUSH和ZMQ_PULL. spa
用來向下遊節點發消息。下游多個節點時採起RoundRobin分發,zmq_recv()對於這個socket也是無效的。 ip
與Pub不一樣的是,當下遊節點達到高水位(HWM)或者根本沒有下游節點時,zmq_send()就阻塞了,消息並不丟失。 io
Summary of ZMQ_PUSH characteristics | |
---|---|
Compatible peer sockets | ZMQ_PULL |
Direction | Unidirectional |
Send/receive pattern | Send only |
Incoming routing strategy | N/A |
Outgoing routing strategy | Round-robin |
ZMQ_HWM option action | Block |
下游節點在這個socket上進行zmq_recv(),來收取上游發來的消息。zmq_send()在此socket上是沒有意義的。 table
Summary of ZMQ_PULL characteristics | |
---|---|
Compatible peer sockets | ZMQ_PUSH |
Direction | Unidirectional |
Send/receive pattern | Receive only |
Incoming routing strategy | Fair-queued |
Outgoing routing strategy | N/A |
ZMQ_HWM option action | N/A |
流行的map-reduce能夠說就是這樣的模式。數據從頭開始,map到許多節點進行計算,計算結果最終reduce到一處。單向,沒有回頭。 map
事實上,這種模式也多見於並行計算、分佈式計算這些場景中。 queue
這個模式跟pub-sub同樣容易理解,所以也不必再贅述了。 並行