主頁 >  其他 > 阿里一面,說說你知道訊息中間件的應用場景有哪些?

阿里一面,說說你知道訊息中間件的應用場景有哪些?

2022-03-02 08:13:11 其他

1、前言

又到了金三銀四的時候,大家都按耐不住內心的躁動,我在這里給大家分享下之前面試中遇到的一個知識點(MQ的應用場景),如有不足,歡迎大佬們指點指點,

訊息中間件應用背景

提高系統性能首先考慮的是資料庫的優化,但是資料庫因為歷史原因,橫向擴展是一件非常復雜的工程,所有我們一般會盡量把流量都擋在資料庫之前,不管是無限的橫向擴展服務器,還是縱向阻隔到達資料庫的流量,都是這個思路,阻隔直達資料庫的流量,快取組件和訊息組件是兩大殺器,

2、MQ簡介

MQ:Message queue,訊息佇列,就是指保存訊息的一個容器,

現在常用的MQ組件有activeMQ、rabbitMQ、rocketMQ,當然近年來火熱的kafka,從某些場景來說,也是MQ,不過kafka的功能更加強大,雖然不同的MQ都有自己的特點和優勢,但是,不管是哪種MQ,都有MQ本身自帶的一些特點,

常用訊息佇列比較

特性ActiveMQRabbitMQRocketMQKafka
生產者消費者模式支持支持支持支持
發布訂閱模式支持支持支持支持
請求回應模式支持支持不支持不支持
Api完備性
多語言支持支持支持java支持
單機吞吐量萬級萬級萬級十萬級
訊息延遲微秒級毫秒級毫秒級
可用性高(主從)高(主從)非常高(分布式)非常高(分布式)
訊息丟失理論上不會丟失理論上不會丟失
檔案的完備性教高
提供快速入門
社區活躍度
商業支持商業云商業云

3、MQ特點

先進先出

先進先出,是佇列最明顯的特點,訊息佇列的順序在入隊的時候就基本已經確定了,一般是不需人工干預的,而且,最重要的是,資料是只有一條資料在使用中, 這也是MQ在諸多場景被使用的原因,

發布訂閱

發布訂閱是一種很高效的處理方式,如果不發生阻塞,基本可以當做是同步操作,這種處理方式能非常有效的提升服務器利用率,這樣的應用場景非常廣泛,

持久化

持久化確保MQ的使用不只是一個部分場景的輔助工具,而是讓MQ能像資料庫一樣存盤核心的資料,保證MQ的可靠性,

分布式

在現在大流量、大資料的使用場景下,只支持單體應用的服務器軟體基本是無法使用的,支持分布式的部署,才能被廣泛使用,而且,MQ的定位就是一個高性能的中間件,

4、應用場景

訊息佇列中間件是分布式系統中重要的組件,主要解決應用解耦,異步訊息,流量削鋒、海量日志資料同步、分布式事務等問題,實作高性能,高可用,可伸縮和最終一致性架構,

4.1 應用解耦

場景說明:用戶下單后,訂單系統需要通知庫存系統,傳統的做法是,訂單系統呼叫庫存系統的介面,

image-20220301193157985

傳統模式的缺點:假如庫存系統無法訪問,則訂單減庫存將失敗,從而導致訂單失敗,訂單系統與庫存系統耦合度高,容易出現雪崩事故,

引入應用訊息佇列后的方案

image-20220301193421703

訂單系統:用戶下單后,訂單系統完成持久化處理,將訊息寫入訊息佇列,回傳用戶訂單下單成功,
庫存系統:訂閱下單的訊息,采用pull/push的方式,獲取下單資訊,庫存系統根據下單資訊,進行庫存操作,
解決問題關鍵步驟:在下單時庫存系統不能正常使用,也不影響正常下單,因為下單后,訂單系統寫入訊息佇列就不再關心其他的后續操作了,只要達成最終一致性即可,實作訂單系統與庫存系統的應用解耦,

4.2 異步訊息

場景說明:用戶注冊后,需要發注冊郵件和注冊短信,傳統的做法有兩種:串行的方式、并行方式,

  1. 串行方式:將注冊資訊寫入資料庫成功后,發送注冊郵件,再發送注冊短信,以上三個任務全部完成后,回傳給客戶端,

    image-20220301193824700
  2. 并行方式:將注冊資訊寫入資料庫成功后,發送注冊郵件的同時,發送注冊短信,以上三個任務完成后,回傳給客戶端,與串行的差別是,并行的方式可以提高處理的時間,

    image-20220301193912473

    問題分析

    假設三個業務節點每個使用50毫秒鐘,不考慮網路等其他開銷,則串行方式的時間是150毫秒,并行的時間可能是100毫秒,
    因為CPU在單位時間內處理的請求數是一定的,假設CPU1秒內吞吐量是100次,則串行方式1秒內CPU可處理的請求量是7次(1000/150),并行方式處理的請求量是10次(1000/100)
    如以上案例描述,傳統的方式系統的性能(并發量,吞吐量,回應時間)會有瓶頸,

    將發送注冊郵件和注冊短信的步驟通過訊息佇列解耦

    image-20220301194204361

    由以上架構可知,用戶的回應時間相當于是注冊資訊寫入資料庫的時間,也就是50毫秒,注冊郵件,發送短信寫入訊息佇列后,直接回傳,因此寫入訊息佇列的速度很快,基本可以忽略,因此用戶的回應時間可能是50毫秒,因此架構改變后,系統的吞吐量提高到每秒20 QPS,比串行提高了3倍,比并行提高了兩倍,

4.3 流量削鋒

流量削鋒也是訊息佇列中的常用場景,一般在秒殺或團搶活動中使用廣泛,

場景說明:秒殺活動,一般會因為流量過大,導致流量暴增,應用或者資料庫掛掉,為解決這個問題,一般需要在應用前端加入訊息佇列,

架構如下

image-20220301194437969

加入訊息佇列的好處

  1. 可以控制活動的人數
  2. 可以緩解短時間內高流量壓垮應用

用戶的請求,服務器接收后,首先寫入訊息佇列,假如訊息佇列長度超過最大數量,則直接拋棄用戶請求或跳轉到錯誤頁面,
秒殺業務根據訊息佇列中的請求資訊,再做后續處理,

4.4 海量日志資料同步

場景說明:在微服務體系下,專案往往是集群部署,那么就需要一個統一日志平臺來查詢各個實體的日志,但集群中的日志資訊往往都是海量資料,單一的日志采集工具不能滿足業務的需要,因此需要將訊息佇列用在日志處理中,比如Kafka的應用,解決大量日志傳輸的問題,

架構簡化如下

image-20220301195357808

架構說明

  1. 日志采集客戶端,負責日志資料采集,定時寫受寫入Kafka佇列
  2. Kafka訊息佇列,負責日志資料的接收,存盤和轉發
  3. 日志處理應用:訂閱并消費kafka佇列中的日志資料

4.5 分布式事物

分布式事務又分為強一致,弱一致,和最終一致性

  1. 強一致

    當更新操作完成之后,任何多個后續行程或者執行緒的訪問都會回傳最新的更新過的值,這種是對用戶最友好的,就是用戶上一次寫什么,下一次就保證能讀到什么,根據 CAP 理論,這種實作需要犧牲可用性,

  2. 弱一致

    系統并不保證續行程或者執行緒的訪問都會回傳最新的更新過的值,系統在資料寫入成功之后,不承諾立即可以讀到最新寫入的值,也不會具體的承諾多久之后可以讀到,

  3. 最終一致

    弱一致性的特定形式,系統保證在沒有后續更新的前提下,系統最侄訓傳上一次更新操作的值,在沒有故障發生的前提下,不一致視窗的時間主要受通信延遲,系統負載和復制副本的個數影響,DNS 是一個典型的最終一致性系統,

在分布式系統中,同時滿足“CAP定律”中的一致性、可用性和磁區容錯性三者是幾乎不可能的,在互聯網領域的絕大多數的場景,都需要犧牲強一致性來換取系統的高可用性,系統往往只需要保證“最終一致性”,只要這個最終時間是在用戶可以接受的范圍內即可,這時候我們只需要用短暫的資料不一致就可以達到我們想要效果,

場景說明:比如有訂單,庫存兩個資料,一個下單程序簡化為,加一個訂單,減一個庫存, 而訂單和庫存是獨立的服務,那怎么保證資料一致性,

遠程呼叫最郁悶的地方就是,結果有3種,成功、失敗和超時, 超時的話,成功失敗都有可能,一般的解決方案,大多數的做法是借助mq來做最終一致,

實作最終一致

最終一致性

通過上面的架構可能會想到這些問題

本地先執行事務,執行成功了就發個訊息過去,消費端拿到訊息執行自己的事務,
比如a,b兩個服務,服務a異步呼叫服務b,如果服務b失敗了,或者成功,或者超時,那么怎么用mq讓他們最終一致呢?

參照于本地事務的概念可將該場景分為三種情況解決

  1. 第一種情況:假設a,b都正常執行,那整個業務正常結束;
  2. 第二種情況:假設b超時,那么需要MQ給b重發訊息(b服務要做冪等),如果出現重發失敗的話,需要看情況,是中斷服務,還是繼續重發,甚至人為干預;
  3. 第三種情況:假設a,b之中的一個失敗了,失敗的服務利用MQ給其他的服務發送訊息,其他的服務接收訊息,查詢本地事務記錄日志,如果本地也失敗,洗掉收到的訊息(表示訊息消費成功),如果本地成功的話,則需要呼叫補償介面進行補償(需要每個服務都提供業務補償介面),

需要特別注意

MQ這里有個坑,通常只適用于只允許第一個操作失敗的場景,也就是第一個成功之后必須保證后面的操作在業務上沒障礙,不然后面失敗了前面不好回滾,只允許系統例外的失敗,不允許業務上的失敗,通常業務上失敗一次后面基本上也不太可能成功了,要是因為網路或宕機引起的失敗可以通過重試解決,如果業務例外,那就只能發訊息給服務a讓他們做補償了吧?通常是通過第三方進行補償,各個服務需要提供補償介面,設計范式里通常不允許消費下游業務失敗,

5、總結

MQ在分布式系統開發的場景下使用的越來越多,處理的業務能力也越來越強,所以掌握MQ的使用場景是很要必要的,通過掌握MQ,即可解決大多數業務場景,也可在面試中加分,提高自己的核心競爭力,

最后,外出打工不易,希望各位兄弟找到自己心儀的作業,虎年發發發

也希望兄弟們能關注、點贊、收藏、評論支持一波,非常感謝大家!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/435471.html

標籤:其他

上一篇:Hadoop入門(一篇就夠了)

下一篇:python大資料可視化分析淘寶商品,開專賣店不行啊

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more