自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

100W并發(fā)秒殺系統(tǒng)架構(gòu)

開發(fā) 架構(gòu)
在秒殺項(xiàng)目中需要集成Sentinel進(jìn)行限流操作。在秒殺過程中冷門商品變?yōu)闊衢T商品時(shí)候,訪問服務(wù)流量瞬間激增,需要采用Sentinel進(jìn)行限流,保護(hù)服務(wù)的穩(wěn)定性。

[[406896]]

一 百萬并發(fā)秒殺概述

1.1 可能遇到問題

在一瞬間服務(wù)出現(xiàn)大量請求,服務(wù)可能會崩潰。

在秒殺商品時(shí)候,可能出現(xiàn)超賣。

1.2 秒殺的業(yè)務(wù)流程

秒殺的商品有熱點(diǎn)商品和非熱點(diǎn)商品,熱點(diǎn)商品可能流量占整個(gè)的90%.

后臺商品管理可以將商品加入到秒殺商品,根據(jù)商品訪問量分位熱點(diǎn)商品和非熱點(diǎn)商品。

用戶搶到商品支付,發(fā)貨商品。超時(shí)不付款,訂單取消。

二 秒殺架構(gòu)

秒殺系統(tǒng)架構(gòu)圖

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

Lua腳本對JWT校驗(yàn):

用戶請求到達(dá)nginx,用lua腳本進(jìn)行jwt校驗(yàn),減少非法請求對服務(wù)器的訪問。從而減少服務(wù)器壓力。

2.1 靜態(tài)頁面處理

  • 因?yàn)槊霘⑸唐返臑g覽量很高,而且商品的描述,價(jià)格,圖片,標(biāo)題基本上是不變的。因此考慮用freemarker做商品靜態(tài)化。所以先考慮靜態(tài)頁面的生成,商品數(shù)量發(fā)生改變靜態(tài)頁面從新生成。

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

  • 比如京東的秒殺都是一個(gè)時(shí)間點(diǎn)到另外一個(gè)時(shí)間點(diǎn)。當(dāng)秒殺的時(shí)間點(diǎn)到了,需要從索引庫中刪除對應(yīng)索引和刪除對應(yīng)的靜態(tài)頁面。我們可以在商品添加秒殺時(shí)候,設(shè)置定時(shí)任務(wù)。然后定時(shí)任務(wù)到達(dá)后執(zhí)行對應(yīng)操作。在添加秒殺時(shí)候,更改數(shù)據(jù)庫中商品是處于秒殺,然后生成靜態(tài)頁面。

2. 商品數(shù)量修改,靜態(tài)頁面的同步(canal數(shù)據(jù)同步):

  • 使用canal對數(shù)據(jù)庫的表進(jìn)行監(jiān)控時(shí)候,當(dāng)新增,刪除,編輯表中是數(shù)據(jù)時(shí)候,canal都能監(jiān)控到。從而觸發(fā)canal書寫的Java服務(wù),然后根據(jù)業(yè)務(wù)進(jìn)行靜態(tài)頁面的修改。

3. 靜態(tài)頁面的生成和刪除:

  • 當(dāng)商品變成秒殺商品,生成靜態(tài)頁面。當(dāng)商品賣完或者變?yōu)槠胀ㄉ唐?,刪除靜態(tài)頁面。

2.3 將秒殺熱點(diǎn)數(shù)據(jù)隔離

  • 我們可以根據(jù)商品的瀏覽量判定當(dāng)前商品是否位熱點(diǎn)數(shù)據(jù)。所以需要商品瀏覽記錄收集,和收集瀏覽記錄的分析。

2.3.1 日志收集

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

2.3.2 數(shù)據(jù)分析

Apache Druid訂閱Kafka從而獲取商品的訪問日志,druid能實(shí)時(shí)獲取商品訪問記錄。druid支持sql,對數(shù)據(jù)進(jìn)行分析。找出熱點(diǎn)數(shù)據(jù)。

  1. # lua腳本發(fā)送給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 熱點(diǎn)數(shù)據(jù)隔離

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

備注:

用戶進(jìn)行下單時(shí)候,在redis中就是熱點(diǎn)商品,走熱點(diǎn)下單。不在redis中不是熱點(diǎn)商品,走服務(wù)直接下單。

在將熱點(diǎn)商品放到redis中,需要根據(jù)商品的鎖定字段,將商品鎖定。然后再將商品信息放到redis中。用戶搶購商品和熱點(diǎn)商品放到redis中同時(shí)進(jìn)行,導(dǎo)致庫存混亂。

2.4 熱點(diǎn)商品和非熱點(diǎn)商品搶購流程

需要判斷當(dāng)前用戶對當(dāng)前商品24小時(shí)內(nèi)是否搶過。判斷搶購商品是冷商品還是熱門商品。判斷庫存是否充足。

1. 非熱點(diǎn)商品秒殺:

  • a 判定為非熱點(diǎn)數(shù)據(jù),進(jìn)入服務(wù)中進(jìn)行下單系統(tǒng)。
  • b 對庫存進(jìn)行判斷,如果庫存充足,進(jìn)行下單。如果庫存不充足,事務(wù)回滾。
  • c 如果庫存充足,但是商品變?yōu)闊狳c(diǎn)商品。應(yīng)將下單操作發(fā)送到kafka,然后變成熱點(diǎn)商品下單操作(防止商品庫存混亂)。
  • d 記錄該用戶搶的該商品,用于提示該用戶24小時(shí)不能搶該商品。

2. 熱點(diǎn)商品秒殺:

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

三 流量監(jiān)控

在秒殺項(xiàng)目中需要集成Sentinel進(jìn)行限流操作。在秒殺過程中冷門商品變?yōu)闊衢T商品時(shí)候,訪問服務(wù)流量瞬間激增,需要采用Sentinel進(jìn)行限流,保護(hù)服務(wù)的穩(wěn)定性。

 

責(zé)任編輯:姜華 來源: 花花和Java
相關(guān)推薦

2019-09-16 09:34:39

2021-07-09 05:52:36

架構(gòu)開發(fā)緩存

2020-10-14 07:20:53

高并發(fā)

2019-08-23 09:03:04

盤口數(shù)據(jù)數(shù)據(jù)庫緩存

2024-07-03 11:01:55

2018-09-15 04:59:01

2024-09-05 21:24:02

數(shù)據(jù)庫查詢MySQLlimit

2023-11-27 18:07:05

Go并發(fā)編程

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

架構(gòu)Golang

2019-07-30 11:17:18

系統(tǒng)數(shù)據(jù)安全

2016-06-28 10:13:04

華為開發(fā)者大賽

2025-04-08 05:00:00

2020-04-13 08:33:39

高并發(fā)秒殺系統(tǒng)

2022-11-16 17:10:25

MySQL數(shù)據(jù)事務(wù)

2021-08-03 14:05:51

Windows微軟軟件

2023-02-26 17:24:53

8G內(nèi)存線程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號