解密春晚微信红包十亿级并发压力
編者按:
騰訊云消息服務(wù)(Cloud Message Queue)是分布式消息隊列服務(wù),能夠為分布式事務(wù)部署的不同應(yīng)用之間或者一個應(yīng)用的不同組件之間,提供基于消息的可靠的異步通信機制,消息被存儲在高可靠、高可用的CMQ隊列中,多進程可以同時讀寫,互不干擾。
那么,究竟什么是分布式事務(wù)呢?舉一個簡單的例子——春晚微信紅包。
?
如果A向B發(fā)了一個紅包,過程大致如下:
?
①?讀取A賬戶余額;
②?A賬戶余額減去紅包金額,并將新的賬戶余額寫入A賬戶中;
③?讀取B賬戶余額;
④?拆開紅包,讀取紅包金額;
⑤?B賬戶余額加上紅包金額,并將新的賬戶余額寫入B賬戶中。
?
對于春晚微信紅包這個達到十億級別的請求來說,如果使用傳統(tǒng)的分布式事務(wù)處理方式,微信紅包這個復(fù)雜的過程會放大并發(fā)壓力,并且足以導(dǎo)致系統(tǒng)異常。例如上述過程第5步,由于并發(fā)壓力過大常會出現(xiàn)A被扣款,B拆開紅包后無法入賬的情況。
?
騰訊云消息服務(wù)(CMQ)的其中一項功能就是將入賬失敗的請求,轉(zhuǎn)入到CMQ隊列中,錢包賬戶系統(tǒng)不斷從CMQ隊列拉取數(shù)據(jù)、嘗試更新操作,直到成功入賬。簡而言之,CMQ保證了入賬消息永不丟失。
?
在此過程中,CMQ消息隊列保證了紅包消息的可靠存儲、傳遞,實時寫三份保證數(shù)據(jù)不丟。資金入賬失敗時可多次重試,避免失敗回滾和頻繁輪詢數(shù)據(jù)庫等傳統(tǒng)方式的弊端。
?
除了增強分布式事務(wù)處理的可靠性之外,CMQ還有以下幾點功能:
?
①?異步通信協(xié)議
消息的發(fā)送者將消息發(fā)送到消息隊列后可以立即返回,不用等待接收者的響應(yīng)。消息會被保存在隊列中,直到被接收者取出。消息的發(fā)送與處理是完全異步的。
?
②?進程解耦
消息隊列幫助減少兩個進程間的耦合度。只要消息格式不變,即使接收者的接口、位置或者配置改變,也不會給發(fā)送者帶來任何改變。并且,消息發(fā)送者無需知道消息接收者是誰,使得系統(tǒng)設(shè)計更清晰;相反的,進程間使用遠程過程調(diào)用(RPC)或者socket連接,當一方接口、ip或端口改變了,另一方則必須修改改寫請求配置。
?
③?消息路由
發(fā)送者無需與接收者建立直接連接,雙方通過消息隊列保證消息能夠從發(fā)送者路由到接收者,甚至對于本來網(wǎng)絡(luò)不易互通的兩個服務(wù),也可以提供消息路由。
?
④?多終端
用戶系統(tǒng)的多個部分可以同時發(fā)送或接收消息,騰訊云 CMQ 通過消息狀態(tài)來進行消息可用性的控制。
?
⑤?多樣性
每個隊列均可獨立配置,并非所有隊列都要完全相同。在不同業(yè)務(wù)場景下的隊列可以進行個性化的配置,例如一個隊列中消息處理時間較長,可以針對隊列屬性進行優(yōu)化。
來源:https://blog.csdn.net/qq_35446207/article/details/52412084
總結(jié)
以上是生活随笔為你收集整理的解密春晚微信红包十亿级并发压力的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嘉陵弯梁摩托车为什么给油提速慢为什么,点
- 下一篇: 面试问:Kafka为什么速度那么快?