天天看點

JAVA建構高并發商城秒殺系統——架構分析 - 程式員的成長之路

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

面試場景

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

秒殺/搶購業務場景

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

秒殺/搶購業務特點

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

秒殺、搶購技術特點

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

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

分析技術特點:

秒殺/搶購技術特點

  • 1.讀多寫少   
    • 緩存
  • 2.高并發   
    • 1.限流
    • 2.負載均衡 (單體tomcat并發200完美勝任,突破五,六百就力不從心)
    • 3.緩存
    • 4.異步(将同步的并發請求轉換為異步)
    • 5.隊列
  • 3.資源沖突   
    • 資料庫鎖
    • 分布式鎖
    • 其他原子操作
    • 樂觀鎖
    • 悲觀鎖
    • redis
    • redis
    • decr
    • 原子操作
    • 異步
    • 原子操作和異步分為:

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

系統基本架構

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

使用者量過千萬的中型技術社群

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

這三種都是這種架構:

JAVA建構高并發商城秒殺系統——架構分析 - 程式員的成長之路

一個系統基本架構

JAVA建構高并發商城秒殺系統——架構分析 - 程式員的成長之路

回答這一步,恭喜你,獲得80分

秒殺人群、并發規模的預估

1.為什麼要估算?

确定一個最終的技術選型以及伺服器容量

2.怎麼估算?

日并發估算的公式很很多

1) 平均并發使用者數為 C = nl/T

2) 并發使用者數峰值 C = C + 3 * 根号C

秒殺的并發規模就要根據公司活動曆時依賴的最高峰值再擴容。

這裡我們的并發需求在前面已經确定了。

我們打算組織一個并發1萬人的秒殺活動,1元秒殺100個二手牙刷。

10000個并發的架構

JAVA建構高并發商城秒殺系統——架構分析 - 程式員的成長之路

悲觀鎖:select * from 表名 for update,該使用者不送出,其他人都沒法操作

樂觀鎖:在表裡面加一個version字段,通過一個版本号去控制

悲觀鎖VS樂觀鎖:

1.響應速度

2.沖突頻率

3.重試代價

高并發情況下兩個鎖的結論:悲觀鎖速度更快!!!有時樂觀鎖偶然會比悲觀鎖低,但是在大資料的情況下,悲觀鎖會比樂觀鎖低!

悲觀鎖速度測試:

JAVA建構高并發商城秒殺系統——架構分析 - 程式員的成長之路

樂觀鎖速度測試:

JAVA建構高并發商城秒殺系統——架構分析 - 程式員的成長之路

關鍵字:自旋鎖(樂觀鎖下操作失敗的請求,在進行重試)

限流算法-令牌桶

JAVA建構高并發商城秒殺系統——架構分析 - 程式員的成長之路

限流算法-漏桶

JAVA建構高并發商城秒殺系統——架構分析 - 程式員的成長之路

nginx配置:

JAVA建構高并發商城秒殺系統——架構分析 - 程式員的成長之路

自身的一個漏桶限流方式,$binary_remote_addr,限流次元,表示對每一個ip進行限流,1r/s表示1秒一個

JAVA建構高并發商城秒殺系統——架構分析 - 程式員的成長之路

limit_req zone=preip,preip就是前面配置的。

秒殺的架構圖:

JAVA建構高并發商城秒殺系統——架構分析 - 程式員的成長之路

前端限流,Nginx限流,令牌桶限流,到資料庫→樂觀鎖或悲觀鎖防止超賣

喜歡的小夥伴們可以搜尋我們個人的微信公衆号“程式員的成長之路”點選關注或掃描下方二維碼

發表于

2018-09-18 11:47 

程式員的成長之路 

閱讀(11873) 

評論(0) 

編輯 

收藏 

舉報