2020久久超碰欧美精品最新亚洲欧美日韩久久精品,国产福利电影一区二区三区,亚洲欧美日韩一区在线观看,亚洲国产欧美日韩欧美特级,亚洲欧美日韩成人一区久久,欧美日韩精品一区二区三区不卡,国产欧美日韩va另类影音先锋,亚洲欧美日韩久久精品,亚洲欧美日韩国产成人精品影院,亚洲国产欧美日韩精品一区二区三区,欧美日韩国产成人高清视频,日韩久久精品国产免费观看频道,久久人人爽人人爽从片av高清,国产精品综合一区二区

首頁技術(shù)文章正文

分布式消息隊列

更新時間:2018-11-26 來源:黑馬程序員 瀏覽量:

  1. 常用消息隊列介紹

  本部分主要介紹四種常用的消息隊列(RabbitMQ/ActiveMQ/RocketMQ/Kafka)的主要特性、優(yōu)點、缺點。

  1.1 RabbitMQ

  RabbitMQ 2007年發(fā)布,是一個在AMQP(高級消息隊列協(xié)議)基礎上完成的,可復用的企業(yè)消息系統(tǒng),是當前最主流的消息中間件之一。

  主要特性:

  1. 可靠性: 提供了多種技術(shù)可以讓你在性能和可靠性之間進行權(quán)衡。這些技術(shù)包括持久性機制、投遞確認、發(fā)布者證實和高可用性機制;

  2. 靈活的路由:消息在到達隊列前是通過交換機進行路由的。RabbitMQ為典型的路由邏輯提供了多種內(nèi)置交換機類型。如果你有更復雜的路由需求,可以將這些交換機組合起來使用,你甚至可以實現(xiàn)自己的交換機類型,并且當做RabbitMQ的插件來使用;

  3. 消息集群:在相同局域網(wǎng)中的多個RabbitMQ服務器可以聚合在一起,作為一個獨立的邏輯代理來使用;

  4. 隊列高可用:隊列可以在集群中的機器上進行鏡像,以確保在硬件問題下還保證消息安全;

  5. 多種協(xié)議的支持:支持多種消息隊列協(xié)議;

  6. 服務器端用Erlang語言編寫,支持只要是你能想到的所有編程語言;

  7. 管理界面: RabbitMQ有一個易用的用戶界面,使得用戶可以監(jiān)控和管理消息Broker的許多方面;

  8. 跟蹤機制:如果消息異常,RabbitMQ提供消息跟蹤機制,使用者可以找出發(fā)生了什么;

  9. 插件機制:提供了許多插件,來從多方面進行擴展,也可以編寫自己的插件;

  使用RabbitMQ需要:

  l ErLang語言包

  l RabbitMQ安裝包

  RabbitMQ可以運行在Erlang語言所支持的平臺之上:

  l Solaris

  l BSD

  l Linux

  l MacOSX

  l TRU64

  l Windows NT/2000/XP/Vista/Windows7/Windows 8

  l Windows Server 2003/2008/2012

  l Windows 95, 98

  l VxWorks

  優(yōu)點:

  1. 由于erlang語言的特性,mq 性能較好,高并發(fā);

  2. 健壯、穩(wěn)定、易用、跨平臺、支持多種語言、文檔齊全;

  3. 有消息確認機制和持久化機制,可靠性高;

  4. 高度可定制的路由;

  5. 管理界面較豐富,在互聯(lián)網(wǎng)公司也有較大規(guī)模的應用;

  6. 社區(qū)活躍度高;

  缺點:

  1. 盡管結(jié)合erlang語言本身的并發(fā)優(yōu)勢,性能較好,但是不利于做二次開發(fā)和維護;

  2. 實現(xiàn)了代理架構(gòu),意味著消息在發(fā)送到客戶端之前可以在中央節(jié)點上排隊。此特性使得RabbitMQ易于使用和部署,但是使得其運行速度較慢,因為中央節(jié)點增加了延遲,消息封裝后也比較大;

  3. 需要學習比較復雜的接口和協(xié)議,學習和維護成本較高;

  1.2 ActiveMQ

  ActiveMQ是由Apache出品,ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規(guī)范的 JMS Provider實現(xiàn)。它非??焖?,支持多種語言的客戶端和協(xié)議,而且可以非常容易的嵌入到企業(yè)的應用環(huán)境中,并有許多高級功能。

  主要特性:

  1. 服從 JMS 規(guī)范:JMS 規(guī)范提供了良好的標準和保證,包括:同步或異步的消息分發(fā),一次和僅一次的消息分發(fā),消息接收和訂閱等等。遵從 JMS 規(guī)范的好處在于,不論使用什么 JMS 實現(xiàn)提供者,這些基礎特性都是可用的;

  2. 連接性:ActiveMQ 提供了廣泛的連接選項,支持的協(xié)議有:HTTP/S,IP 多播,SSL,STOMP,TCP,UDP,XMPP等等。對眾多協(xié)議的支持讓 ActiveMQ 擁有了很好的靈活性。

  3. 支持的協(xié)議種類多:OpenWire、STOMP、REST、XMPP、AMQP ;

  4. 持久化插件和安全插件:ActiveMQ 提供了多種持久化選擇。而且,ActiveMQ 的安全性也可以完全依據(jù)用戶需求進行自定義鑒權(quán)和授權(quán);

  5. 支持的客戶端語言種類多:除了 Java 之外,還有:C/C++,.NET,Perl,PHP,Python,Ruby;

  6. 代理集群:多個 ActiveMQ 代理可以組成一個集群來提供服務;

  7. 異常簡單的管理:ActiveMQ 是以開發(fā)者思維被設計的。所以,它并不需要專門的管理員,因為它提供了簡單又使用的管理特性。有很多中方法可以監(jiān)控 ActiveMQ 不同層面的數(shù)據(jù),包括使用在 JConsole 或者 ActiveMQ 的Web Console 中使用 JMX,通過處理 JMX 的告警消息,通過使用命令行腳本,甚至可以通過監(jiān)控各種類型的日志。

  使用ActiveMQ需要:

  l Java JDK

  l ActiveMQ安裝包

  ActiveMQ可以運行在Java語言所支持的平臺之上。

  優(yōu)點:

  1. 跨平臺(JAVA編寫與平臺無關(guān)有,ActiveMQ幾乎可以運行在任何的JVM上)

  2. 可以用JDBC:可以將數(shù)據(jù)持久化到數(shù)據(jù)庫。雖然使用JDBC會降低ActiveMQ的性能,但是數(shù)據(jù)庫一直都是開發(fā)人員最熟悉的存儲介質(zhì)。將消息存到數(shù)據(jù)庫,看得見摸得著。而且公司有專門的DBA去對數(shù)據(jù)庫進行調(diào)優(yōu),主從分離;

  3. 支持JMS :支持JMS的統(tǒng)一接口;

  4. 支持自動重連;

  5. 有安全機制:支持基于shiro,jaas等多種安全配置機制,可以對Queue/Topic進行認證和授權(quán)。

  6. 監(jiān)控完善:擁有完善的監(jiān)控,包括Web Console,JMX,Shell命令行,Jolokia的REST API;

  7. 界面友善:提供的Web Console可以滿足大部分情況,還有很多第三方的組件可以使用,如hawtio;

  缺點:

  1. 社區(qū)活躍度不及RabbitMQ高;

  2. 根據(jù)其他用戶反饋,會出莫名其妙的問題,會丟失消息;

  3. 目前重心放到activemq6.0產(chǎn)品-apollo,對5.x的維護較少;

  4. 不適合用于上千個隊列的應用場景;

  1.3 RocketMQ

  RocketMQ出自 阿里公司的開源產(chǎn)品,用 Java 語言實現(xiàn),在設計時參考了 Kafka,并做出了自己的一些改進,消息可靠性上比 Kafka 更好。RocketMQ在阿里集團被廣泛應用在訂單,交易,充值,流計算,消息推送,日志流式處理,binglog分發(fā)等場景。

  主要特性:

  1. 是一個隊列模型的消息中間件,具有高性能、高可靠、高實時、分布式特點;

  2. Producer、Consumer、隊列都可以分布式;

  3. Producer向一些隊列輪流發(fā)送消息,隊列集合稱為Topic,Consumer如果做廣播消費,則一個consumer實例消費這個Topic對應的所有隊列,如果做集群消費,則多個Consumer實例平均消費這個topic對應的隊列集合;

  4. 能夠保證嚴格的消息順序;

  5. 提供豐富的消息拉取模式;

  6. 高效的訂閱者水平擴展能力;

  7. 實時的消息訂閱機制;

  8. 億級消息堆積能力;

  9. 較少的依賴;

  使用RocketMQ需要:

  l Java JDK

  l 安裝git、Maven

  l RocketMQ安裝包

  RocketMQ可以運行在Java語言所支持的平臺之上。

  優(yōu)點:

  1. 單機支持 1 萬以上持久化隊列

  2. RocketMQ 的所有消息都是持久化的,先寫入系統(tǒng) PAGECACHE,然后刷盤,可以保證內(nèi)存與磁盤都有一份數(shù)據(jù),訪問時,直接從內(nèi)存讀取。

  3. 模型簡單,接口易用(JMS 的接口很多場合并不太實用);

  4. 性能非常好,可以大量堆積消息在broker中;

  5. 支持多種消費,包括集群消費、廣播消費等。

  6. 各個環(huán)節(jié)分布式擴展設計,主從HA;

  7. 開發(fā)度較活躍,版本更新很快。

  缺點:

  1. 支持的客戶端語言不多,目前是java及c++,其中c++不成熟;

  2. RocketMQ社區(qū)關(guān)注度及成熟度也不及前兩者;

  3. 沒有web管理界面,提供了一個CLI(命令行界面)管理工具帶來查詢、管理和診斷各種問題;

  4. 沒有在 mq 核心中去實現(xiàn)JMS等接口;

  1.4 Kafka

  Apache Kafka是一個分布式消息發(fā)布訂閱系統(tǒng)。它最初由LinkedIn公司基于獨特的設計實現(xiàn)為一個分布式的提交日志系統(tǒng)( adistributed commit log),,之后成為Apache項目的一部分。Kafka系統(tǒng)快速、可擴展并且可持久化。它的分區(qū)特性,可復制和可容錯都是其不錯的特性。

  主要特性:

  1. 快速持久化,可以在O(1)的系統(tǒng)開銷下進行消息持久化;

  2. 高吞吐,在一臺普通的服務器上既可以達到10W/s的吞吐速率;

  3. 完全的分布式系統(tǒng),Broker、Producer、Consumer都原生自動支持分布式,自動實現(xiàn)負載均衡;

  4. 支持同步和異步復制兩種HA;

  5. 支持數(shù)據(jù)批量發(fā)送和拉取;

  6. zero-copy:減少IO操作步驟;

  7. 數(shù)據(jù)遷移、擴容對用戶透明;

  8. 無需停機即可擴展機器;

  9. 其他特性:嚴格的消息順序、豐富的消息拉取模型、高效訂閱者水平擴展、實時的消息訂閱、億級的消息堆積能力、定期刪除機制;

  使用Kafka需要:

  l Java JDK

  l Kafka安裝包

  優(yōu)點:

  1. 客戶端語言豐富,支持java、.net、php、ruby、python、go等多種語言;

  2. 性能卓越,單機寫入TPS約在百萬條/秒,消息大小10個字節(jié);

  3. 提供完全分布式架構(gòu), 并有replica機制, 擁有較高的可用性和可靠性, 理論上支持消息無限堆積;

  4. 支持批量操作;

  5. 消費者采用Pull方式獲取消息, 消息有序, 通過控制能夠保證所有消息被消費且僅被消費一次;

  6. 有優(yōu)秀的第三方Kafka Web管理界面Kafka-Manager;

  7. 在日志領(lǐng)域比較成熟,被多家公司和多個開源項目使用;

  缺點:

  1. Kafka單機超過64個隊列/分區(qū),Load會發(fā)生明顯的飆高現(xiàn)象,隊列越多,load越高,發(fā)送消息響應時間變長

  2. 使用短輪詢方式,實時性取決于輪詢間隔時間;

  3. 消費失敗不支持重試;

  4. 支持消息順序,但是一臺代理宕機后,就會產(chǎn)生消息亂序;

  5. 社區(qū)更新較慢;

  2. RabbitMQ/ActiveMQ/RocketMQ/Kafka對比

  這里列舉了上述四種消息隊列的差異對比:

  1543224375658_11.jpg

  結(jié)論:

  Kafka在于分布式架構(gòu),RabbitMQ基于AMQP協(xié)議來實現(xiàn),RocketMQ/思路來源于kafka,改成了主從結(jié)構(gòu),在事務性可靠性方面做了優(yōu)化。廣泛來說,電商、金融等對事務性要求很高的,可以考慮RabbitMQ和RocketMQ,對性能要求高的可考慮Kafka。

  3. 總結(jié)

  消息隊列利用高效可靠的消息傳遞機制進行平臺無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進行分布式系統(tǒng)的集成。目前業(yè)界有很多的MQ產(chǎn)品,例如RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,也有直接使用數(shù)據(jù)庫redis充當消息隊列的案例。而這些消息隊列產(chǎn)品,各有側(cè)重,在實際選型時,需要結(jié)合自身需求及MQ產(chǎn)品特征,綜合考慮。



作者:黑馬程序員JavaEE培訓學院

首發(fā): http://java.itheima.com

分享到:
在線咨詢 我要報名
和我們在線交談!