java 高並發操作實例-秒殺

java 高併發操作實例-秒殺

業務大致流程:

java 高併發操作實例-秒殺

系統時間獲取

1. 原因

1.1 用戶會大量刷新頁面

1.2 CDN存放的是大量的靜態頁面,靜態css,js資源

Tips:CDN的理解:內容分發網絡

1.2.1 用來加速用戶獲取數據的系統上面

1.2.2 部署用戶最近的網絡節點上面-城域網,主幹網絡

1.2.3 命中CDN不需要訪問後端服務器

1.2.4 互聯網自己搭建或租用

  1. 獲取系統時間的接口不要進行優化
  2. 秒殺地址接口的分析
  3. 1.表現
  4. 1.1 無法使用CDN的緩存
  5. 1.2 適合服務器端的緩存:redis等
  6. 1.3 一致性維護成本比較低

2.原因

2.1 cdn寄存在網絡節點上面,然而秒殺接口的數據又是動態的,所以無法進行cdn的緩存

3.解決方法

java 高併發操作實例-秒殺

4.優弱勢分析

4.1 mysql的弱勢

4.1.1 java控制事務行為分析—串式循環,等待行鎖的操作

4.2 網絡延遲

4.3 GC的延遲

5.解決方案點

5.1 行級鎖在commit之後釋放

5.2 優化方向減少行級鎖持有時間

5.3 具體方案

5.3.1 把客戶端的邏輯放在mysql服務器,避免網絡延遲和GC的影響

5.3.2 定製mysql的方案:update /auto_commit/ 需要修改mysql源碼

5.3.3 使用存儲過程:整個事務在mysql端進行完成

  1. 總結
  2. 6.1 前端控制:暴露接口,防按鈕重複
  3. 6.2 動靜態數據:cdn緩存,後端緩存
  4. 6.3 事務競爭優化:減少事務鎖時間
java 高併發操作實例-秒殺


分享到:


相關文章: