JAVA建構高并發商城秒殺系統——架構分析
面試場景
我們打算組織一個并發一萬人的秒殺活動,1元秒殺100個二手元牙刷,你給我說說解決方案。
秒殺/搶購業務場景
商品秒殺、商品搶購、群紅包、搶優惠劵、抽獎、......
秒殺/搶購業務特點
秒殺商品價格低廉、搶購商品很好|搶手、大幅推廣|廣為人知、瞬時售空、一般是定時上架、持續時間短、瞬時并發量高......
秒殺、搶購技術特點
讀多寫少、高并發、資源沖突
知道這些,恭喜你,獲得10分。
分析技術特點:
秒殺/搶購技術特點
- 1.讀多寫少
- 緩存
- 2.高并發
- 1.限流
- 2.負載均衡 (單體tomcat并發200完美勝任,突破五,六百就力不從心)
- 3.緩存
- 4.異步(将同步的并發請求轉換為異步)
- 5.隊列
- 3.資源沖突
- 資料庫鎖
- 分布式鎖
- 其他原子操作
- 樂觀鎖
- 悲觀鎖
- redis
- redis
- decr
- 原子操作
- 異步
- 原子操作和異步分為:
回答到這裡,恭喜你,獲得50分了,但是還沒有及格。
系統基本架構
日均PV隻有幾萬的企業管理系統
使用者量過千萬的中型技術社群
活躍使用者過億的大型購物網站
這三種都是這種架構:

一個系統基本架構
JAVA建構高并發商城秒殺系統——架構分析 - 程式員的成長之路
回答這一步,恭喜你,獲得80分
秒殺人群、并發規模的預估
1.為什麼要估算?
确定一個最終的技術選型以及伺服器容量
2.怎麼估算?
日并發估算的公式很很多
1) 平均并發使用者數為 C = nl/T
2) 并發使用者數峰值 C = C + 3 * 根号C
秒殺的并發規模就要根據公司活動曆時依賴的最高峰值再擴容。
這裡我們的并發需求在前面已經确定了。
我們打算組織一個并發1萬人的秒殺活動,1元秒殺100個二手牙刷。
10000個并發的架構
悲觀鎖:select * from 表名 for update,該使用者不送出,其他人都沒法操作
樂觀鎖:在表裡面加一個version字段,通過一個版本号去控制
悲觀鎖VS樂觀鎖:
1.響應速度
2.沖突頻率
3.重試代價
高并發情況下兩個鎖的結論:悲觀鎖速度更快!!!有時樂觀鎖偶然會比悲觀鎖低,但是在大資料的情況下,悲觀鎖會比樂觀鎖低!
悲觀鎖速度測試:
樂觀鎖速度測試:
關鍵字:自旋鎖(樂觀鎖下操作失敗的請求,在進行重試)
限流算法-令牌桶
限流算法-漏桶
nginx配置:
自身的一個漏桶限流方式,$binary_remote_addr,限流次元,表示對每一個ip進行限流,1r/s表示1秒一個
limit_req zone=preip,preip就是前面配置的。
秒殺的架構圖:
前端限流,Nginx限流,令牌桶限流,到資料庫→樂觀鎖或悲觀鎖防止超賣
喜歡的小夥伴們可以搜尋我們個人的微信公衆号“程式員的成長之路”點選關注或掃描下方二維碼
發表于
2018-09-18 11:47
程式員的成長之路
閱讀(11873)
評論(0)
編輯
收藏
舉報