轉載自:http://www.kongch.com/2012/01/zeromq-pattern-pipeline/
Pipeline pattern 管道模式。
這種模式描述的場景是數據被散布到以管道方式組織的各個節點上。管道的每一步都連接一個或多個節點,連接多個節點時數據以RR方式往下流。
注意是流,意味著數據跟發布模式一樣是單向的。這個模式對應的socket是ZMQ_PUSH和ZMQ_PULL.
ZMQ_PUSH
用來向下游節點發消息。下游多個節點時采取RoundRobin分發,zmq_recv()對于這個socket也是無效的。
與Pub不同的是,當下游節點達到高水位(HWM)或者根本沒有下游節點時,zmq_send()就阻塞了,消息并不丟失。
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 |
ZMQ_PULL
下游節點在這個socket上進行zmq_recv(),來收取上游發來的消息。zmq_send()在此socket上是沒有意義的。
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到一處。單向,沒有回頭。
事實上,這種模式也多見于并行計算、分布式計算這些場景中。
這個模式跟pub-sub一樣容易理解,因此也沒必要再贅述了。