1. 程式人生 > >MQ訊息佇列系列(1)為什麼使用MQ

MQ訊息佇列系列(1)為什麼使用MQ

1.高併發
在高併發分散式環境下,由於來不及同步處理,請求往往發生堵塞,比如說,大量的insert、update之類的請求同時到達mysql,直接導致無所的行鎖和表鎖,甚至最後請求會堆積過多,從而觸發too many connections錯誤。

通過使用訊息佇列,我們可以非同步處理請求,從而緩解系統的壓力。

2.鬆耦合

MQ提供鬆耦合的應用架構。鬆耦合一般是為了減輕經典RPC(Remote Procedure Calls)呼叫的緊耦合架構而被引入的。該鬆耦合以非同步形式存在,任何一個應用對MQ的呼叫不依賴於任何其它應用,沒有任何依賴或者時序要求。應用依賴於MQ的能力保證訊息傳遞。因此,我們把應用傳送訊息的形式稱之為觸發和忘記(fire-and-forget)--應用傳送訊息到MQ之後並不關心訊息如何或者什麼時候被傳遞。同樣的訊息的接收者也不關心訊息從哪裡或者如何到來。在不同的環境中這樣做的好處是允許客戶端使用不同的語言編寫甚至使用不同的線路協議。MQ作為中間人存在,允許不同環境的整合和非同步互動。

    當我們考慮分散式應用設計時,耦合是很重要的。耦合是指兩個或多個應用間的相互依賴。考慮耦合的一個簡單辦法是思考其中某個應用改變所產生的影響,即其它應用所需要作出的改變。是否一個應用的變化會強制其它應用跟著改變?如果答案是肯定的,則這些應用是緊耦合的。如果一個應用的變化無需強制其它應用跟著改變,則這些應用是鬆耦合的。這說明了緊耦合系統比鬆耦合系統更難維護。也就是說,鬆耦合系統更能適應未知的變化。

    COM,CORBA,DCE和EJB等使用RPC的技術,它們是緊耦合的。使用RPC,當一個應用呼叫另一個應用,呼叫者將被阻塞知道被呼叫者返回結果。圖1.1描述了這個過程。

    呼叫方(Application one)將被阻塞直到被呼叫方(Application two)返回控制權。很多系統使用RPC並且成功了。但是對於這樣一個緊耦合系統確實有很多缺點:最顯著的缺點是,即使很小的一個改變都要較高的維護代價;正確的時機也很重要,當請求從應用1發到應用2時,兩個系統都必須正常工作,同樣的,響應從應用2傳送到應用1時,兩個系統也必須正常工作。這樣的時序要求有點麻煩,使得系統穩定性降低。現在我們把這個緊耦合系統和圖1.2的系統進行比較。

   

    在圖1.2中,應用1傳送訊息到MOM只是一個單方行為。可能一段時間後,應用2從MOM接收訊息,這也是一個單方行為。任何一方都不需要知道另一方的存在,它們之間也沒有任何時序要求。所以在分散式系統設計時,鬆耦合系統比緊耦合系統有巨大的優勢。如圖所示,這就是MQ存在的地方。

    考慮現在其中的一個應用必須搬到一個新的地方。這可能在新硬體引入或應用需要移動時發生。如果是一個緊耦合系統,這樣的遷移會很困難,因為系統的其它部分都必須停止工作等待遷移完成。如果是鬆耦合系統,系統的各個部分能夠自由遷移而不影響其它部分。考慮這樣一個場景,應用A和B各有很多個例項,其中各個例項分佈在不同的機器上。MQ安裝在另外的機器上。在這種情況下,任何一個應用例項都可以自由移動而不影響其它應用。事實上,多個MQ例項也可以通過network of brokers配置聯合使用。這就允許MQ例項自由遷移而不影響應用A或應用B。採用這種價構,系統的任何一部分在任何時間都可以停機進行維護而不影響整個系統。

   總之,MQ提供一個令人難以置信的靈活性允許鬆耦合思想變成現實。對於某些情況不能使用非同步方式實現,MQ也提供訊息的請求/回覆模式支援。


相關推薦

MQ訊息佇列系列1為什麼使用MQ

1.高併發 在高併發分散式環境下,由於來不及同步處理,請求往往發生堵塞,比如說,大量的insert、update之類的請求同時到達mysql,直接導致無所的行鎖和表鎖,甚至最後請求會堆積過多,從而觸發

MQ訊息佇列系列2什麼時候使用MQ

非同步架構的系統允許通過代理器自己配置更多的客戶端,記憶體等(即vertical scalability)來擴大系統,而不是增加更多的代理器(即horizontal scalability)。考慮如亞馬遜這樣繁忙的電子商務系統。當用戶購買物品,事實上系統需要很多步驟去處理,包括下單,建立發票,付款,執行訂單

springMVC+MQ 訊息佇列整合

1、pom.xml依賴的jar <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq

springMVC+MQ 訊息佇列整合

一、搭建MQ伺服器         1、官網下載apache-activemq-5.14.5-bin.tar.gz。         2、在linux 伺服器上執行命令解壓: tar -xf apac

訊息佇列系列:.Net平臺下的訊息佇列介紹

文章來源:http://www.cnblogs.com/gossip/p/4373547.html          特點:     一、跨平臺:包括Mac、Windows、Linux等作業系統             二、支援主流語言呼叫:包括Java、.N

訊息佇列系列:Rabbitmq常用命令列

來源:http://www.cnblogs.com/gossip/p/4700147.html 列印了一些rabbitmq服務狀態資訊,包括記憶體,硬碟,和使用erlong的版本資訊 rabbitmqctl -q status 各個引數說明:http://www.r

MQ訊息佇列SpringBoot 整合rocketMq

一. JMS規範 在瞭解rocketMq之前先了解一下jms規範,rocketmq雖然不完全基於jms規範,但是他參考了jms規範和 CORBA Notification 規範等,可以說是青出於藍而勝於藍。 JMS即Java訊息服務(Java Message Servic

backbone入門系列1基本組成部分

tle doctype syn 方法 1.3 服務器 行為 java code 一,首先backbone有以下組成部分:Events:事件驅動模塊 Model:數據模型 Collection:模型集合器 Router:路由器(對應hash值) History:開啟歷史管理

JAVA POI 應用系列1--生成Excel

需要 void system 版本 stream 邊框 模式 格式 字體 POI簡介(官網:http://poi.apache.org/) Apache POI是Apache軟件基金會的開放源碼函式庫,POI提供API給Java程序對Microsoft Office

R語言數據挖掘實戰系列1

數據挖掘 建模 分析 R語言數據挖掘實戰(1)一、數據挖掘基礎數據挖掘:從數據中“淘金”,從大量數據(包括文本)中挖掘出隱含的、未知的、對決策有潛在價值的關系、模式和趨勢,並用這些知識和規則建立用於決策支持的模型,提供預測性決策支持的方法、工具和過程。數據挖掘的任務利用分類與預測、聚類分析、關聯規

【開源】OSharp框架學習系列1:總體設計及系列導航

正是 html 組織 內聚性 權限 是什麽 enc 3-0 分發 OSharp是什麽?   OSharp是個快速開發框架,但不是一個大而全的包羅萬象的框架,嚴格的說,OSharp中什麽都沒有實現。與其他大而全的框架最大的不同點,就是OSharp只做抽象封裝,不做實現。依賴註

Java系列1 JavaEE架構

javaeeJavaEE是開發分布式應用的工業標準,Weblogic,BES,Tomcat等是比較常見的JavaEE服務器,嚴格來說Tomcat沒有實現全部的JavaEE規範,只能算是Servlet容器。我們從一幅Spec文檔上的架構圖,粗略了解JavaEE的基本結構。該結構圖表達了JavaEE各元素的邏輯關

自己定義View之Chart圖標系列1——點陣圖

tint 發現 坐標軸 畫的 tracking androi mit def dot 近期要做一些圖表類的需求,一開始就去github上看了看,發現開源的圖表框架還是蠻多的。可是非常少有全然符合我的需求的。另外就是使用起來比較麻煩。所以就決定自己來造輪子

SWTBOK測試實踐系列1 -- 測試在項眼下期的評審投入劃算嗎?

它的 開發 解釋 一個 tracking log csdn 現場 技術 測試策略:靜態測試還是動態測試? [對話場景] 成功公布某個軟件版本號之後,項目團隊召開了項目的經驗教訓總結大會。在會議期間,項目經理小項和測試經理小測進行了例如以下的對話: 小項:“小測

zabbix 系列 1安裝

系列 tail log blog pos 安裝 agent sdn zabbix 安裝server http://blog.csdn.net/xiegh2014/article/details/54988548 安裝 agent http://m.blog.csdn

編程思考系列1使用條件運算符而不使用 if 語句的理由

定義 href class 運算 pos htm .html body gpo 使用條件運算符而不使用 if 語句的理由 變量的聲明和定義可以同時進行 減少臨時變量的使用 消除重復代碼 減少不必要的代碼塊 三項演算子を使うべき理由 編程思考系列(1)使用條件運算符而不使用

信息安全系列1-- 信息安全入門

經濟 tex 作用 安全 重要 href 技術分享 尊敬 互動 緣起 安全是發展的前提,發展是安全的保障,安全和發展要同步推進。”尊敬的習總書記針對信息完全做過精辟的論述。的確如此,隨著互聯網+戰略的全面推進,信息技術在國民經濟、國防建設當中扮演基礎性、支撐性的作用。伴隨

NoSQL系列1——memcached源碼安裝使用

NoSQL memcached 數據庫 0. 引言 NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,泛指非關系型數據庫,因為NoSQL不僅僅是指一種數據庫。就像關系型數據庫中有MySQL和Oracle等類型,NoSQL也有memcached、MongoDB和red

Vue系列1:單頁面應用程序

str from logs 引擎 每次 應用 跳轉方式 新手上路 為什麽 前言:關於頁面上的知識點,如有侵權,請看 這裏 。 關鍵詞:SPA、單個 HTML 文件、全靠 JS 操作、Virtual DOM、hash/history api 路由跳轉、ajax 響應、按需

SpringMVC學習系列1 之 初識SpringMVC

映射 lin logs intern fault lan 前端 png let /*springMvc的總結:(推薦,總共有十五章) *http://www.cnblogs.com/liukemng/p/3751338.html */ 1.什麽是Spring MVC: