消息推送平臺(tái)的設(shè)計(jì)(百萬門店同時(shí)推送消息)

簡(jiǎn)介

現(xiàn)有項(xiàng)目中存在需要針對(duì)百萬門店同時(shí)推送消息的需求,需要設(shè)計(jì)一個(gè)消息推送中心的系統(tǒng)進(jìn)行專門的消息推送

需求

  • 對(duì)百萬門店進(jìn)行消息推送
  • 支持坐席側(cè)websocket實(shí)時(shí)推送消息通知客服需要注意的事項(xiàng)
  • 挑戰(zhàn)設(shè)計(jì)成通用的消息推送平臺(tái),支持其余業(yè)務(wù)線的消息推送

設(shè)計(jì)實(shí)現(xiàn)

設(shè)計(jì)方案

準(zhǔn)備推送素材

  • 導(dǎo)入消息接收人的數(shù)據(jù)
  • 選擇條件去各個(gè)業(yè)務(wù)線拉取消息接受者的數(shù)據(jù)

第一點(diǎn):導(dǎo)入消息接收人的數(shù)據(jù)可以支持excel導(dǎo)入,然后去各個(gè)業(yè)務(wù)線去拉取完整的用戶id即可,導(dǎo)入的數(shù)據(jù)需要分頁(yè)提交給服務(wù)或者分頁(yè)落庫(kù)
第二點(diǎn):選擇條件去各個(gè)業(yè)務(wù)線拉取消息接收者數(shù)據(jù),先將該任務(wù)以及任務(wù)的信息進(jìn)行落庫(kù),去業(yè)務(wù)線同步拉取上百萬的門店會(huì)有困難,經(jīng)過設(shè)計(jì)采用順序消息的方式進(jìn)行投遞mq進(jìn)行自產(chǎn)自銷。

設(shè)計(jì)順序消費(fèi)mq來消費(fèi)客服篩選條件的方式拉取門店數(shù)據(jù)

本系統(tǒng)采用rocketmq的天然支持方式來保證順序投遞(messageQueueSelector),其中原理可以參考這篇文章

限制消費(fèi)的線程數(shù)來保證大數(shù)據(jù)量消費(fèi)的情況下服務(wù)的自我保護(hù)

使用這種方式會(huì)導(dǎo)致mq的性能下降,如果有大數(shù)據(jù)量高并發(fā)進(jìn)行消費(fèi)的情況下,mq服務(wù)的吞吐量會(huì)下降,所以為了防止將mq服務(wù)拉垮并且本身這樣的數(shù)據(jù)也不是很多,可以限制該topic的消費(fèi)線程數(shù)。

消費(fèi)mq消息開始拉取門店數(shù)據(jù)

通過mq投遞過來的任務(wù)信息,拉取用戶選擇的條件去各個(gè)業(yè)務(wù)線拉取需要發(fā)送的消息接收者的數(shù)據(jù)(現(xiàn)階段就只需要拉取門店)。拉取完門店數(shù)據(jù)就準(zhǔn)備好了所有的推送素材,這個(gè)時(shí)候用戶就可以點(diǎn)擊開始發(fā)送或者預(yù)約發(fā)送了。

拉取門店數(shù)據(jù)在線上出現(xiàn)的問題

由于消息推送中心存的條件是用戶篩選的條件,并且這些條件都是一些枚舉值,所以去獲取門店數(shù)據(jù)的時(shí)候是沒辦法走到索引,通過這些條件如果去查并且符合這些條件的數(shù)據(jù)量很少會(huì)導(dǎo)致全表掃描并且調(diào)用接口超時(shí),在線上達(dá)到8秒。

解決方案

各個(gè)業(yè)務(wù)線可以每次通過游標(biāo)的方式去數(shù)據(jù)庫(kù)拉取數(shù)據(jù)再放到redis去根據(jù)條件篩選符合的數(shù)據(jù),然后返回,這樣就可以解決接口超時(shí)的問題。

推送消息

需要支持兩種推送策略,mq推送以及多線程推送

多線程推送

使用多線程進(jìn)行推送,通過從數(shù)據(jù)庫(kù)分頁(yè)拉取接受人的數(shù)據(jù),根據(jù)提交任務(wù)給線程池進(jìn)行執(zhí)行發(fā)送消息的任務(wù),消息發(fā)送完畢返回發(fā)送數(shù)量,使用future的方式阻塞獲取線程異步執(zhí)行結(jié)果。

mq進(jìn)行推送

將所有消息接收者推送到mq自產(chǎn)自銷,消費(fèi)到mq就對(duì)該接受人進(jìn)行推送消息

總結(jié)

該推送平臺(tái)已經(jīng)實(shí)現(xiàn)了大數(shù)據(jù)量的推送功能,在后來的規(guī)劃中還會(huì)設(shè)計(jì)websocket的推送,以及其他的推送方式。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容