初探ZeroMQ(一)認識ZeroMQ

學習zeromq已經有段時間了,看了英文原版的zeromq guide,也看了網上對zeromq guide的譯作(說實話吧,翻譯質量真心不怎麼高),還看了很多人寫的博客.確實看了許多,學了許多,也有許多東西想記錄下來.

什麼是zeromq

先貼上一段wiki中對zeromq的說明”ØMQ (also spelled ZeroMQ, 0MQ or ZMQ) is a high-performance asynchronous messaging library aimed at use in scalable distributed or concurrent applications. It provides a message queue, but unlike message-oriented middleware, a ØMQ system can run without a dedicated message broker. The library is designed to have a familiar socket-style API.”.說的明白點,zeromq就是用來替代原有的socket的一個庫.使用原來的socket設計程序的時候,需要關注很多細節(比如同步/異步的問題,多線程的問題,使用不同的通信協議的問題,隊列的設計問題),雖然不是很複雜,但是要設計一個高效的程序還是需要很深厚的功底.使用zeromq就不必關心這些問題了,它已經替你封裝好了,並提供了socket-style風格的API,你需要關心的是怎樣設計一個可靠的,可擴展的通信模型.

zeromq VS rabbitmq

學習zeromq這段時間,看到的最多的一個東西就是rabbitmq.所以非常有必要說明它兩的區別.
如果你需要高效的傳輸數據,對數據不要求非常高的可靠性,也不要求數據能夠持久化(雖然zeromq提供了zmq_swap()函數來持久化,但需要自己去實現持久化過程),那就用zeromq;
如果你對數據需要非常高的可靠性,要求數據能夠持久化,那麼用rabbitmq,當然了,rabbitmq的數據傳輸效率沒有zeromq快,而且還是指數級的差距.

zeromq介紹

  1. ZeroMQ位於(TCP/IP協議層次結構)會話層和應用層之間。ZeroMQ 並不是一個對 socket 的封裝,不能用它去實現已有的網絡協議。

  2. 無消息服務器緩存數據。它不同於傳統消息中間件通過服務器緩存轉發消息的方式,而是優化點對點的消息傳輸。ZeroMQ能緩存消息,但是是在發送端緩存。ZeroMQ裏有水位設置的相關接口來控制緩存量。當然,ZeroMQ也支持傳統的消息隊列(通過zmq_device來實現)。

  3. 強調消息收發模式。在點對點的消息傳輸上ZeroMQ將通信的模式做了歸納,比如常見的訂閱模式(一個消息發多個客戶),分發模式(N個消息平均分給X個客戶)等等。

  4. 透明地支持多種通信方式。這主要包括:線程間通信,進程間通信,跨主機通信。只需修改連接的url即可,例如,進程間通信使用ipc:///11111, 跨主機通信使用tcp://10.5.0.170:26666, 不需要修改代碼。

  5. 異步傳輸數據。通過新增一個IO線程發送數據,該IO線程在一次鏈接之後,不會馬上釋放,複用點與點之間數據鏈接,可以很好地提高性能。

發佈了30 篇原創文章 · 獲贊 58 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章