一篇文章帶你瞭解高可用架構分析
1、介紹
訊息中介軟體是指在分散式系統中完成訊息的傳送和接收的基礎軟體。訊息中介軟體也可以稱訊息佇列(Message Queue / MQ),網際網路場景中經常使用訊息中介軟體進行訊息路由、訂閱釋出、非同步處理等操作,來緩解系統的壓力。引入訊息佇列主要是為了解決如下問題的:
解耦 :如訂單系統,可以透過訊息佇列把削減庫存的工作交給庫存系統去處理,而不用等實時響應。
執行有序性:先進先出原理,按照進入訊息佇列的順序處理業務事件。
訊息路由 :按照不同的規則,將佇列中訊息傳送到不同的業務服務中。
非同步處理 :將一些無需實時響應結果的計算放到非同步中,提升系統的吞吐率。
削峰 :將峰值期間的操作削減,比如整個操作流程包含12個步驟,後11個步驟非強關注結果的資料,可以放在訊息佇列中。
既然本身就是為了解決大流量場面而設計的,那他自身的穩定性、健壯性就顯的無比重要,下面我們來看看訊息佇列怎麼去保證可用性的。
2、訊息佇列的基本構成
分析高可用特性前先複習下訊息佇列的基本元件,無論是哪一種型別的訊息佇列,基本都包含以下構成:
Broker:訊息伺服器,以服務的形式執行在server端,給各個業務系統提供核心訊息資料的中轉服務。
Producer:訊息生產者,業務的發起方,負責生產訊息傳輸給broker。
Consumer:訊息消費者,業務的處理方,負責從broker獲取訊息並進行業務邏輯處理
Topic:主題模組,釋出/訂閱模式下的訊息統一彙集地,不同生產者向topic傳送訊息,由MQ伺服器分發到不同的訂閱者,實現訊息的廣播
Queue:佇列,PTP模式下,特定生產者向特定queue傳送訊息,消費者訂閱特定的queue完成指定訊息的接收。
Message:訊息體,根據不同通訊協議定義的固定格式進行編碼的資料包,來封裝業務資料,實現訊息的傳輸。
上圖中以kafka為例子,這是典型的叢集模式,Kafka透過Zookeeper管理叢集配置,選舉leader,以及在Consumer Group發生變化時進行rebalance。Producer使用push模式將訊息釋出到broker,Consumer使用pull模式從broker訂閱並消費訊息。
producer 負責生產訊息
consumer 負責消費訊息
broker 訊息伺服器,提供訊息核心的處理工作
zookeeper 用於生產者和消費者的註冊與發現
3、高可用性架構保證
瞭解了一個訊息佇列的構成之後,我們來看看這種結構是怎麼保障高可用性的。首先,高可用是指系統的出錯機率和無故障執行時長,從訊息佇列角度出發,至少要保證一下幾點:
低訊息丟失率:訊息可靠性也是衡量訊息中介軟體好壞的一個關鍵因素,尤其是在金融支付領域,訊息可靠性尤為重要。
低故障率:訊息中介軟體的可用性是指無故障執行的時間百分比,通常用幾個 9 來衡量,如 99.99% 就是一個不錯的指標。
多副本容錯能力:一般會要求多副本及強一致性,多副本可以保證在 master 節點當機異常之後可以提升 slave 作為新的 master 而繼續提供服務來保障可用性。
3.1 RocketMQ
以為RocketMQ為例,叢集模式如下:
多master 模式
多master多slave非同步複製模式-
多 master多slave同步雙寫模式。
Name Service 叢集: RocketMQ 的 "中央大腦 " , RocketMQ 的服務註冊中心,叢集模式確保它的可用性。
Produer 叢集
Consumer 叢集:避免單例的消費服務故障導致訊息堆積。多master 多slave模式部署架構圖:
Producer 與 NameServer叢集中的其中一個節點(隨機或者RR選擇)建立長連線,定期從 NameServer 獲取 Topic 路由資訊,既可以從 Broker Master 訂閱訊息,也可以從 Broker Slave 訂閱訊息。
3.2 Kafka
Kafka叢集中包含如下組成部分:
幾個訊息生產者Producer(可以是業務的Web程式、定時任務服務,其他下游服務的請求等)
一個broker組(Kafka支援橫向擴充套件,一般來說broker數量越多,叢集吞吐率越高)
一個消費組 Consumer Group,在資源充足的情況下,消費者越多,消費效率越高,效能也就越好
一個Zookeeper叢集:保證消費者和生產者的註冊和訂閱,避免業務之間的耦合,也提高了可用性。兩個關鍵點:
Kafka透過Zookeeper管理叢集配置,選舉leader,以及在Consumer Group發生變化時進行rebalance。
Producer使用push模式將訊息釋出到broker,Consumer使用pull模式從broker訂閱並消費訊息。
來自 “ Java碼農之路 ”, 原文作者:Java碼農之路;原文連結:http://server.it168.com/a2023/0105/6784/000006784576.shtml,如有侵權,請聯絡管理員刪除。
相關文章
- 一篇文章帶你瞭解——Kotlin協程Kotlin
- 一篇文章帶你瞭解設計模式——結構型模式設計模式
- 一篇文章帶你瞭解高質量代理ip的使用技巧
- 一篇文章帶你瞭解介面自動化
- 一篇文章帶你瞭解HTML5 MathMLHTML
- 一篇文章帶你瞭解和使用Promise物件Promise物件
- 一篇文章帶你初步瞭解—CSS特指度CSS
- 一篇文章帶你瞭解HTML格式化元素HTML
- 一篇文章帶你瞭解CSS 分頁例項CSS
- 一篇文章帶你瞭解設計模式——建立者模式設計模式
- 【架構視角】一篇文章帶你徹底吃透Spring架構Spring
- 一篇文章帶你瞭解Python基礎測試工具——UnitTestPython
- 一篇文章帶你瞭解如何測試訊息佇列佇列
- MySQL高可用架構設計分析MySql架構
- MQ系列9:高可用架構分析MQ架構
- 你真的瞭解python嗎?這篇文章帶你快速瞭解!Python
- 高可用架構架構
- 一篇帶你瞭解TCP/IP 概念TCP
- 一篇文章帶你瞭解Python常用自動化測試框架——PytestPython框架
- 什麼是工藝流程圖?一篇文章帶你詳細瞭解流程圖
- 一篇文章帶你更深入瞭解區塊鏈有哪些應用?區塊鏈
- 什麼是Python爬蟲?一篇文章帶你全面瞭解爬蟲Python爬蟲
- 一篇文章幫你瞭解 PHP 7.3 更新PHP
- 高可用架構設計全面詳解(8大高可用方案)架構
- 一篇文章帶你瞭解網路爬蟲的概念及其工作原理爬蟲
- 帶你瞭解極具彈性的Spark架構的原理Spark架構
- 這篇文章,帶你全面瞭解外包公司
- 一文章帶你瞭解微服務微服務
- MySQL 高可用架構之 MMM 架構MySql架構
- 機器學習到底是什麼?一篇文章帶你瞭解透徹機器學習
- 優思學院|一篇文章帶你瞭解什麼是六西格瑪
- Mysql高可用架構方案MySql架構
- Canal高可用架構部署架構
- 一篇文章帶你搞定HashTable
- 一篇文章瞭解大前端前端
- 高可用系列文章之二 - 傳統分層架構技術方案架構
- 一篇文章讓你徹底瞭解Java內部類Java
- 一文帶你瞭解微服務架構和設計(多圖)微服務架構