1. 程式人生 > >我們為什麼要使用MQ

我們為什麼要使用MQ

MQ提供了用於應用整合的鬆耦合的連線方法,

因為共享資訊的應用不需要知道彼此物理位置(網路地址);

不需要知道彼此間怎樣建立通訊;不需要同時處於執行狀態;

不需要在同樣的作業系統或網路環境下執行。

ActiveMQ和JBossMQ有一些相似之處,比如兩個都支援JMS的1.1規範並且二者都能執行在JBoss4.x應用伺服器之上。

不過activemq有自己的特點和優勢:

(1)activemq可以很好的執行在任何JVM上,而不只是整合到JBoss的應用伺服器中;

(2)activemq支援大量的跨語言客戶端;

(3)activemq支援許多不同的協議,如Ajax,REST,Stomp,OpenWire,XMPP

(4)activemq支援許多高階功能,例如MessageGroups,ExclusiveConsumer,CompositeDestinations

(5)AdvisoryMessage

(6)activemq支援可靠連線並且具有可配置的自動重連線

(7)activemq對Spring有很好的支援

(8)activemq支援跨網路的分散式目的地

(9)activemq是速度非常快;一般要比jbossmq快10倍

MQ在分散式系統中扮演著重要角色,非同步的訊息通訊全要靠它,而非同步通訊正是提高系統伸縮性的不二良方。說說我認為的一個優秀的MQ產品需要具備的特徵。

    首先顯然是高可用性,我們當然希望MQ能支撐7x24小時應用,而不是三天兩頭當機,我們要追求的是99.9%的可靠服務時間。要做到高可用性,顯然我們需要做MQ的叢集,一臺當了,不影響整個叢集的服務能力,這裡涉及到告警、流控、訊息的負載均衡、資料庫的使用、測試的完備程度等等。

    其次是訊息儲存的高可靠性。我們要保證100%不丟訊息。要做到訊息儲存的高可靠性,不僅僅是MQ的責任,更涉及到硬體、作業系統、語言平臺和資料庫的一整套方案。許多號稱可靠儲存的MQ產品其實都不可靠,要知道,硬體錯誤是常態,如果在硬體錯誤的情況下還能保證訊息的可靠儲存這才是難題。這裡可能需要用到特殊的儲存硬體,特殊的資料庫,分散式的資料儲存,資料庫的分庫分表和同步等等。你要考慮訊息儲存在哪裡,是檔案系統,還是資料庫,是本地檔案,還是分散式檔案,是搞主輔備份呢還是多主機寫入等等。
   
    第三是高可擴充套件性,MQ叢集能很好地支援水平擴充套件,這就要求我們的節點之間最好不要有通訊和資料同步。

    第四是效能,效能是實現高可用性的前提,很難想象單機效能極差的MQ組成的叢集能在高負載下倖免於難。效能因素跟採用的平臺、語言、作業系統、程式碼質量、資料庫、網路息息相關。MQ產品的核心其實是訊息的儲存,在保證儲存安全的前提下如何保證和提高訊息入隊的效率是效能的關鍵因素。這裡需要開發人員建立起效能觀念,不需要你對一行行程式碼斤斤計較,但是你需要知道這樣做會造成什麼後果,有沒有更好更快的方式,你怎麼證明它更好更快。軟體實現的效能是一方面,另一方面就是平臺相關了,因為MQ本質上是IO密集型的系統,瓶頸在IO,如何優化網路IO、檔案IO這需要專門的知識。效能另一個相關因素是訊息的排程上,引入訊息順序和訊息優先順序,允許訊息的延遲傳送,都將增大訊息傳送排程的複雜性,如何保證高負載下的排程也是要特別注意的地方。

  
   第五,高可配置性和監控工具的完整,這是一個MQ產品容易忽略的地方。非同步通訊造成了查詢問題的難度,不像同步呼叫那樣有相對明確的時序關係。因此查詢非同步通訊的異常是很困難的,這就需要MQ提供方便的DEBUG工具,查詢分析日誌的工具,檢視訊息生命週期的工具,檢視系統間依賴關係的工具等等。可定製也是MQ產品非常重要的一方面,可方便地配置各類引數並在叢集中同步,並且可動態調整各類引數,這將大大降低維護難度。

未完待續.........................