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