JAVA構建高並發商城秒殺系統——架構分析


面試場景

我們打算組織一個並發一萬人的秒殺活動,1元秒殺100個二手元牙刷,你給我說說解決方案。

 

秒殺/搶購業務場景

商品秒殺、商品搶購、群紅包、搶優惠劵、抽獎、......

秒殺/搶購業務特點

秒殺商品價格低廉、搶購商品很好|搶手、大幅推廣|廣為人知、瞬時售空、一般是定時上架、持續時間短、瞬時並發量高......

秒殺、搶購技術特點

讀多寫少、高並發、資源沖突

 

知道這些,恭喜你,獲得10分。

 

分析技術特點:

秒殺/搶購技術特點

  • 1.讀多寫少   

    • 緩存

  • 2.高並發   

    • 1.限流

    • 2.負載均衡 (單體tomcat並發200完美勝任,突破五,六百就力不從心)

    • 3.緩存

    • 4.異步(將同步的並發請求轉換為異步)

    • 5.隊列

  • 3.資源沖突   

    • 數據庫鎖

    • 分布式鎖

    • 其他原子操作

    • 樂觀鎖

    • 悲觀鎖

    • redis

    • redis

    • decr

    • 原子操作

    • 異步

    • 原子操作和異步分為:

 

回答到這里,恭喜你,獲得50分了,但是還沒有及格。

 

系統基本架構

日均PV只有幾萬的企業管理系統

用戶量過千萬的中型技術社區

活躍用戶過億的大型購物網站

 

這三種都是這種架構:

一個系統基本架構

 

 

回答這一步,恭喜你,獲得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限流,令牌桶限流,到數據庫→樂觀鎖或悲觀鎖防止超賣

喜歡的小伙伴們可以搜索我們個人的微信公眾號“程序員的成長之路”點擊關注或掃描下方二維碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM