中間件

1.概述
應用場景
單體架構

如果一個模塊升級,比如訂單系統,整個系統都要升級
耦合度高,開發困難
分布式架構

后台由多個系統組成
多系統協同處理一個請求可以看成分布式系統
系統之間相互調用,用RPC遠程調用的方式實現
但這樣系統之間耦合度相對較高
為了解決耦合,實現更強的擴展性架構,分布式系統中引入了消息中間件
基於消息中間件的分布式系統架構

消息中間件
- 利用高效可靠的消息傳遞機制進行平台無關的數據交流
- 並基於數據通信來進行分布式系統的集成
- 通過提供消息傳遞和消息排隊模型,可以在分布式環境下擴展進程間的通信
消息中間件的應用場景
跨系統數據傳遞、高並發流量削峰、數據異步處理...等等
常用的消息中間件
ActiveMQ、RabbitMQ、Kafka、RocketMQ
核心設計
本質:
一種具備接收請求、保存數據、發送數據等功能的網絡應用。
和一般網絡應用程序的區別是它主要負責數據的接收和傳遞,所以性能一般都高於普通程序。
5大核心組成:
- 協議
- 持久化機制
- 消息分發機制
- 高可用設計
- 高可靠設計
2.協議
協議是計算機之間通信時共同遵從的一組約定,都遵守相同的約定,計算機之間才能相互交流。
是對數據格式和計算機之間交換數據時必須遵守的規則的正式描述。
協議三要素:
- 語法:即數據與控制信息的結構或格式。
- 語義:即需要發出何種控制信息,完成何種動作以及做出何種響應。
- 時序(同步):即事件實現順序的詳細說明。
常見協議

Http用於消息中間件太重了;Http大部分是軟連接,每次交互,響應之后中斷,不適合消息中間件的場景
消息中間件常用的協議:OpenWire、AMQP、MQTT、Kafka、OpenMessage
AMQP協議
AMQP(Advanced Message Queuing Protocol)是高級消息隊列協議
04年JPMorgan Chase聯合其他公司共同設計
特性
事務支持、持久化支持,出生金融行業,在可靠性消息處理上具備天然的優勢。

MQTT協議
MQTT(Message Queuing Telemetry Transport)消息隊列遙測傳輸是IBM開發的一個即時通訊協議,物聯網系統架構中的重要組成部分。
特性
輕量、結構簡單、傳輸快、沒有事務支持、沒有持久化相關設計。
應用場景
適用於計算能力有限、低寬帶、網絡不穩定的場景。

Open Message協議
Open Message協議是近年來,由阿里發起,與雅虎、滴滴出行、Streamlio等公司共同參與創立的分布式消息中間件、流處理領域的應用開發標准。
是國內首個在全球范圍內發起的分布式消息領域國際標准
特性
結構簡單、解析快、有事務設計、有持久化設計

Kafka協議
Kafka協議是基於TCP的二進制協議。消息內部是通過長度來分隔,由一些基本數據類型組成。
特性
結構簡單、解析快、無事務設計、有持久化設計

3.持久化
簡單而言,持久化就是將數據存入磁盤,而不是存在內存中隨服務重啟而消失,使數據能夠永久保存叫做持久化。

常用持久化方式

4.消息分發

系統錯誤后的重發
常用消息中間件分發策略

5.高可用
高可用是指產品在規定的條件和規定的時刻或時間區間內處於可執行規定功能狀態的能力。
當業務量大時,一台消息中間件服務器可能無法滿足需求,所以需要消息中間件能夠集群部屬,來達到高可用的目的。
Master-Slave主從共享數據的部屬方式

Master-Slave主從同步部屬方式

Broker-Cluster多主集群同步部屬方式

Broker-Cluster多主集群轉發部屬方式

Master-Slave與Broker-Cluster結合

6.高可靠
高可靠是指系統可用無故障持續運行。比如一個系統從不崩潰、報錯,或崩潰、報錯的幾率比較低,那就是高可靠。
在高並發業務場景下,如果不能保證系統的高可靠,那造成的損失將會非常嚴重。
