-----消息中間件------

  1. 消息隊列—典型場景(異步處理
    1.1 重要作用
    • 解耦 ) 模塊只關心自己的核心流程,而依賴該模塊執行結果的其他模塊如果做的不是很重要的事,有通知即可,無須等待結果, 關心的是通知, 而非結果。
    • 流量削峯 ) 在分佈式系統中, 經常出現摸個基礎服務不可用造成整個系統不可用的情況, 這種現象稱爲(“服務雪崩效應” ),從而導致整個系統不可用。當訪問量劇增時,爲了保證服務的正常使用,有的會考慮擴展更多的服務器,增加系統處理併發請求的能力。 但是,突發流量並不常見,爲峯值流量投入大量的資源,無疑是巨大的浪費。 使用 消息對列 先將短時間的高併發請求持久化,然後逐步處理,從而削平高峯器的併發流量,改善系統的性能。
    • (日誌收集),日誌是開發和運維中非常重要的一部分,可以用來跟蹤,定位問題.隨着業務的發展,功能越來越多,產生的日誌也越來越多,對大量日誌的實時獲取每個系統當前的狀態,變得越來越迫切。 此時,利用消息隊列產品在接收和持久化消息方面的高性能,引入消息對列快速接收日誌消息,避免因寫入日誌某些故障導致哦系統阻塞,請求延時等。一般會搭建一個日誌收集系統,統一收集業務日誌數據。
    • 事務最終一致性) 分佈式事務,業界曾經有個處理分佈式事務的規範--------XA, XA —主要定義 (全局事務管理器(Transaction Manager) 和 局部資源管理器(Resource Manager)之間的接口, XA 接口是雙向的系統接口,在事務管理器及一個或多個資源管理器之間形成通信橋樑, XA 引入事務管理器充當全局事務的協調者的角色,事務管理控制着全局事務,管理事務生命週期,並協調資源。適合傳統項目偶爾跨庫操作的情況,但是每個事務操作都設計系統間的多次通信,協調性能很差,不適合高性能高併發場景。
      可以藉助消息隊列實現,通過(事件表)來解數據庫操作和消息隊列操作在同一事務中。

  1. 消息隊列需解決問題:
  • 消息堆積: 消費者生產者模式,一旦某個時段消費者消費進度不及生產進度,導致消息在處理中心堆積得不到釋放,給消息隊列設置一個閾值,超過閾值,消息不再放入處理中心,以防止系統資源耗盡,機器宕機,整個消息隊列不可用。
  • 消息持久化: 如果消息到達處理中心不處理就直接轉給消費者,那麼消息中心就失去了存在的意義,無法滿足流量削峯等需求,常規做法先將消息暫存,然後再投遞,若要保證服務器宕機不丟消息,需要將消息持久化將消息存到本地文件,分佈式文件系統,數據庫系統中等。
  • 可靠投遞: 可靠投遞及不允許消息丟失,消息丟失一般發生在1. 生產者到處理中心,2. 處理中心到消費者,3. 持久化消息
  • 消息重複: 某些消息隊列,爲了保證消息的可靠投遞,把消息持久化到本地,然後發送給消費者。定時輪詢待發送的消息,可能存在重複消息的情況。
  • 嚴格有序: 保證消息的有序消費。
  • 集羣: 高可用,排除單點故障引起系統不可用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章