zeromq介紹
zeroMQ,一個處理消息傳輸的庫,重點在傳輸上,看起來它像是在socket上面封裝了一層,讓我們可以很容易的利用它來做N對M的數據傳輸,在分布式系統中很方便,在接收端它有round-robin負載均衡。
在需要並行化處理數據的時候,采用消息隊列通訊的方式來協作,比采用共享狀態的方式要好的多。”
所以zeroMQ的主要用途是:分布式系統的消息通信工具。
zeroMQ中的zero,表示的是極簡。
“其實ZMQ可以做的還不止這些,它會顛覆人們編寫網絡應用程序的模式。雖然從表面上看,它不過是提供了一套處理套接字的API,能夠用zmq_recv()和zmq_send()進行消息的收發,但是,消息處理將成為應用程序的核心部分,很快你的程序就會變成一個個消息處理模塊,這既美觀又自然。它的擴展性還很強,每項任務由一個節點(節點是一個線程)、同一台機器上的兩個節點(節點是一個進程)、同一網絡上的兩台機器(節點是一台機器)來處理,而不需要改動應用程序。”
這點說的很好,但這種設計思路,其實早就有了,chromium里的多線程設計,便是把后台程序拆分成一個個task,post到工作線程中完成,然后再post回來,單機的多線程利用思路跟zeroMQ為並行計算而設計的思路有相似的地方,chromium對多線程使用的這種設計也不是首創的。“一個個的消息處理模塊”,在我當前工作的團隊中,整個服務過億網民的框架也是這么設計的,不過,消息的傳遞沒有使用zeroMQ,而是自己公司的rpc框架。
1、請求和應答
req和rep也就是請求回應模型,req和rep都可以請求和回答,不同的只是req是先send再rec,rep是先rec再send。支持N個請求端一個接收端,也支持N個接收端一個請求端。N個接收端采用rr負載均衡。 哪個是“一”端,哪個就bind端口,“N”端就只能connect,所以,req+rep無論誰bind端口,肯定要有一個是“一”。
router和dealer就是隨時可以發送和接收的req和rep,看起來router+dealer跟 req+rep屬於同類功能。
因為router和dealer可以隨時發送接收,所以它們可以用來做路由。
一個router用來響應N個req,然后它在響應處理的時候,再通過另一個socket把請求扔出去,接收者是另外的M個rep,這就做到N:M。
2、訂閱和推送
pub和sub就是發布者和訂閱者。
3、推和拉
push和pull就是管道,一個只推數據,一個只拉數據。
