基於spring boot高性能高並發秒殺系統方案及優化 第一部分
- 2019 年 12 月 2 日
- 筆記
版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/weixin_43126117/article/details/94396352
項目源碼:https://github.com/yingyingqiqi/flash
這是電商系統的一個模組,主要涉及秒殺這個應用場景,但是,裡面的知識卻超越了秒殺,涉及到高並發、高性能的系統構建(快取+非同步+限流)
閑扯:這篇文章是對慕課網「Java秒殺系統方案優化 高性能高並發實戰」課程的學習總結,以及自己的一些看法和改良,很久之前看的課程了,現在二刷,並加上一些示意圖,方便自己或者他人理解秒殺涉及到的技術。
文章整體思路介紹:
1.完成一些基礎的工具類開發,分散式會話、原生redis的API集成、參數的效驗及解析、秒殺的初步構想。
2.秒殺的優化,各種加快取、非同步化、防刷限流。
3.這篇文章不講程式碼的實現,主要講思路,給出示意圖,方便理解。
技術棧:spring+ spring boot+ mybatis+ +redis+ rabbitmq+ 前端技術知識
項目初步搭建
基於Maven的Spring-Boot工程框架進行項目框架搭建, 並集成Thymeleaf服務端頁面模板,集成redis、集成mybatis,主要導jar包,複製粘貼配置文件,再設計實體類,設計資料庫,這些就看看程式碼吧。
重點:redis的API封裝,(設計模式適配器模式)

redis+redis客戶端封裝
適配器模式:在設計模式中,適配器模式(英語:adapter pattern)有時候也稱包裝樣式或者包裝(wrapper)。將一個類的介面轉接成用戶所期待的。一個適配使得因介面不兼容而不能在一起工作的類能在一起工作,做法是將類自己的介面包裹在一個已存在的類中。
這個keyprefix—-類適配器模式,適配器繼承自己實現的類(一般多衝繼承),圖上面有很詳細的備註,自己根據圖和程式碼摸索一番。
重點:通用異常和通用響應
基於 SpringCloud 微服務架構的廣告系統(第一部分:eureka、zuul、通用模組)寫的很清楚,這就不再次介紹了。
實現用戶登錄以及分散式session功能
為了用戶登陸數據傳輸和存儲的安全性,實現密碼兩次MD5入庫,利用Redis實現分散式Session。為後面的秒殺功能提供必備的用戶資訊。
重點:集成Jsr303參數效驗
1.自定義效驗註解IsModile。(可以參考NotNull自帶的註解)
2.實現ConstraintValidator介面,先改initialze(IsModile a)屬性,及初始化驗證器。再實現實際驗證邏輯

參數效驗
重點:分散式session的設計
1.用戶請求登陸頁面,驗證用戶名密碼,並通過資料庫檢查是否正確
2.獲取用戶對象資訊(user),及隨機分配一串字元(token),存入redis資料庫中,鍵token值user
3.用戶請求其他頁面,攜帶token,既可以訪問系統,其他頁面程式通過token獲取redis的用戶資訊(user)
(也就是我們沒有使用servlet自帶的session,主要就是session不知道怎麼跨伺服器傳)

分散式會話
重點:自定義參數注入(參數解析器)
1.使用場景:用戶攜帶token,程式需要user對象,難道每個程式都寫上根據token獲取user程式碼嗎?參數解析器,就可以自動注入user對象到controller方法中。
2.實現HandlerMethodArgumentResolver介面,將實現類注入springMVC容器中。

參數解析器(自定義參數注入)
秒殺功能開發及管理後台
實現秒殺的交互設計和秒殺功能的前端和後台,隨著後期優化,秒殺前後端功能也要進行相應改造(我們會通過演進的方式一步一步的進行優化)。這些就看看程式碼,不是很難,純粹的CRUD操作。兩個重點的介面,商品列表、商品詳情、商品秒殺介面。
未優化前
