鍍金池/ 問答/PHP  數(shù)據(jù)庫/ 一道經(jīng)典問題,如何最快速度給500萬個用戶推送消息

一道經(jīng)典問題,如何最快速度給500萬個用戶推送消息

  1. 500萬用戶屬于最終篩選出符合特定條件的用戶,篩選也應(yīng)算內(nèi)
  2. 服務(wù)器配置為4核8G
  3. MySQL主從服務(wù)
  4. 可搭配緩存數(shù)據(jù)庫,消息隊列
  5. 探討一下最優(yōu)解
回答
編輯回答
熊出沒

我擦,5人關(guān)注話都不敢說嗎?樓上評論里評論完還踩我一下,至于嘛。。。

我假裝自問自答一下把,(其實樓主主要上次看到一個同學(xué)類似問題到回答,答的非常好,但是忘了在叫什么來著了

我擦,5人關(guān)注話都不敢說嗎?樓上評論里評論完還踩我一下,至于嘛。。。

我假裝自問自答一下把,(其實樓主主要上次看到一個同學(xué)類似問題到回答,答的非常好,但是忘了在叫什么來著了

Step 1. 篩選數(shù)據(jù)

多進(jìn)程【協(xié)程】去讀取篩選從庫用戶ID,設(shè)定好符合條件的策略,規(guī)避重復(fù)查詢,500W 在4核8G的機(jī)器上開20個進(jìn)程大概在了兩小時左右,撐死,我還沒試過,如果有親有相關(guān)壓測經(jīng)驗。感謝指教,完成數(shù)據(jù)篩選,得到需要推送用戶480W,將480W用戶分組放入緩存庫【消息隊列】里

Step 2. 多進(jìn)程推送

開啟多進(jìn)程【協(xié)程】模型去事先分配好鍵值對的緩存庫【消息隊列】里拿數(shù)據(jù),然后分發(fā)給用戶

考慮問題

  1. 如何做好云控,例如運營MM不小心寫了錯別字,推送出去,我想突然Stop,讓未推送到的部分用戶收不到
  2. 如何做好不用遍歷全表的舉措,定時備份?
2017年9月26日 06:26