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

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

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

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

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

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

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

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

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

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

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

考慮問題

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