文章插圖

文章插圖
常見消息中間件MQ介紹
RocketMQ
阿里系下開源的一款分布式、隊列模型的消息中間件 , 原名Metaq , 3.0版本名稱改為RocketMQ , 是阿里參照kafka設計思想使用java實現的一套mq 。同時將阿里系內部多款mq產品(Notify、metaq)進行整合 , 只維護核心功能 , 去除了所有其他運行時依賴 , 保證核心功能最簡化 , 在此基礎上配合阿里上述其他開源產品實現不同場景下mq的架構 , 目前主要多用于訂單交易系統 。
具有以下特點:
1.能夠保證嚴格的消息順序
2.提供針對消息的過濾功能
3.提供豐富的消息拉取模式
4.高效的訂閱者水平擴展能力
【rabbitmq實時性 rabbitmq頁面顯示數據分析】5.實時的消息訂閱機制
6.億級消息堆積能力
RabbitMQ
使用Erlang編寫的一個開源的消息隊列 , 本身支持很多的協議:AMQP , XMPP, SMTP,STOMP , 也正是如此 , 使的它變的非常重量級 , 更適合于企業級的開發 。同時實現了Broker架構 , 核心思想是生產者不會將消息直接發送給隊列 , 消息在發送給客戶端時先在中心隊列排隊 。對路由(Routing) , 負載均衡(Load balance)、數據持久化都有很好的支持 。多用于進行企業級的ESB整合 。
ActiveMQ
Apache下的一個子項目 。使用Java完全支持JMS1.1和J2EE 1.4規范的 JMS Provider實現 , 少量代碼就可以高效地實現高級應用場景 ??刹灏蔚膫鬏攨f議支持 , 比如:in-VM, TCP, SSL, NIO, UDP, multicast, JGroups and JXTA transports 。RabbitMQ、ZeroMQ、ActiveMQ均支持常用的多種語言客戶端 C++、Java、.Net,、Python、 Php、 Ruby等 。
Redis
使用C語言開發的一個Key-Value的NoSQL數據庫 , 開發維護很活躍 , 雖然它是一個Key-Value數據庫存儲系統 , 但它本身支持MQ功能 , 所以完全可以當做一個輕量級的隊列服務來使用 。對于RabbitMQ和Redis的入隊和出隊操作 , 各執行100萬次 , 每10萬次記錄一次執行時間 。測試數據分為128Bytes、512Bytes、1K和10K四個不同大小的數據 。實驗表明:入隊時 , 當數據比較小時Redis的性能要高于RabbitMQ , 而如果數據大小超過了10K , Redis則慢的無法忍受;出隊時 , 無論數據大小 , Redis都表現出非常好的性能 , 而RabbitMQ的出隊性能則遠低于Redis 。
Kafka
Apache下的一個子項目 , 使用scala實現的一個高性能分布式Publish/Subscribe消息隊列系統 , 具有以下特性:
快速持久化:通過磁盤順序讀寫與零拷貝機制 , 可以在O(1)的系統開銷下進行消息持久化;
高吞吐:在一臺普通的服務器上既可以達到10W/s的吞吐速率;
高堆積:支持topic下消費者較長時間離線 , 消息堆積量大;
完全的分布式系統:Broker、Producer、Consumer都原生自動支持分布式 , 依賴zookeeper自動實現復雜均衡;
支持Hadoop數據并行加載:對于像Hadoop的一樣的日志數據和離線分析系統 , 但又要求實時處理的限制 , 這是一個可行的解決方案 。
ZeroMQ
號稱最快的消息隊列系統 , 專門為高吞吐量/低延遲的場景開發 , 在金融界的應用中經常使用 , 偏重于實時數據通信場景 。ZMQ能夠實現RabbitMQ不擅長的高級/復雜的隊列 , 但是開發人員需要自己組合多種技術框架 , 開發成本高 。因此ZeroMQ具有一個獨特的非中間件的模式 , 更像一個socket library , 你不需要安裝和運行一個消息服務器或中間件 , 因為你的應用程序本身就是使用ZeroMQ API完成邏輯服務的角色 。但是ZeroMQ僅提供非持久性的隊列 , 如果down機 , 數據將會丟失 。如:Twitter的Storm中使用ZeroMQ作為數據流的傳輸 。
ZeroMQ套接字是與傳輸層無關的:ZeroMQ套接字對所有傳輸層協議定義了統一的API接口 。默認支持 進程內(inproc) , 進程間(IPC) , 多播 , TCP協議 , 在不同的協議之間切換只要簡單的改變連接字符串的前綴 。可以在任何時候以最小的代價從進程間的本地通信切換到分布式下的TCP通信 。ZeroMQ在背后處理連接建立 , 斷開和重連邏輯 。
特性:
無鎖的隊列模型:對于跨線程間的交互(用戶端和session)之間的數據交換通道pipe , 采用無鎖的隊列算法CAS;在pipe的兩端注冊有異步事件 , 在讀或者寫消息到pipe的時 , 會自動觸發讀寫事件 。
批量處理的算法:對于批量的消息 , 進行了適應性的優化 , 可以批量的接收和發送消息 。
多核下的線程綁定 , 無須CPU切換:區別于傳統的多線程并發模式 , 信號量或者臨界區 , zeroMQ充分利用多核的優勢 , 每個核綁定運行一個工作者線程 , 避免多線程之間的CPU切換開銷 。
多種比較選擇:
1.TPS比較 一ZeroMq 最好 , RabbitMq 次之 , ActiveMq 最差 。
2.持久化消息比較—zeroMq不支持 , activeMq和rabbitMq都支持 。持久化消息主要是指:MQ down或者MQ所在的服務器down了 , 消息不會丟失的機制 。
3.可靠性、靈活的路由、集群、事務、高可用的隊列、消息排序、問題追蹤、可視化管理工具、插件系統、社區—RabbitMq最好 , ActiveMq次之 , ZeroMq最差 。
4.高并發—從實現語言來看 , RabbitMQ最高 , 原因是它的實現語言是天生具備高并發高可用的erlang語言 。
5.RabbitMQ的性能相對來說更好更全面 , 是消息中間件的首選
- chrome 谷歌瀏覽器,頁面翻譯設置 谷歌瀏覽器翻譯怎么設置
- android如何刷新界面 android 刷新頁面
- 怎么在微信公眾號中添加看運勢 微信公眾號那種輸入名字隨機跳出運勢之類的文字頁面怎么做
- 臺式電腦光大銀行的網銀打不開總是顯示真不巧,網頁走丟了,應該采取什么方法?|為什么打不開光大銀行網銀頁面
- 中興F660光貓設置頁面打不開,為什么打不開光貓的設置頁面
- 或者存在很多矛盾和遺憾
- 手機頁面相冊怎么沒了 手機相冊頁面停不著怎么回事?
- #vivonex怎么可以把鎖屏界面上相機的快捷方式去掉#如何關閉鎖屏頁面相機快捷鍵
- 怎么用dw讓兩個靜態頁面相互連接在一起,用DW寫完靜態頁面,然后說套模板是什么意思?
- “word文檔如何設置目錄格式“文檔如何把目錄和頁面相符
