精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

支持每秒上萬單的秒殺扣庫存事務

開發 架構
本文介紹一種全新的秒殺架構,解決了秒殺架構中的高并發扣庫存問題。

該架構能夠支持每秒超萬單精準扣庫存,并且在應用crash等情況下,也能保證創建訂單和扣減庫存的數據最終嚴格一致。

現有秒殺系統的問題

現有的秒殺架構,為了支持高并發,通常把庫存放在Redis中,收到訂單請求時,在Redis中進行庫存扣減。這種的設計,導致創建訂單和庫存扣減不是原子操作,如果兩個操作中間,遇到進程crash等問題,就會導致數據不一致。

即使庫存扣減不放在Redis中,而是放在數據庫,不一致問題也通常是存在的。業務系統為了模塊化,減少耦合,會將庫存服務與訂單服務分開。只要是分開的服務,那么數據不一致的情況就是無法避免的。

進程crash等問題,雖然發生的概率不高,但即使占比百分之一,甚至千分之一,都會產生數據不一致,例如扣減的庫存量和創建成功的訂單不一致。

庫存與訂單數據不一致是必須解決的難題,常見做法是,開發人員通過訂單數據,去校準庫存數據,這部分的工作非常繁瑣復雜,耗費大量的開發工作,而且很多時候需要人工介入,對數據進行人工校驗和修復。

下面我們來看看新架構如何優雅解決這個問題

整體架構

我們明確業務場景,我們把秒殺系統的核心要點提取出來,為以下幾點:

  • 用戶進行秒殺,會在某個時間點發送大量的請求到后端,請求量會大大高于庫存數量
  • 后端需要保證庫存扣減和訂單創建是最終嚴格一致的,即使中間發生進程crash,最終數據不會受到影響

本架構基于 https://github.com/dtm-labs/dtm,這是一個分布式事務框架,提供跨服務,跨庫的數據一致性解決方案。

上述的場景下,絕大部分扣減庫的描述請求,都會失敗,時序圖如下:

在這個架構中,使用了分布式事務框架dtm。上述的時序圖中,扣減庫存是在Redis中進行的,與dtm相關的注冊全局事務和取消全局事務也是在Redis中處理的,全程依賴Redis,與數據庫無關,因此能夠支持極高的并發,從后面的測試數據中可以看到,該架構可以輕易處理每秒上萬單的秒殺請求。

雖然大部分請求因為扣減庫存失敗而結束,但是會有一定數量的請求,扣減庫存成功,這種情況的時序圖如下:

在這個時序圖中,扣減庫存成功后,會進入到訂單服務,進行訂單相關的創建,以及后續的支付。在這個新架構中,訂單服務僅需要處理有效訂單,此時并發量已經大幅下降,只需要通過常規的方法,例如訂單分庫分表、消息隊列削峰處理,就可以輕松解決問題了。

原子操作

在上述的架構中,如果在Redis中扣減庫存后,在提交全局事務前,發生進程crash,就會導致兩個操作沒有同時完成,那么這種情況后續會怎么樣?新架構如何保證數據最終嚴格一致?這種情況的整個的時序圖如下:

一旦發生這類進程crash,導致兩個操作過程中斷,那么dtm服務器會輪詢超時未完成的事務,如果出現已Prepare、未Submit的全局任務,那么他會調用反查接口,詢問應用,庫存扣減是否成功扣減。如果已扣減,則將全局事務提交,并進行后續的調用;如果未扣減,則將全局事務標記為失敗,不再處理。

保證原子操作的原理,以及發生各種情況dtm的處理策略,可以參考二階段消息,這里不做詳細的描述。

核心代碼#

秒殺接口的核心代碼如下:

gid := "{a}flash-sale-" + activityID + "-" + uid
msg := dtmcli.NewMsg(DtmServer, gid).

Add(busi.Busi+"/createOrder", gin.H{activity_id: activityID, UID: uid})err := msg.DoAndSubmit(busi.Busi+"/QueryPreparedRedis", func(bb *BranchBarrier) error {

return bb.RedisCheckAdjustAmount(rds, "{a}stock-"+stockID, -1, 86400)})

}
  • 行1: 一般的秒殺活動,一個用戶僅能購買一次,因此按照活動id+用戶id作為全局事務ID,能夠保證用戶最多生成一個全局事務,最多創建一個訂單
  • 行2: 創建一個二階段消息的對象,填入dtm服務器地址,以及全局事務id
  • 行3: 給二階段消息添加一個分支事務,該事務分支為創建訂單服務
  • 行4: 調用二階段消息的DoAndSubmit,該函數第一個參數為反查的URL(見上圖中的反查);第二個參數為一個回調函數,里面會包含業務邏輯。該函數會執行業務,并在成功后提交全局事務,保證執行業務和全局事務的提交是“原子的”
  • 行5: 調用RedisCheckAdjustAmount,該函數會進行庫存扣減,這個函數進行庫存扣減時,如果庫存不夠,則會返回錯誤;如果庫存足夠,則會扣減庫存,并記錄庫存已扣減成功,這樣可以保證這個操作冪等,并且保證后續的反查能夠獲得正確的結果

反查的核心代碼如下:

app.GET(BusiAPI+"/QueryPreparedRedis", dtmutil.WrapHandler2(func(c *gin.Context) interface{} {
return MustBarrierFromGin(c).RedisQueryPrepared(rds)
}))

開發人員編寫反查的邏輯很簡單,對于Redis里面的數據,只需要復制粘貼這上面的代碼就行。反查的詳細原理參考二階段消息,二階段消息的文檔里介紹的是數據庫中如何做,而這里則是用Redis來完成類似的反查邏輯,就不詳細說明了。

性能#

從上面的介紹中,可以看到,對于大部分扣減庫存失敗的請求,只需要進行三個Redis操作,1. 注冊全局事務;2. 扣減庫存;3. 修改全局事務為以失敗。這個三個操作都是lua腳本實現。一個普通的redis,每秒大約能夠支持6w個lua腳本操作,照此分析,我們的新架構,理論上每秒能夠支持2w個秒殺請求。我做的性能測試報告顯示,當dtm與扣庫存共享一個redis時,每秒可以輕松完成1.2w個秒殺訂單,達到理論極限值的60%,詳情可以參考后面的性能測試報告

更進一步分析,扣減庫存與全局事務可以使用不同的Redis,那么

  • 扣減庫存:若由單獨一個Redis來支持,那么扣庫存的理論上限值為6w/s,預估的實際值為6*0.6=3.6w/s,如果更進一步,采用 Redis6 的多線程IO,可以獲得更高的性能,大約達到6 * 2.5 * 0.6=9w/s。
  • 全局事務操作:而這里面的dtm只需要部署多組,或者未來使用集群版,就可以提供遠超9w/s的支持。
  • 所以采用新架構的情況下,預計可以達到9w/s的秒殺請求流量

上述的分析還僅僅限于普通云廠商虛擬機上的自己安裝Redis,假如通過簡單的硬件升級,或者使用云廠商提供的Redis,那么Redis能提供更強勁的性能,上述的9w/s還能夠再提高一個臺階。

參考一下阿里雙十一的峰值訂單:58.3萬筆/秒,那么上述預估的9w/s,幾乎足以應對所有的秒殺活動

代碼示例#

完整的可運行的代碼示例,可以參考https://github.com/dtm-labs/dtm-cases/flash

秒殺性能測試詳情

測試的環境,兩臺阿里云主機,類型為:ecs.hfc5.3xlarge 12核 CPU 3.1GHz/3.4GHz PPS 130萬

  • 一臺機器運行Redis
  • 另一臺機器運行測試程序

測試過程:

準備Redis#

選擇虛擬機 A 安裝 Redis

apt-get install -y redis# 修改 /etc/redis/redis.conf# bind 127.0.0.1 => 0.0.0.0systemctl redis restart

準備dtm

選擇虛擬機 B 安裝 dtm

apt update
apt install -y git

wget https://golang.org/dl/go1.17.1.linux-amd64.tar.gz

rm -rf /usr/local/go && tar -C /usr/local -xzf go1.17.1.linux-amd64.tar.gz && cp -f /usr/local/go/bin/go /usr/local/bin/go

git clone https://github.com/dtm-labs/dtm.git && cd dtm && git checkout v1.11.0 && cd bench && make

# 修改 dtm/bench/test-flash-sales.sh

# export BUSI_REDIS=localhost:6379 => 虛擬機A 的私網ip

運行測試

sh test-flash-sales.sh

獲取結果

我的結果顯示,每秒大約能夠完成1.2w個秒殺請求:

Requests per second:    11970.21 [#/sec] (mean)

小結

我們提出了一個全新的秒殺架構,可以保證創建訂單和扣減庫存的原子性,并且預估可以支撐9w/s的秒殺請求流量。幫助大家更好更快的解決秒殺的業務需求。

歡迎訪問我們的項目,并star支持我們:

https://github.com/dtm-labs/dtm

責任編輯:張燕妮 來源: 分布式事務
相關推薦

2022-11-22 17:15:55

高并發NameNode

2017-06-15 08:02:02

庫存扣減查詢

2024-09-23 08:03:13

2018-05-28 16:11:04

阿里云GTS分布式

2021-03-16 08:21:29

Spark系統并行

2018-12-05 09:20:02

MySQL數據庫索引

2010-10-27 09:09:21

NoSQL

2021-08-26 08:24:33

高并發秒殺系統

2020-11-05 14:12:16

Vue開源項目js框架

2016-11-02 13:51:02

大數據工具

2023-07-20 21:41:08

2025-07-08 02:25:00

2019-07-29 14:40:26

架構存儲檢索

2019-05-05 09:28:59

架構數據查詢

2019-07-16 08:51:03

熱搜新浪微博數據

2013-03-07 09:30:51

云成本分析工具云服務亞馬遜云服務

2015-03-31 10:44:26

IT人員上萬月薪招不到IT人才

2010-02-22 10:21:22

2019-09-16 09:34:39

2021-11-23 09:00:00

數據庫事務API無代碼
點贊
收藏

51CTO技術棧公眾號

成人免费观看毛片| 97在线视频免费观看| 五月婷婷六月合| 国产区在线观看| 国产黄色91视频| 26uuu亚洲国产精品| 天天躁夜夜躁狠狠是什么心态| 99欧美精品| 一区二区视频在线| 古典武侠综合av第一页| 在线观看免费av片| 欧美3p视频| 亚洲大胆人体在线| 9l视频白拍9色9l视频| 黄页在线观看免费| 国产欧美精品区一区二区三区| 91久久精品视频| www亚洲视频| 欧美激情第10页| 亚洲人成在线观看| 丰满人妻一区二区三区53视频| 亚洲美女尤物影院| 国产精品不卡视频| 久久99导航| 国产老女人乱淫免费| 在线一区视频| 色在人av网站天堂精品| 国产jjizz一区二区三区视频| 五月亚洲婷婷| 色狠狠综合天天综合综合| 穿情趣内衣被c到高潮视频| 精华区一区二区三区| 国产精品996| 国产欧美精品va在线观看| 国产成人精品网| 狠狠噜噜久久| 久久精品视频播放| 极品人妻videosss人妻| 日韩一二三区在线观看| 欧美二区三区91| 日韩一级片播放| 免费在线小视频| 亚洲夂夂婷婷色拍ww47 | 最新天堂在线视频| 成人欧美大片| 狠狠色狠色综合曰曰| 日本天堂免费a| 国产原创精品视频| 日本一区二区久久| 青青影院一区二区三区四区| 婷婷在线免费视频| 粉嫩绯色av一区二区在线观看| 成人黄色免费片| 91午夜交换视频| 美女视频黄 久久| 555www成人网| 亚洲 欧美 日韩 综合| 亚洲巨乳在线| 18一19gay欧美视频网站| 日韩欧美亚洲国产| 亚洲日本国产| 91精品国产电影| 五月婷婷亚洲综合| 久久久久国产精品午夜一区| 97视频在线看| 国产精品久久久免费视频| 亚洲美女一区| 欧美专区第一页| 在线观看污污网站| 免费成人在线网站| 成人精品一区二区三区电影免费 | 日韩一区二区免费电影| 一级黄色大片儿| av男人一区| 日韩精品高清在线| 在线观看福利片| 欧美丝袜一区| 欧美成人免费播放| 国产性生活网站| 香蕉av777xxx色综合一区| 日韩免费观看av| 97成人免费视频| 国产aⅴ精品一区二区三区色成熟| 国产精品福利视频| 午夜影院免费体验区| 国产拍欧美日韩视频二区| 亚洲欧洲一二三| 182tv在线播放| 黄色成人在线播放| 亚洲视频在线a| 精品欧美日韩精品| 制服视频三区第一页精品| 无码人妻久久一区二区三区蜜桃| 久9re热视频这里只有精品| 亚洲香蕉成视频在线观看 | 日韩一区亚洲二区| 欧美www在线| 日本在线播放视频| 久久99国产精品久久99果冻传媒| 99r国产精品视频| 视频在线观看你懂的| 国产精品护士白丝一区av| 超薄肉色丝袜足j调教99| sm捆绑调教国产免费网站在线观看| 日韩欧亚中文在线| 色18美女社区| 亚洲精品3区| 久久亚洲精品一区二区| 日本在线观看视频网站| 另类人妖一区二区av| 99三级在线| 888av在线| 午夜激情一区二区三区| 国产一级片自拍| 久久91在线| 欧美成人精品一区二区| 欧美一区免费看| 99亚偷拍自图区亚洲| 亚洲资源视频| 欧美香蕉视频| 亚洲精品一区二区三区在线观看| 日本人亚洲人jjzzjjz| 在线欧美三区| 亚洲永久在线观看| 男人在线资源站| 欧美性高跟鞋xxxxhd| 26uuu国产| 99成人在线视频| 国产成人精品综合久久久| 亚洲av无码片一区二区三区| 国产精品天美传媒| 免费男同深夜夜行网站| 卡通动漫精品一区二区三区| 欧美精品日韩三级| 中文字幕第三页| 国产丝袜欧美中文另类| 自慰无码一区二区三区| jizz性欧美23| 色综合久久88| www久久久com| 亚洲久草在线视频| 尤物网站在线看| 亚洲精品国产成人影院| 国产日韩在线播放| 淫片在线观看| 欧美精品日韩一区| 青青操在线播放| 久久福利资源站| 一级日韩一区在线观看| 色成人综合网| 日韩中文字幕网站| 亚洲天堂国产精品| 国产精品天天看| 中文字幕丰满乱码| 久久久9色精品国产一区二区三区| 国产精品视频精品| 日本中文字幕在线观看| 欧美精品v国产精品v日韩精品| 色屁屁草草影院ccyy.com| 青青草97国产精品免费观看| 日本一区二区三区视频免费看| 欧美电影免费看| 亚洲午夜精品久久久久久久久久久久| 国产一区免费看| 国产精品天美传媒| av噜噜在线观看| 欧美一区网站| 国产精品一区二区三区在线 | 国产欧美精品日韩精品| 在线观看免费网站黄| 欧美精品一二三区| 青娱乐在线视频免费观看| 国产不卡在线视频| 欧美 日韩 国产在线观看| 亚洲a级精品| 国产精品久久久久久久一区探花| 日韩成人影视| 91麻豆精品国产91久久久更新时间| 欧美特级一级片| 不卡的av网站| 国产免费视频传媒| 1024精品久久久久久久久| 国产精华一区| 三级成人在线| 久久综合久中文字幕青草| 亚洲第一视频在线| 91官网在线免费观看| 视频国产一区二区| 91在线丨porny丨国产| 亚洲精品高清无码视频| 牛牛国产精品| 欧美污视频久久久| 精品国产三区在线| 热99在线视频| 欧洲一区二区三区| 亚洲视频在线播放| 精品人妻av一区二区三区| 狠狠操狠狠色综合网| 99热这里只有精品4| 国产91精品一区二区麻豆亚洲| 国产精品裸体瑜伽视频| 欧美色爱综合| 国产精品久久久对白| 粉嫩91精品久久久久久久99蜜桃| 色综合久久中文字幕综合网小说| 青青草视频在线免费观看| 91精品国产福利在线观看| 女人十八岁毛片| 亚洲精品日韩一| 玖玖爱在线观看| 丁香啪啪综合成人亚洲小说 | 国产在线不卡一区| 国产成人精品视频免费看| 午夜片欧美伦| 欧美在线视频一区二区三区| 亚州一区二区| 91精品久久久久久久久| 成人影院网站| 欧美激情三级免费| 日本不卡不卡| 国产亚洲欧美aaaa| 五月婷婷丁香花| 日韩精品自拍偷拍| 91片黄在线观看喷潮| 色香蕉成人二区免费| 国产在线观看免费av| **网站欧美大片在线观看| 好吊视频在线观看| 99热这里都是精品| 男人添女人荫蒂国产| 韩国成人在线视频| 免费成人黄色大片| 久久精品国产精品亚洲精品| av片中文字幕| 性色av一区二区怡红| 国产欧美日韩网站| 狠狠入ady亚洲精品经典电影| 肉大捧一出免费观看网站在线播放| 欧美色图国产精品| 亚洲无玛一区| 色欧美自拍视频| 一区二区不卡在线视频 午夜欧美不卡' | 怡红院在线播放| 欧美成人小视频| 污片视频在线免费观看| 欧美成年人视频网站| 91一区二区三区在线| 久久国产精品免费视频| 成人av福利| 久久免费高清视频| 91九色美女在线视频| 97国产精品视频人人做人人爱| 丰满的护士2在线观看高清| 欧美精品videofree1080p| 成人在线免费观看黄色| 午夜精品福利电影| 美女扒开腿让男人桶爽久久软| 88国产精品欧美一区二区三区| 51漫画成人app入口| 久久久久久国产精品美女| 日本在线视频www鲁啊鲁| 亚洲欧美国产一区二区三区| 天天操天天插天天射| 亚洲欧洲在线视频| 欧美新色视频| 国产一区二区免费| 黄色视屏免费在线观看| 久久亚洲国产精品成人av秋霞| 黄网站免费在线观看| 九九久久综合网站| wwwwxxxx在线观看| 亚州av一区二区| 日韩成人亚洲| 国产精品欧美风情| 日本电影久久久| 福利视频一区二区三区| 开心激情综合| 色综合久久av| 亚洲乱码电影| 国产一二三四五| 日韩视频久久| 成人在线观看黄| 麻豆一区二区三| 小日子的在线观看免费第8集| 国产成a人无v码亚洲福利| 中文字幕在线观看的网站| 国产日韩精品一区二区三区在线| 三年中国中文观看免费播放| 亚洲免费观看高清完整版在线观看 | 久久久久久久久久久97| 狠狠色狠狠色综合日日五| 中文有码在线播放| 欧美一级国产精品| 国产高清在线| 久久影视电视剧免费网站| 久久www人成免费看片中文| 国产精品高清在线| 99精品视频在线免费播放 | 国产伦精品一区二区三区视频痴汉 | 成年人免费在线播放| 久久99精品一区二区三区| 在线观看免费看片| 久久久久成人黄色影片| 中文字幕在线观看成人| 懂色av影视一区二区三区| 国产又粗又猛又爽又黄的| 精品久久久影院| 婷婷色在线视频| 超碰日本道色综合久久综合| 妞干网免费在线视频| 91免费高清视频| 九九视频精品全部免费播放| 中文字幕中文字幕在线中心一区| 中文日韩欧美| 91亚洲精品久久久蜜桃借种| 91在线视频网址| 国产五月天婷婷| 欧美二区三区91| 韩国三级在线观看久| 国内精品久久久| 国产激情一区| 久久综合一区| 99亚洲伊人久久精品影院红桃| 中文字幕网av| 国产视频一区在线观看| 国产精品19乱码一区二区三区| 欧美体内she精视频| 色av男人的天堂免费在线| 久久91精品国产91久久跳| 成人免费毛片嘿嘿连载视频…| 久久久99国产精品免费| 午夜精品偷拍| 欧美国产日韩另类| 中文字幕第一区二区| 欧美激情亚洲综合| 亚洲精品二三区| 在线你懂的视频| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 国产精品蜜臀| 91传媒在线免费观看| 久久中文视频| 日本中文字幕二区| 中文字幕av在线一区二区三区| 亚洲精品午夜久久久久久久| 91精品久久久久久蜜臀| 在线国产情侣| 91免费看片网站| 色综合天天爱| 向日葵污视频在线观看| 国产精品高潮久久久久无| 波多野结衣电影在线播放| 日韩精品亚洲视频| a级片在线免费观看| 国产伦精品一区二区三区四区免费 | 亚洲成人网在线| 国产在线xxx| 精品国产一区二区三区四区vr| 在线成人欧美| 亚洲成人日韩在线| 欧美日韩中文字幕在线| 亚洲日本国产精品| 欧洲成人性视频| 国产精品一区二区三区av麻| 欧美三级理论片| 国产精品看片你懂得| 中文字幕一区2区3区| 久久综合五月天| 精品视频91| 欧美日韩精品在线一区二区| 成人国产亚洲欧美成人综合网| 国产一级性生活| 亚洲系列中文字幕| 久久91视频| 伊人色综合影院| 成人免费毛片app| 国产福利拍拍拍| 中文字幕av一区二区三区谷原希美| 久久av影院| 免费看av软件| 99久久精品免费看国产 | 色94色欧美sute亚洲线路一ni| 国产免费av高清在线| 国产欧美va欧美va香蕉在线| 黄页网站一区| 少妇大叫太粗太大爽一区二区| 欧美日韩一区二区三区四区| 日本福利在线| 超碰在线97av| 日韩激情视频在线观看| 视频国产一区二区| 精品亚洲一区二区三区在线观看| 欧洲精品一区二区三区| 中文字幕综合在线观看| av激情综合网| 亚洲系列第一页| 欧美做受高潮电影o| 欧美中文字幕一区二区| 亚洲怡红院在线| 色婷婷综合久久久中文一区二区 | 欧美人与性动交|