高並發秒殺系統--秒殺高並發分析與解決方案


[什么地方會產生高並發]

1.高並發導致性能問題的理論知識:

  1.1.訪問Mysql產生的網絡延遲

  1.2.Mysql本身的性能問題,可以扛4W的QPS

  1.3.JVM GC的問題

2.場景一:秒殺接口URL的暴露請求 --> 用戶頻繁點擊秒殺按鈕產生

該業務中每次請求都會根據id查詢秒殺產品 --> 數據庫訪問 --> 后續logic(秒殺開啟暴露秒殺按鈕,秒殺未開啟顯示剩余開啟時間\秒殺結束)

該場景的特點:數據訪問對象相對變化小(秒殺產品信息不回頻繁變化),性能瓶頸主要來自Mysql

解決方案:使用Redis緩存,將秒殺產品存儲在Redis中,當Redis中存在時不訪問Mysql

技術點:[JRedis的使用,API] [ProtoBuff序列化,提高效率,節省空間] [數據一致性維護,通過Redis超時機制]

深入思考:[在實際場景中Redis集群維護數據一致性的解決方案] 參考 - http://blog.csdn.net/u014490157/article/details/52244378

3.Redis應用的編碼示例[TODO]

4.場景二:執行秒殺操作 --> 插入購買明細+減庫存

減庫存是對seckill表中seckill_id同行數據的並發請求,產生競爭條件

該操作在一個事務中,根據mysql事務的行級鎖機制產生阻塞

優化的目標就是減少單個事務對行級鎖持有的時間

對持有時間的影響因素:網絡延遲,大量並發訪問產生java對象引起的GC(GC原理,新生代老年代)

解決方案:

  1.調整事務方法中sql執行的順序,將產生競爭條件的無關聯sql后置

  2.將后台業務放到交給Mysql存儲過程,僅適用特定不核心的業務,因為:阿里技術手冊中約定 - 7. 【強制】禁止使用存儲過程,存儲過程難以調試和擴展,更沒有移植性。

  3.企業級高並發解決方案(原子計數器+消息隊列+分布式),技術成本,維護數據一致性

5.Mysql存儲過程的編寫、使用Mybatis調用Mysql存儲過程[TODO]

 

[互聯網公司的常見系統架構和部署方式]

1.分庫分表技術:阿里TDDL,中間件

2.統計分析:Hadoop,ElasticSearch

 


免責聲明!

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



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