精品一区二区三区在线成人,欧美精产国品一二三区,Ji大巴进入女人66h,亚洲春色在线视频

為什么我們需要消息隊列?

開發(fā)
消息隊列有著悠久的歷史,它們經(jīng)常用于不同系統(tǒng)之間的通信。本文通過將其與星巴克的工作方式進行比較,闡述了消息隊列的概念。

在這期中,我們將深入探討一種廣泛使用的中間件:消息隊列。

消息隊列有著悠久的歷史,它們經(jīng)常用于不同系統(tǒng)之間的通信。圖1通過將其與星巴克的工作方式進行比較,闡述了消息隊列的概念。

在星巴克,收銀員接受訂單并收取款項,然后在咖啡杯上寫下顧客的名字,交給下一個步驟。制作咖啡的人拿起訂單和杯子,然后制作咖啡。然后顧客在柜臺上取走咖啡。這三個步驟是異步進行的。收銀員只是將訂單以咖啡杯的形式放下,并不等待完成。制作咖啡的人只是將完成的咖啡放在柜臺上,并不等待顧客來取。

當(dāng)您在星巴克下訂單時,收銀員接受訂單并在杯子上寫下您的名字,然后轉(zhuǎn)向下一個顧客。然后咖啡師拿起杯子,準(zhǔn)備您的飲品,然后留下供您取走。這個過程之所以美妙,是因為每個步驟都是獨立運作的。這很像一個異步系統(tǒng)。

 圖1 星巴克作為消息隊列的類比

這種異步處理,每個步驟都不必等待前一個步驟完成,顯著增加了系統(tǒng)的吞吐量。例如,收銀員不必等待您的飲品制作完成后才接受另一個訂單。

消息隊列的一個示例

現(xiàn)在,讓我們將焦點轉(zhuǎn)向一個真實世界的例子:電子商務(wù)中的限時搶購。由于用戶活動激增,限時搶購可能會給系統(tǒng)帶來壓力。為了應(yīng)對這種需求,采用了許多策略,而消息隊列通常在后端優(yōu)化中發(fā)揮關(guān)鍵作用。

一個簡化的電子商務(wù)限時搶購架構(gòu)如圖2所示。

  • 步驟1和2:顧客向訂單服務(wù)下訂單。
  • 步驟3:在處理付款之前,訂單服務(wù)保留所選的庫存。
  • 步驟4:然后訂單服務(wù)將支付指令發(fā)送到支付服務(wù)。支付服務(wù)會扇出到3個服務(wù):支付渠道、通知和分析。
  • 步驟5.1和6.1:支付服務(wù)將支付指令發(fā)送到支付渠道服務(wù)。支付渠道服務(wù)與外部PSP(支付服務(wù)提供商)進行通信,以完成交易。
  • 步驟5.2和6.2:支付服務(wù)向通知服務(wù)發(fā)送通知,通知服務(wù)然后通過電子郵件或短信向顧客發(fā)送通知。
  • 步驟5.3:支付服務(wù)向分析服務(wù)發(fā)送交易詳細(xì)信息。

圖2 一個簡化的電子商務(wù)限時搶購架構(gòu)

這里的一個關(guān)鍵點是,在限時搶購活動中,無縫的用戶體驗至關(guān)重要。為了在高流量情況下保持服務(wù)的響應(yīng)能力,可以在多個階段集成消息隊列,以確保性能最佳。

消息隊列的優(yōu)勢扇出

支付服務(wù)將數(shù)據(jù)發(fā)送到三個下游服務(wù),用于不同的目的:支付渠道、通知和分析。這種扇出方法就像有人在房間里大聲喊話;誰需要聽到,就聽到了。生產(chǎn)者只需將消息放在隊列中,而消費者可以按照自己的節(jié)奏處理消息。

(1) 異步處理

借用星巴克的類比,就像收銀員不必等待咖啡制作完成一樣,訂單服務(wù)也不必等待支付完成。支付指令被放置在隊列中,一旦完成,顧客就會收到通知。

(2) 速率限制

在限時搶購活動中,可能會有數(shù)以萬計的并發(fā)用戶同時下訂單。在滿足渴望購買的顧客和保持系統(tǒng)穩(wěn)定之間取得平衡非常重要。一種常見的方法是在特定的時間范圍內(nèi)限制進入的請求數(shù)量,以匹配系統(tǒng)的容量。多余的請求可能會被拒絕或要求在短時間延遲后重試。這種方法確保系統(tǒng)保持穩(wěn)定,不會被壓垮。對于成功通過的請求,消息隊列確保它們被高效有序地處理。如果系統(tǒng)的某個部分暫時滯后,訂單不會丟失。它會在隊列中保持,直到可以處理為止。這確保了即使在壓力下也能保持流暢的流程。

(3) 解耦

我們的設(shè)計在多個地方使用了消息隊列。總體架構(gòu)與圖2中呈現(xiàn)的簡化版本不同。服務(wù)之間通過定義良好的消息接口進行交互,而不是緊密依賴彼此。每個服務(wù)都可以獨立進行修改和部署。每個組件可以使用不同的編程語言進行開發(fā)。這為架構(gòu)設(shè)計帶來了靈活性。

(4) 橫向擴展

由于服務(wù)被解耦,我們可以根據(jù)需求獨立地進行擴展。每個服務(wù)可以在不同的能力范圍內(nèi)提供服務(wù),因此我們可以根據(jù)其計劃的每秒查詢數(shù)(QPS)或每秒事務(wù)數(shù)(TPS)進行擴展。

(5) 消息持久性

消息隊列還可以用作存儲消息的中間件。如果上游服務(wù)崩潰,下游服務(wù)始終可以從消息隊列中獲取消息進行處理。通過這種方式,恢復(fù)功能從每個服務(wù)中移出,并成為消息隊列的責(zé)任。

(6) 批處理

在處理流程中,有時我們需要對數(shù)據(jù)進行批處理以獲得摘要。例如,當(dāng)支付服務(wù)向分析服務(wù)發(fā)送更新時,分析服務(wù)不需要執(zhí)行實時更新,而是設(shè)置一個滾動窗口以批處理處理。批處理是下游服務(wù)的要求,因此支付服務(wù)不需要知道它,只需將消息放入隊列中。

(7) 消息排序

在限時搶購中,庫存數(shù)量有限。例如,限時搶購只提供10部iPhone,但有超過10,000名下訂單的用戶。我們?nèi)绾螞Q定訂單的順序呢?通過使用消息隊列來保留所有訂單,將會自然形成一個順序:隊列中的前10個訂單將獲得iPhone。

在圖3中,我們將所有內(nèi)容整合在一起,服務(wù)通過消息隊列連接并解耦。這樣,架構(gòu)可以實現(xiàn)更高的吞吐量。

 圖3 在限時搶購架構(gòu)中使用消息隊列

責(zé)任編輯:趙寧寧 來源: 小技術(shù)君
相關(guān)推薦

2018-09-14 18:00:29

無損網(wǎng)絡(luò)

2022-08-26 08:00:19

企業(yè)架構(gòu)IT

2019-08-05 08:42:37

物聯(lián)網(wǎng)IOT技術(shù)

2022-12-01 14:43:56

物聯(lián)網(wǎng)智慧城市

2025-06-24 02:00:00

5G-A運營商基站

2020-04-06 14:45:22

云計算邊緣計算網(wǎng)絡(luò)

2015-08-03 10:40:45

動效設(shè)計優(yōu)勢

2021-05-24 11:30:49

智能建筑IOT物聯(lián)網(wǎng)

2015-11-11 13:35:15

2016-01-20 09:54:51

微服務(wù)架構(gòu)設(shè)計SOA

2011-12-31 21:16:42

Windows Pho

2020-02-19 15:01:30

數(shù)據(jù)庫SQL技術(shù)

2022-08-31 15:40:13

云原生數(shù)據(jù)

2022-02-11 11:17:24

物聯(lián)網(wǎng)安全物聯(lián)網(wǎng)IOT

2018-05-30 14:49:51

編程語言API語法

2022-12-12 07:30:59

編程語言架構(gòu)

2021-04-26 09:33:46

Go Iota語言

2018-12-03 15:00:25

SD-WAN網(wǎng)絡(luò)自我修復(fù)

2023-01-11 16:22:07

2020-09-02 10:39:34

SAML IDP簽名密鑰加密
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 酒泉市| 芮城县| 抚州市| 霍城县| 泸溪县| 长岛县| 永胜县| 肥乡县| 舒城县| 潍坊市| 台前县| 遂宁市| 泸西县| 黄龙县| 易门县| 汉川市| 临江市| 那坡县| 无极县| 呼图壁县| 陆川县| 四子王旗| 辛集市| 伊川县| 称多县| 盐城市| 东莞市| 太原市| 永顺县| 浪卡子县| 赣榆县| 辽宁省| 夏河县| 保亭| 离岛区| 晋州市| 广安市| 怀化市| 绩溪县| 紫阳县| 三明市|