一份完整的億級(jí)消息中心架構(gòu)方案!
今天給大家分享一份較為完整的億級(jí)消息中心的架構(gòu)方案!
設(shè)計(jì)目標(biāo)
- 技術(shù)目標(biāo):上行到消息隊(duì)列 API 吞吐量 10000 條/秒,下發(fā)第三方平臺(tái) 1000 條/秒(僅平臺(tái)自身處理能力,第三方看第三方處理能力極限指標(biāo)為準(zhǔn));保證消息中心 100% 高可用。
- 業(yè)務(wù)目標(biāo):對(duì)接新需求,明確消息中心的負(fù)責(zé)人(架構(gòu)組),及時(shí)響應(yīng)業(yè)務(wù)處理或者反饋。
- 產(chǎn)品目標(biāo):支持消息處理狀態(tài)查詢,簡(jiǎn)單的消息規(guī)范消息對(duì)接(初級(jí)開(kāi)發(fā) 5 分鐘實(shí)現(xiàn)接入成本),規(guī)范化消息模板辦理。
需求原型
需求原型如下圖:
功能需求:
- 支持阿里云短信,微信公眾號(hào),App 推送,統(tǒng)一站內(nèi)信,企業(yè)微信(應(yīng)用,個(gè)人)等第三方推送。
- 包含消息模板管理,賬戶管理,消息搜索,批量消息發(fā)送等。
技術(shù)方案
業(yè)務(wù)部署交互圖:
業(yè)務(wù)核心邏輯交互圖:
技術(shù)選型
①RocketMQ
- 優(yōu)勢(shì):性能好,單個(gè)吞吐量能達(dá) 10 萬(wàn)/秒,并行推送能力(消費(fèi)能力)可以通過(guò) RocketMQ 的分區(qū)(分區(qū)細(xì)節(jié)需要設(shè)計(jì))數(shù)量進(jìn)行擴(kuò)展。性能上面是一個(gè)亮點(diǎn)和優(yōu)勢(shì)。
- 缺點(diǎn):部分功能不支持,一旦進(jìn)入 RocketMQ 隊(duì)列,推送消息不可撤回。很多數(shù)據(jù)庫(kù)層面的功能特性(MQ 不支持)在設(shè)計(jì)上就會(huì)舍棄。
②ES
- 優(yōu)勢(shì):性能好,可以支撐上億的數(shù)據(jù)量的關(guān)鍵詞搜索,實(shí)時(shí)同步的性能和吞吐量都還可以。
- 缺點(diǎn):并發(fā)插入能力略差,假設(shè)消息下發(fā)吞吐量高,需要批量對(duì)消息進(jìn)行同步,這樣可以優(yōu)化 ES 吞吐量。高并發(fā)對(duì) ES 同步,ES 承載能力可能會(huì)出問(wèn)題(可以投入測(cè)試進(jìn)行驗(yàn)證)。
概要設(shè)計(jì)描述
- RocketMQ 設(shè)計(jì)正常消息隊(duì)列(正常投遞消息),重試消息隊(duì)列(支持多種延遲機(jī)制,發(fā)送失敗重試的消息),發(fā)送結(jié)果消息隊(duì)列(發(fā)送超限或者成功的消息)。
- ES 同步以上三種隊(duì)列的消息,以最終一致性(最晚時(shí)間戳校驗(yàn))保持消息信息最新。
- MySQL 僅支持管理模板,賬號(hào)等基礎(chǔ)管理功能。
底層框架設(shè)計(jì)、運(yùn)維層面描述
①統(tǒng)一網(wǎng)關(guān):Spring Cloud Gateway/Kong,僅做 API 層面的路由支持。
②基礎(chǔ)框架:選定 jar 包版本,ES,RocketMQ,實(shí)時(shí)報(bào)警,性能監(jiān)控,對(duì)這些接口做二次封裝,ES 支持 SQL 模式插入查詢;RocketMQ 做底層實(shí)現(xiàn)剝離。
參考 bsf 統(tǒng)一基礎(chǔ)框架:
- https://gitee.com/yhcsx/csx-bsf-all
③業(yè)務(wù)框架:標(biāo)準(zhǔn)輸入輸出 Http RPC 等業(yè)務(wù)框架工具或協(xié)議層面支持。
④服務(wù)高可用:K8s&Docker 及 DevOps 線上一體化部署的支持,要做到一鍵發(fā)布,一鍵回滾,滾動(dòng)發(fā)布,不停機(jī)發(fā)版。
作者:車江毅
編輯:陶家龍
出處:cnblogs.com/chejiangyi/p/14884931.html