秒殺系統解決高併發?(從每一層級去考慮)
瀏覽器端(js):
頁面靜態化:將活動頁面上的所有可以靜態的元素全部靜態化,做圖片服務器分離,並儘量減少動態元素。通過CDN來抗峰值。 禁止重複提交:用戶提交之後按鈕置灰,禁止重複提交 用戶限流:在某一時間段內只允許用戶提交一次請求,比如可以採取IP限流項目後端方案:
1、web層
如果請求過多,判定web服務器的壓力過大,增加前端的web服務器,做負載均衡
2、服務層
如果請求的靜態頁面不卡了,但是請求的動態數據還是卡,說明mysql處理的請求太多了,即當秒殺的用戶量很大時,即使每個用戶只有一個請求,到服務層的請求數量還是很大。比如我們有100W用戶同時搶100臺手機,服務層併發請求壓力很大。這時可採用以下兩種辦法:
3、數據庫層
數據庫層是最脆弱的一層,一般在應用設計時在上游就需要把請求攔截掉,數據庫層只承擔“能力範圍內”的訪問請求,所以,上面通過在服務層引入隊列或緩存,讓最底層的數據庫高枕無憂。若是還是不行,則數據庫也可以做主從,讀寫分離增加其能力範圍內的查詢。
其實很多時候看文字並不能很好的轉換成實際應用案例,很多人需要的是我手把手的教你,究竟怎麼去提升所謂併發量!
珍藏了一份mu課網Java併發編程與高併發解決方案(完整視頻+源碼+筆記)
先詳細講解併發編程的基礎(這一步很重要在代碼中有併發編程的代碼思維和做企業項目只有crud的思維是很不同的!這一步不能缺失!深入併發編程的原理!)