以下內(nèi)容來自QCon某高可用架構(gòu)群聊天記錄整理背景:有某個(gè)朋友諮詢微信紅包的架構(gòu),在官方或非官方同學(xué)的解釋和討論中得出以下討論內(nèi)容,在此期間有多個(gè)同學(xué)發(fā)紅包做現(xiàn)網(wǎng)演算法測試。
搶紅包過程
當(dāng)有人在群組裡發(fā)了一個(gè)N人的紅包,總金額M元,後臺大概發(fā)生的事情如下:
一、發(fā)紅包後臺操作:
在數(shù)據(jù)庫中增加一條紅包記錄,儲(chǔ)存到CKV,設(shè)定過期時(shí)間;
在Cache(可能是騰訊內(nèi)部kv資料庫,基於內(nèi)存,有落地,有內(nèi)核態(tài)網(wǎng)絡(luò)處理模組,以內(nèi)核模組形式提供服務(wù)))中增加一條記錄,存儲(chǔ)搶紅包的人數(shù)N
二、搶紅包後臺操作:
搶紅包分為搶和拆,搶操作在Cache層完成,透過原子減操作進(jìn)行紅包數(shù)遞減,到0 就表示搶光了,最終實(shí)際進(jìn)入後臺拆操作的量不大,透過操作的分離將無效請求直接擋在Cache層外面。這裡的原子減操作並不是真正意義上的原子減操作,是 其Cache層提供的CAS,透過比較版本號不斷嘗試,存在一定程度上的衝突,衝突的用戶會(huì)放行,讓其進(jìn)入下一步拆的操作,這也解釋了為啥有用戶搶到了拆 ? ? 開發(fā)現(xiàn)領(lǐng)完了的狀況。
拆紅包在資料庫完成,透過資料庫的事務(wù)操作累加已經(jīng)領(lǐng)取的數(shù)量和金額,插入一條領(lǐng)取 ? ? 流水,入帳為非同步操作,這也解釋了為啥在春節(jié)期間紅包領(lǐng)取後在餘額中看不到。拆的時(shí)候會(huì)即時(shí)計(jì)算金額,其金額為1分到剩餘平均值2倍之間隨機(jī)數(shù),一個(gè)總金 ? ? 額為M元的紅包,最大的紅包為 M * 2 /N(且不會(huì)超過M),拆了紅包後會(huì)更新剩餘金額和個(gè)數(shù)。財(cái)付通以20萬筆每秒入帳準(zhǔn)備,實(shí)際只到8萬每秒。
FAQ
既然在搶的時(shí)候有原子減了就不應(yīng)該出現(xiàn)搶到了拆開沒有的情況?
? ? 這裡的原子減並不是真正意義上的原子操作,是Cache層提供的CAS,透過比較版本號不斷嘗試。
cache和db掛了怎麼辦?
? ? 主備 +對帳
有沒有紅包個(gè)數(shù)沒了,但餘額還有狀況?
? ? 沒有,程式最後會(huì)有一個(gè)take all操作以及一個(gè)非同步對帳保障。
為什麼要分離搶和拆?
總思路是設(shè)定多層過濾網(wǎng),層層篩選,層層減少流量和壓力。這個(gè)設(shè)計(jì)最初是因?yàn)閾尣僮魇菢I(yè)務(wù)層,拆是入帳操作,一個(gè)操作太重了,中斷率高。 ? ? 從介面層面看,第一個(gè)介面純快取操作,搞壓能力強(qiáng),一個(gè)簡單查詢Cache擋住了絕大部分用戶,做了第一道篩選,所以大部分人會(huì)看到已經(jīng)搶完了的提示。
搶到紅包後再發(fā)紅包或是提現(xiàn),這裡有什麼策略嗎?
? ? 大額優(yōu)先入帳策略
有沒有從數(shù)據(jù)上證明每個(gè)紅包的機(jī)率是不是均等?
? ? 不是絕對均等,就是一個(gè)簡單的拍腦袋演算法。
拍腦袋演算法,會(huì)不會(huì)出現(xiàn)兩個(gè)最佳?
? ? 會(huì)出現(xiàn)金額一樣的,但是手氣最佳只有一個(gè),先搶到的那個(gè)最佳。
發(fā)紅包人的錢會(huì)不會(huì)凍結(jié)?
? ? 是直接即時(shí)扣掉,不是凍結(jié)。
採用即時(shí)算出金額是出於什麼考慮?
? ? 即時(shí)效率更高,預(yù)算才效率低。預(yù)算還要佔(zhàn)額外儲(chǔ)存。因?yàn)榧t包只佔(zhàn)一筆記錄而且有效期限就幾天,所以不需要太多空間。就算壓力大時(shí),水平擴(kuò)展機(jī)器是。
測試二:知乎使用者「馬景銠」的實(shí)驗(yàn):
這裡給出一份100樣本的調(diào)查抽樣樣本數(shù)據(jù),並提出自己的猜測。
1. 錢包錢數(shù)滿足截尾常態(tài)隨機(jī)數(shù)分佈。大致為在截尾常態(tài)分佈中取隨機(jī)數(shù),並用其求和數(shù)除以總價(jià)值,得到修正因子,再用修正因子乘上所有的隨機(jī)數(shù),得到紅包價(jià)值。
這種分佈意味著:低於平均值的紅包多,但是離平均值不遠(yuǎn);高於平均值的紅包少,但是遠(yuǎn)大於平均值的紅包偏多。
圖1. 錢包價(jià)值與其頻率分佈直方圖及其正態(tài)擬合
但看分佈直方圖並不能推出它符合正態(tài)分佈,但是考慮到程序的簡潔性和隨機(jī)數(shù)的合理性,這是最合乎情理的一種猜測。
2. 越是後面的錢包,價(jià)值普遍更高
圖2. 錢包序列數(shù)與其價(jià)值關(guān)係曲線
從圖2的線性擬合紅線可以看到,錢包價(jià)值的整體變化趨勢是在慢慢增大,其變化範(fàn)圍大約是一個(gè)綠色虛線上下界劃出的「通道」。 (曲線可以被圍在這麼一個(gè)正合乎常規(guī)的「通道」中,也從側(cè)面反映了規(guī)律1的合理性,說明了並不是均勻分佈的隨機(jī)數(shù))
從另一個(gè)平均數(shù)的圖中也可以看出這一規(guī)律。
圖3. 平均數(shù)隨序列數(shù)的變化曲線
在樣本中,1000價(jià)值的錢包被分成100份,均值為10。然而在圖3我們可以看到在最後一個(gè)錢包之前,平均數(shù)一直低於10,這就說明了一開始的錢包價(jià)值偏低,一直被後期的錢包價(jià)值拉著往上走,後期的錢包價(jià)值更高。
3. 當(dāng)然平均數(shù)的圖還可以透露出另一個(gè)規(guī)律,那就是最後的那一個(gè)人往往容易走運(yùn)抽得比較多。因?yàn)樽钺崮且粋€(gè)人是錢包剩下多少就拿多少的,而之前所有人的平均數(shù)都低於10,所以至少保證了最後一個(gè)人會(huì)高於平均值。在本樣本中,98號錢包抽到35,最後一份錢包抽到46。
綜上,根據(jù)樣本猜測:
1. 抽到的錢大多時(shí)候跟別人一樣少,但一旦一多,就容易多很多。
2. 越是抽後面的錢包,錢越容易多。
3. 最後一個(gè)人往往容易撞大運(yùn)。

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

抖音網(wǎng)頁版的登錄入口是https://www.douyin.com/。登錄步驟包括:1.打開瀏覽器;2.輸入網(wǎng)址https://www.douyin.com/;3.點(diǎn)擊“登錄”按鈕並選擇登錄方式;4.輸入賬號密碼;5.完成登錄。網(wǎng)頁版提供了瀏覽、搜索、互動(dòng)、上傳視頻和個(gè)人主頁管理等功能,具有大屏幕體驗(yàn)、多任務(wù)處理、便捷的賬號管理和數(shù)據(jù)統(tǒng)計(jì)等優(yōu)勢。

拷貝漫畫無疑是一個(gè)不容錯(cuò)過的寶藏。在這裡,你可以找到各種風(fēng)格的籃球漫畫,從熱血?jiǎng)?lì)志的競技故事,到輕鬆幽默的日常喜劇,應(yīng)有盡有。無論是想重溫經(jīng)典,還是想發(fā)掘新作,拷貝漫畫都能滿足你的需求。通過拷貝漫畫提供的正版在線閱讀入口,你將告別盜版資源的困擾,享受高清流暢的閱讀體驗(yàn),更能支持你喜愛的漫畫作者,為正版漫畫的發(fā)展貢獻(xiàn)一份力量。

選擇UC瀏覽器還是QQ瀏覽器取決於你的需求:1.UC瀏覽器適合追求快速加載和豐富娛樂功能的用戶;2.QQ瀏覽器適合需要穩(wěn)定性和與騰訊產(chǎn)品無縫連接的用戶。

結(jié)合 2025 年最新行業(yè)動(dòng)態(tài)與多維度評測數(shù)據(jù),以下為綜合排名前十的 AI 寫作軟件推薦,涵蓋通用創(chuàng)作、學(xué)術(shù)研究、商業(yè)營銷等主流場景,同時(shí)兼顧中文優(yōu)化與本地化服務(wù):

奈斯漫畫,一個(gè)致力於為漫畫愛好者打造的沉浸式閱讀體驗(yàn)平臺,匯聚了海量國內(nèi)外優(yōu)質(zhì)漫畫資源。它不僅僅是一個(gè)漫畫閱讀平臺,更是一個(gè)連接漫畫家與讀者、分享漫畫文化的社區(qū)。通過簡潔直觀的界面設(shè)計(jì)和強(qiáng)大的搜索功能,奈斯漫畫讓你能夠輕鬆找到心儀的作品,享受流暢舒適的閱讀體驗(yàn)。告別漫長的等待和繁瑣的操作,即刻進(jìn)入奈斯漫畫的世界,開啟你的漫畫之旅吧!

蛙漫漫畫,憑藉其豐富多元的漫畫資源和便捷流暢的在線閱讀體驗(yàn),已成為眾多漫畫愛好者的首選。它就像一個(gè)充滿活力的池塘,源源不斷地湧現(xiàn)出新鮮有趣的故事,等待著你去發(fā)現(xiàn)和探索。蛙漫漫畫涵蓋了各種題材,從熱血冒險(xiǎn)到甜蜜戀愛,從奇幻科幻到懸疑推理,無論你喜歡哪種類型,都能在這裡找到心儀的作品。其簡潔直觀的界面設(shè)計(jì),更讓你能夠輕鬆上手,快速找到想看的漫畫,沉浸在精彩紛呈的漫畫世界中。

在這裡,您可以盡情暢遊於浩瀚的漫畫海洋,探索各種題材和風(fēng)格的作品,從熱血激昂的少年漫,到細(xì)膩動(dòng)人的少女漫,從懸疑燒腦的推理漫,到輕鬆搞笑的日常漫,應(yīng)有盡有,總有一款能夠觸動(dòng)您的心弦。我們不僅擁有海量的正版漫畫資源,還不斷引進(jìn)和更新最新的作品,確保您能夠第一時(shí)間閱讀到您喜愛的漫畫。

2025b安最新官網(wǎng)入口地址:https://www.marketwebb.co/zh-CN/join?ref=507720986&type=wenzi;幣安(Binance)交易所是一家全球性的加密貨幣交易所,服務(wù)包括北美、歐洲、臺灣、中東、香港、馬來西亞在內(nèi)的180個(gè)國家地區(qū),提供超過600種加密貨幣,在全球擁有2.7億註冊用戶。
