中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

高并發下的架構有哪些解決方案

發布時間:2020-07-27 11:54:29 來源:億速云 閱讀:153 作者:Leah 欄目:編程語言

高并發下的架構有哪些解決方案?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

 

一、業務要求及痛點分析

 

紅包雨項目屬于抽獎類系統的一種,它要求在某段時間內隨機派發獎品,用戶搶紅包參與活動。這個業務由管理后臺、用戶前臺和開發平臺構成。其中管理后臺需要實現用戶管理、獎品管理、活動管理、中獎統計等功能;用戶前臺用于注冊登錄、參與抽獎、個人中心查看中獎信息等。開發平臺包含微服務架構體系、注冊與服務發現Nacos、部署平臺、接口管理Swagger等。

 

由于抽獎系統常常涉及到大批用戶的點擊涌入,怎樣設計系統以達到高并發情況下的及時響應是本項目的重中之重。同時抽獎的獎品數量需要精確控制,不允許出現設置了5個獎品,最終6人中獎這種類似的問題。同時,在活動時間段內,管理員設置好的獎品如何投放?

紅包何時出現?獎品什么時候可以被抽中?這些都涉及到投放策略的優化。

 

二、庫存控制及核心流程

 

令牌桶算法可以把請求平均分散在時間段內,是使用較為廣泛的限流算法。我們可以把令牌桶算法應用到紅包雨業務案例中。這時候,令牌相當于獎品票據;令牌桶相當于獎品庫存;正常業務相當于中獎;限流相當于未中獎。同時要注意,有多少個獎品,就生成多少個令牌(時間戳),未中獎返還令牌。假設活動時間間隔太短,獎品太多,極有可能產生的時間戳發生重復。為了解決這個問題,我們需要額外附加一個隨機因子,將( 時間戳*1000+3位隨機數)作為令牌,抽獎時將抽中的令牌除以1000來還原真實的時間戳。

 

最后,將拿出令牌、判斷時間、放回令牌的操作下沉到Redis服務器端,利用Lua腳本避免出現插隊導致的令牌順序被打亂。通過這些操作和解決方案,相信可以避免打亂獎品令牌造成扎堆出現的問題。

 

三、發散思維

 

使用Lua腳本,將抽獎的邏輯從Java端移入Redis服務器端,作為一個整體函數暴露給Java調用,一方面實現中獎邏輯的原子性,另一方面減少了Java服務器與Redis服務器之間的通信次數,性能會得到提升。要實現活動隨時暫停,可以新增一個接口,該接口修改Redis緩存中的活動狀態。抽獎接口邏輯中增加暫停狀態判斷。如果是暫停,返回給前臺以提示。要實現多種投放策路,可以修改令牌生成部分代碼。按遞增、遞減、正態分布等多種函數生成時間戳。

 

看完上述內容,你們掌握高并發下的架構有哪些解決方案的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

思南县| 大足县| 嵊泗县| 东乡族自治县| 山西省| 安义县| 浮山县| 旅游| 渝中区| 越西县| 遂川县| 合水县| 义乌市| 阳泉市| 清流县| 班戈县| 容城县| 萝北县| 济宁市| 拉萨市| 天水市| 平乡县| 潜山县| 丹阳市| 白山市| 耿马| 海原县| 特克斯县| 昌宁县| 江津市| 枞阳县| 台湾省| 荣成市| 时尚| 昭平县| 临海市| 壶关县| 惠东县| 长汀县| 丰都县| 镶黄旗|