在分佈式的環境下,咱們除了使用httprest、rpc、消息中間件也是一個去使兩個系統之間進行通訊的方式,當咱們想提升程序響應速度的時候,一個就是 【使用多線程進行並行處理】,另外就是使用【異步的方法】,那就可使用(消息中間件)MQsql
【消息中間件】: 利用高效可靠的消息傳遞機制,進行多平臺之間直接的交流的一種媒介(就是一個第三方的工具,可讓一個或者多個系統收到某個系統發出的消息。)主要作【數據的接受和傳遞】數據庫
【應用場景】:跨系統之間的信息傳遞、高併發的流量削峯(當請求峯值來臨,把數據放在中間件去慢慢處理)、以及數據的異步處理(相似註冊,發短信這些東西就能夠異步進行)tomcat
【經常使用的消息中間件】:服務器
Active(太老了,支持不少功能,因此性能不怎麼樣,一些老一點的項目會使用)、Rabbit、kafka、rokcet多線程
【核心組成】:併發
- 【協議】:設置一種系統直接的語言規則,簡而言之就是你們都要遵照相同的規則,不然彼此不知道對方發過來的是什麼意思。
- 【持久化機制】:在中間件內部保留數據的手段
- 【消息分發機制】:一種消費消費模式,好比主動推送數據、或者別人來拉取數據。
- 【高可用】:中間件本身不能宕機(有不少方式:分片複製,鏡像、主從 so on)
- 【高可靠】:保障消息被消費。
協議是計算機之間通信時共同遵照的一組約定,對數據格式和計算機交換數據的一種規範。http、tcp/ip、 upd這些都是數據一種通信協議異步
這裏用【http協議】舉個例子說明協議的三個要素:tcp
- 【語法】:傳輸信息的格式或者結構(請求報文和響應報文)
- 【語義】 :他則定義了數據格式,編碼、信號、數據出現的順序等(客戶端主動發起的操做成爲請求)
- 【時序】::通訊雙方通訊的次序,他裏面定義了速度匹配和排序等(一個請求,對應一個響應)
經常使用的消息中間件協議:OpenWire、AMQP、MQTT(物聯網)、Kafka、OpenMessage。他們等因而一系列規範,而後各類中間件對他們進行實現,就想servelet的實現有tomcat、jetty等分佈式
【HTTP】不適合做爲中間件的協議緣由是:是由於http過重了,並且不高效(須要一次請求、一次響應)。高併發
【AMQP】:【rabbit】和【active】使用他,他的出現最先是解決金融行業的可靠性的,因此【可靠性】是它的最大優點。
【MQTT】:主要用在物聯網上,【速度很是快】(用c編寫的)【計算能力有限】
【OpenMessage】:近兩年由阿里、滴滴等共同發起的標準,【rocket】使用他,【結果簡單、解析快、事務性】
【Kafka】:是一個基於TCP的二進制協議,因此他的能傳輸大數量,【簡單、解析快、傳輸數據量大】【沒有事務】
簡而言之,就是把消息數據存儲起來,不能讓數據存儲在內存中,隨着服務器重啓而沒有數據了。持久化的媒介: 磁盤上、數據庫。除了active其餘的mq都不支持數據庫持久化
當消息中間件獲取到數據後,是它主動發給其餘系統,仍是其餘系統從它這裏獲取。還有是否須要消息從新發送(好比支付場景)。等等一系列消息分發機制。
指的是當前的中間件自己,必須在使用的時間中,處於可使用的狀態,這個通常使用服務器集羣進行解決
【master-slave->主從共享數據的部署方式】:相似於Mysql、Redis、Monogdb,每一個從屬中都有數據,可是隻能經過master節點獲取。他的高可用體現到各個節點存儲的數據是同樣的,宕機後能夠從別的地方獲取相同的數據
【Bloker-cluster->主從同步部署的方法】:分爲多個副本,好比一個數據把他分開存儲
【master-slave& Bloker-cluster】:前面兩種方式的結合體,分爲多個主節點,每一個節點都有副本節點。【使用最多】
指的是系統能夠無障礙的持續運行,而且報錯的概率比較低,以及保障消息被消費。
【消息傳輸可靠】:經過協議保證系統直接的數據解析的正確性
【消息存儲可靠】:經過持久化保障消息存儲的可靠性。