成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

100W并發秒殺系統架構

開發 架構
在秒殺項目中需要集成Sentinel進行限流操作。在秒殺過程中冷門商品變為熱門商品時候,訪問服務流量瞬間激增,需要采用Sentinel進行限流,保護服務的穩定性。

[[406896]]

一 百萬并發秒殺概述

1.1 可能遇到問題

在一瞬間服務出現大量請求,服務可能會崩潰。

在秒殺商品時候,可能出現超賣。

1.2 秒殺的業務流程

秒殺的商品有熱點商品和非熱點商品,熱點商品可能流量占整個的90%.

后臺商品管理可以將商品加入到秒殺商品,根據商品訪問量分位熱點商品和非熱點商品。

用戶搶到商品支付,發貨商品。超時不付款,訂單取消。

二 秒殺架構

秒殺系統架構圖

  • 我們Java項目時用tomcat部署的。nginx的并發量能達到五萬,tomcat最優能支持1千。所以首要問題就是讓tomcat直接處理請求,減少tomcat處理請求。由于商品的詳情頁除了數量其他基本不改變。因此可以采用詳情頁放到nginx緩存中。還有就是考慮熱點商品的搶購能直接經過nginx處理不到服務端,這樣就完美解決了問題了。

Lua腳本對JWT校驗:

用戶請求到達nginx,用lua腳本進行jwt校驗,減少非法請求對服務器的訪問。從而減少服務器壓力。

2.1 靜態頁面處理

  • 因為秒殺商品的瀏覽量很高,而且商品的描述,價格,圖片,標題基本上是不變的。因此考慮用freemarker做商品靜態化。所以先考慮靜態頁面的生成,商品數量發生改變靜態頁面從新生成。

1. 后臺將設置商品成為秒殺商品流程:

  • 比如京東的秒殺都是一個時間點到另外一個時間點。當秒殺的時間點到了,需要從索引庫中刪除對應索引和刪除對應的靜態頁面。我們可以在商品添加秒殺時候,設置定時任務。然后定時任務到達后執行對應操作。在添加秒殺時候,更改數據庫中商品是處于秒殺,然后生成靜態頁面。

2. 商品數量修改,靜態頁面的同步(canal數據同步):

  • 使用canal對數據庫的表進行監控時候,當新增,刪除,編輯表中是數據時候,canal都能監控到。從而觸發canal書寫的Java服務,然后根據業務進行靜態頁面的修改。

3. 靜態頁面的生成和刪除:

  • 當商品變成秒殺商品,生成靜態頁面。當商品賣完或者變為普通商品,刪除靜態頁面。

2.3 將秒殺熱點數據隔離

  • 我們可以根據商品的瀏覽量判定當前商品是否位熱點數據。所以需要商品瀏覽記錄收集,和收集瀏覽記錄的分析。

2.3.1 日志收集

用戶訪問商品詳情,首先請求經過nginx,然后使用nginx和lua腳本對請求商品詳情路徑進行攔截,然后將請求商品數據發送到kafka。數據庫接受到kafka數據,完成商品瀏覽數據收集。

2.3.2 數據分析

Apache Druid訂閱Kafka從而獲取商品的訪問日志,druid能實時獲取商品訪問記錄。druid支持sql,對數據進行分析。找出熱點數據。

  1. # lua腳本發送給kafka日志格式 
  2.    "actime""2020‐4‐10 9:50:30",   
  3.    "uri""http://192.168.211.137/items/S1235433012716498944.html",   
  4.    "ip""119.123.33.231",    
  5.    "token""Bearer ITHEIMAOOPJAVAITCAST"  

2.3.3 熱點數據隔離

可以采用定時任務(elastic-job)實時查詢Druid,把近期訪問量最多的商品放入redis緩存中。緩存中數據如下:商品庫存,價格,名稱等。

備注:

用戶進行下單時候,在redis中就是熱點商品,走熱點下單。不在redis中不是熱點商品,走服務直接下單。

在將熱點商品放到redis中,需要根據商品的鎖定字段,將商品鎖定。然后再將商品信息放到redis中。用戶搶購商品和熱點商品放到redis中同時進行,導致庫存混亂。

2.4 熱點商品和非熱點商品搶購流程

需要判斷當前用戶對當前商品24小時內是否搶過。判斷搶購商品是冷商品還是熱門商品。判斷庫存是否充足。

1. 非熱點商品秒殺:

  • a 判定為非熱點數據,進入服務中進行下單系統。
  • b 對庫存進行判斷,如果庫存充足,進行下單。如果庫存不充足,事務回滾。
  • c 如果庫存充足,但是商品變為熱點商品。應將下單操作發送到kafka,然后變成熱點商品下單操作(防止商品庫存混亂)。
  • d 記錄該用戶搶的該商品,用于提示該用戶24小時不能搶該商品。

2. 熱點商品秒殺:

  • a lua腳本進行JWT校驗,判斷用戶是否登錄。
  • b 從redis查詢看該用戶是否搶了該商品(在搶購商品成功后,會將商品和用戶信息存儲到redis中)。
  • c 從redis熱點商品中查詢,商品是否為熱點商品。如果是熱點商品且庫存>0,熱點商品搶購流程。
  • d 判斷該用戶該商品是否處于排隊(用redis的incr自增來判斷當前用戶該商品是否重復排隊)。是,提示用戶正在排隊。否,直接排隊。e 訂單系統通過隊列訂閱讀取用戶下單信息,并進行下單。

三 流量監控

在秒殺項目中需要集成Sentinel進行限流操作。在秒殺過程中冷門商品變為熱門商品時候,訪問服務流量瞬間激增,需要采用Sentinel進行限流,保護服務的穩定性。

 

責任編輯:姜華 來源: 花花和Java
相關推薦

2019-09-16 09:34:39

2021-07-09 05:52:36

架構開發緩存

2020-10-14 07:20:53

高并發

2019-08-23 09:03:04

盤口數據數據庫緩存

2024-07-03 11:01:55

2018-09-15 04:59:01

2025-06-03 02:10:00

2024-09-05 21:24:02

數據庫查詢MySQLlimit

2023-11-27 18:07:05

Go并發編程

2024-08-12 09:43:42

2025-02-20 00:01:00

2011-04-06 14:50:05

SQL查詢效率

2025-01-02 09:17:37

2022-08-26 10:24:48

架構Golang

2019-07-30 11:17:18

系統數據安全

2016-06-28 10:13:04

華為開發者大賽

2025-04-08 05:00:00

2020-04-13 08:33:39

高并發秒殺系統

2022-11-16 17:10:25

MySQL數據事務

2021-08-03 14:05:51

Windows微軟軟件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 嫩草视频网 | 青草青草久热精品视频在线观看 | 国产视频精品区 | 国产91在线播放精品91 | 99国产精品久久久久老师 | 最新国产福利在线 | 91精品久久久久久久久久入口 | 黄网站在线观看 | 国产婷婷精品av在线 | 久草视| 亚洲视频在线免费观看 | 夜夜草 | 亚洲精品在线免费播放 | 欧美日韩久久 | 国产日韩一区二区三免费高清 | 免费中文字幕 | 久久久久久久久久久成人 | 中文字幕乱码一区二区三区 | 欧美天堂一区 | 午夜影视| 久久久综合精品 | 亚洲欧美v| 欧美中文在线 | 国产高清精品在线 | 成人在线视频免费观看 | 亚洲精品一区二区在线观看 | 国产精品久久久久久久久免费 | 欧美自拍第一页 | 国产午夜精品一区二区 | 91资源在线 | 超碰美女在线 | 亚洲国产网 | 亚洲一区二区三区在线视频 | 亚洲精品成人网 | 欧美一卡二卡在线观看 | 亚洲美乳中文字幕 | 黄频免费 | 99久久免费精品 | 国产精品免费视频一区 | 亚洲一区二区 | 欧美一级毛片免费观看 |