0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

聊聊消息推送架构设计

jf_ro2CN3Fa 来源:技术自由圈 2023-09-04 15:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

构建企业级统一基础推送服务,支持通过多渠道推送,能够统一集成的电子邮件、短信、聊天、钉钉、企业微信和其他公共社交应用:

聊天 - 微信Wechat/QQ

站内推送通知(移动设备和Web浏览器)

站外推送通知(移动设备,APP没有开启)

短信(如登录密码、营销活动)

电子邮件

钉钉

企业微信

企业级统一基础推送服务,是一个通用特性,适用于所有现代分布式应用,无论采用何种编程语言和技术。

推送能力的演进

第一阶段(模块化):各自为政、各自封装

企业内部,早期业务量比较少,各系统基本都是有自己的推送模块,类型也是五花八门:

聊天模块

短信模块

电子邮件模块

websocket 模块

各自封装模块比较简单,但是实现分散、各系统模块的质量也很难统一保证。

第二阶段(框架化):集成框架

为了减少重复性设计、开发成本, 设计了统一的推送框架

同一套微服务框架,共用一个统一的推送框架

为了解决上述分散实现的问题,企业内部统一实现了一个综合各类推送功能的基础库,供业务方统一调用。

聊天基础starter

短信基础starter

电子邮件基础starter

websocket 基础starter

于是,我们把 springboot-starter的逻辑封装到了服务治理框架内,微服务服务启动时,每一个服务对各种的starter进行运维管理、配置管理。

第三阶段(服务化):推送服务

集成到框架,每一套服务,都需要重复性的解决3高问题。

推送服务,数据量大,需要解决跨库查询问题

推送服务,性能要求高,需要解决高并发问题

大数据量、并发量高,意味着:

硬件资源投入大

运维成本高

这样的基础服务,需要进行沉淀,剥离,集中成统一的、基础服务,由专门团队负责维护、迭代、运维。降低重复投入、重复建设成本, 真正的降本增效。

于是, 推送框架 演进为 推送服务

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

项目地址:https://github.com/YunaiV/ruoyi-vue-pro

视频教程:https://doc.iocoder.cn/video/

推送服务在业务系统中的位置

一个业务应用, 基本上有很多原子服务编排、整合而来,最终构建出一个完整的架构图。

接入层,这是外部请求进入内部系统的门户,所有的请求都必须通过 API 网关。

应用层,也被称为聚合层,它为相关业务提供聚合接口,并调用中台服务进行组合。

原子服务,包括就是原子技术服务,原子业务服务,根据业务需求提供相关的接口。原子服务为整个架构提供可复用的能力。

例如,在B站视频网站平台上,评论服务作为一项原子服务,在B站的视频、文章、社区都需要,那么为了提高复用性,评论服务就可以独立为原子服务,不能与特定需求紧密耦合

在这种情况下, 评论服务,需要供一种可以适应不同场景的复用能力。

7a9eae8e-4a0b-11ee-97a6-92fbcf53809c.png

注意:请点击图像以查看清晰的架构图!

类似的,文件存储、数据存储、推送服务、身份验证服务等功能,都会沉淀为原子服务,业务开发人员,在原子服务基础上,进行编排、配置、组合,可以快速构建业务应用。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

项目地址:https://github.com/YunaiV/yudao-cloud

视频教程:https://doc.iocoder.cn/video/

推送服务功能要求

发送通知

对通知进行优先级排序

根据客户的保存偏好发送通知

支持单个/简单的通知消息和批量通知消息

各种通知的分析用例

通知消息的报告

推送非功能性需求(NFR)

高性能:qps > 1W

高可用性(HA):99.99%

低延迟:TP99 在10ms以下

高扩展:可扩展/可插拔的设计,以便添加更多适配器和提供商,与所有通知模块的API集成以及与客户端和服务提供商/供应商的外部集成

跨平台:支持Android/iOS移动设备和桌面/笔记本电脑的Web浏览器

自伸缩:可在本地(VMware Tanzu)和 AWS、GCP 或 Azure 等公共云服务上扩展负载

推送系统设计架构

7ad0313e-4a0b-11ee-97a6-92fbcf53809c.png

注意:请点击图像以查看清晰的架构图!

这些解决方案设计的考虑因素和组件包括:

1. 通知客户端

这些客户端通过 API 调用请求单个和批量消息。它们将向简单和批量通知服务发送通知消息。

简单通知客户端:专门用于发送单个通知的客户端,负责向用户发送单一通知。这些客户端通常用于向特定用户发送重要通知,例如密码找回或账户异常提醒。

批量通知客户端:专门用于发送批量通知的客户端,负责向用户批量推送通知。这些客户端通常用于需要通知大量用户的场景,例如企业内部通知或营销活动。

2. 通知服务

作为入口点的这些服务,通过暴露 REST API 与客户端互动。

它们负责构建通知消息,通过调用"模板服务"。这些消息将使用"验证服务"进行验证。

简单通知服务:该服务将提供 API,主要负责处理简单通知请求,提供与后端服务集成的 API,以便将通知发送给用户。这种服务通常用于处理较少的通知请求,例如针对特定用户或事件的简单通知。

批量通知服务:该服务将提供 API,主要负责处理批量通知请求,提供与后端服务集成的 API,以便批量发送通知。这种服务通常用于处理大量的通知请求,例如企业内部的批量通知或营销活动的批量推送。

此服务还将管理通知消息。它将发送的消息持久化到数据库并维护活动日志。

可以使用这些服务的 API 重新发送同一条消息。

它将提供添加/更新/删除和查看旧消息和新消息的 API。

它还将提供 Web 仪表板,该仪表板应具有筛选选项,以根据不同的条件(如日期范围、优先级、模块用户、用户组等)筛选消息。

3. 模板服务

此服务主要负责所有可用的一次性密码(OTP)、短信、电子邮件、聊天以及其他推送通知消息的模板管理。

它还提供了 REST API,以便创建、更新、删除和管理模板。

除此之外,它还将提供一个用户界面(UI)的仪表板页面,使用户能从网络控制台检查和管理各种消息模板。

4. 消息分发服务

定时分发服务:

该服务将提供API来安排立即或指定时间的通知。可以是以下任何一种:

分钟

每小时

每天

每周

每月

每年

自定义频率等。

还可能有其他自动触发的服务,基于预定时间进行消息触发。

消息验证服务:

此服务全权负责根据业务规定和预期格式对通知信息进行核实。批量通知需由授权的系统管理员同意。

消息优先级服务:

该服务负责对通知进行优先级排序,分为高、中、低三个等级。

通知信息具有较高的优先级和有时间限制的到期时间,它们将始终以较高优先级发送。

"通用出口处理器"会接收消息并根据相同的优先级从高、中和低三个不同的队列中发送和处理。

在非工作时间,可以以低优先级发送批量通知。

在交易过程中的应用程序通知可以发送到中优先级,如电子邮件等。企业可以根据通知的重要性确定优先级。

5. 事件优先级队列(消息队列)

此服务提供事件中心功能,负责接收通知服务的高、中、低三个优先级的信息。

它会根据业务的优先级来发送和接收通知。企业可以根据通知的重要性来设定优先级。

服务内部包含三个主题,用于根据业务优先级接收和发送通知:

低优先级:主要用于在非工作时间发送批量通知。

中优先级:适用于在交易过程中发送的应用程序通知,如电子邮件等。

高优先级:通知信息具有较高的优先级和有时间限制的到期时间,它们将始终以较高优先级发送。关注公工众号:码猿技术专栏,回复关键词:1111 获取阿里内部Java性能调优手册!

6. 通用出站处理程序

该服务通过轮询事件优先级队列来接收事件中心中的通知信息,并根据其优先级进行处理。

高优先级的通知会优先处理"高"队列,依次类推。

最后,它通过事件中心将通知信息发送到特定的适配器。

此外,该服务还从用户选择服务中获取目标用户/应用程序,以便进行通知的分发。

在处理过程中,通用出口处理器会根据事件的优先级进行相应的操作,确保重要事件得到优先处理。

这样,企业可以根据通知的优先级来确定处理顺序,从而提高通知的处理效率。

除此之外, 通用出站处理程序,还能进行消息的进一步按照通道类型进行分发:

该服务将消息发送到各种支持的适配器。

这些适配器会根据不同的设备(如桌面/移动设备)和通知类型(如短信/OTP/电子邮件/聊天/推送通知)进行转换。

7. 通知适配器

这些转换器将从消息队列(rocketmq)接收传入信息并根据其所支持的格式传递给外部合作伙伴。

以下是一些转换器,根据需求可以增加更多:

QQ 通知适配器服务

微信Wechat 聊天通知适配器服务

应用内通知适配器服务

电子邮件适配器服务

短信适配器服务

OTP 适配器服务

8. 通道供应商

这些是外部的 SAAS(云上/本地)服务提供商,利用它们的基础设施和技术实现实际的通知传递。

它们可能是像 AWS SNS、MailChimp 等的付费推送通道服务。

QQ 供应商集成服务

微信Wechat 供应商集成服务

应用推送通知供应商集成服务

电子邮件供应商集成服务

短信供应商集成服务

9. 用户选择服务

该服务提供选择目标用户和各种应用程序模块的功能。

这可能包括将批量消息发送到特定的用户组或不同的应用程序模块。

可能是 AD/IAM/eDirectory/用户数据库/用户组,具体取决于客户的偏好。

在服务内部,它将使用"用户配置文件服务"API 来消费和检查客户的通知偏好。

10. 用户配置文件服务

此服务提供各种功能,包括管理用户配置文件及其偏好设置。

还管理内部用户标识,和外部通道标识之间的关联关系

钉钉用户标识 和 用户标识 关联关系

企业微信 用户标识 和 用户标识 关联关系

用户和邮箱的关联关系

等等

它还将提供取消订阅通知以及通知接收频率等功能。

"通知服务"将依赖于此服务,以便根据用户的通知偏好来发送通知。

此外,该服务还可以用于统计和分析用户对通知的偏好,以帮助企业优化通知策略。

11. 分析服务

该处理器将负责执行所有的分析工作,识别通知使用情况、趋势并生成报告。

它将从分析数据库(Cassandra)和通知数据库中提取所有最终的通知信息,用于分析和报告目的。

以下是一些用例:

每天/每秒的总通知数

哪个通知系统使用最频繁

消息的平均大小和频率

基于优先级过滤消息等等...

12. 通知跟踪器

此服务将持续监视事件中心队列并跟踪所有发送的通知。

它捕获通知的元数据,如传输时间、传送状态、通信渠道、消息类型等。

13. 通知数据库:Mysql数据库集群

通知数据库,用于存储库用于存储所有通知信息,包括发送时间、状态等。

它包括一个数据库集群,其中领导者用于执行所有写操作,读取操作则在读取副本/跟随者上进行。

这个数据库群集将持久化所有通知,供分析和报告使用。

它基于“写入更多,读取更少”的理念。

它能提供良好的性能和低延迟,适应大量的通知,因为它内部处理大量的写操作,并与其他数据库节点同步,保持高可用性和可靠性的冗余数据/消息。

在任何节点崩溃的情况下,消息将始终可用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    4081

    浏览量

    68524
  • MySQL
    +关注

    关注

    1

    文章

    930

    浏览量

    29740
  • 架构设计
    +关注

    关注

    0

    文章

    33

    浏览量

    7252

原文标题:聊聊 消息推送 架构设计

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    交流微电网架构设计:拓扑结构、核心组件与适配场景

    “双碳”目标实现的重要载体。交流微电网架构设计的核心,是通过合理规划拓扑结构、科学配置核心组件,实现与应用场景的精准适配,最终达成安全稳定、高效经济的运行目标。拓扑结构决定架构的整体布局与运行特性,核心
    的头像 发表于 04-09 16:54 780次阅读
    交流微电网<b class='flag-5'>架构设</b>计:拓扑结构、核心组件与适配场景

    西格电力微电网总体架构设计:分层分布式控制体系构建

    随着分布式新能源规模化渗透、负荷需求多元化升级,微电网作为整合“源、储、荷、网”多单元的新型能源系统,其安全稳定、高效经济运行的核心诉求,对总体架构设计与控制体系提出了更高要求。微电网总体架构是系统
    的头像 发表于 03-31 11:44 467次阅读
    西格电力微电网总体<b class='flag-5'>架构设</b>计:分层分布式控制体系构建

    2022全新版!Java分布式架构设计与开发实战(完结)

    2022全新版!Java分布式架构设计与开发实战(完结) 分库分表实战:Java海量数据存储架构设计 在现代互联网应用中,随着业务规模的指数级增长,数据库性能瓶颈已成为制约系统发展的关键因素。当单
    发表于 03-30 15:20

    微电网总体架构设计原则:安全、高效、灵活的三重导向

    的运行稳定性、能源利用效率与场景适配能力。在微电网架构设计中,“安全、高效、灵活”三大导向并非孤立存在,而是相互支撑、协同统一的有机整体——安全是底线,筑牢微电网运行的根基;高效是核心,彰显微电网的能源
    的头像 发表于 03-27 14:12 252次阅读
    微电网总体<b class='flag-5'>架构设</b>计原则:安全、高效、灵活的三重导向

    聊聊戴尔新一代PowerEdge服务器上的iDRAC10

    每当新一代服务器发布,最引人关注的通常是在硬件或架构设计上的变化。
    的头像 发表于 03-11 15:45 481次阅读
    <b class='flag-5'>聊聊</b>戴尔新一代PowerEdge服务器上的iDRAC10

    X (Twitter) 推荐系统架构设计深度解析

    推荐系统到底是如何理解海量用户与内容的?本期文章带你深入 X (前 Twitter) 推荐算法库的底层源码。解构推荐系统关键的“漏斗型”架构——从高效的双塔召回到复杂精妙的 Transformer
    的头像 发表于 02-25 23:56 5137次阅读

    蔚来世界模型NWM全新版本正式推送

    2026年1月28日,「蔚来世界模型 NWM」全新版本正式开启推送,首批将为超过46万辆「Banyan 榕」车型推送。「Cedar 雪松」车型及「Cedar S 雪松」车型,也将于近期开启推送
    的头像 发表于 01-28 15:38 556次阅读

    嵌入式软件分层架构设计原则

    嵌入式软件分层架构的设计原则如下: 模块化和可扩展性:每一层应当保持松耦合,这样当硬件变化或某些功能扩展时,只需要修改对应的层次,而不影响整体架构。 硬件无关性:上层代码应当尽量避免直接依赖硬件
    发表于 11-28 07:05

    TensorRT-LLM的大规模专家并行架构设

    之前文章已介绍引入大规模 EP 的初衷,本篇将继续深入介绍 TensorRT-LLM 的大规模专家并行架构设计与创新实现。
    的头像 发表于 09-23 14:42 1349次阅读
    TensorRT-LLM的大规模专家并行<b class='flag-5'>架构设</b>计

    聊聊FPGA中的TDC原理

    今天我们不谈高大上的物理学,只聊聊如何在 FPGA 中,用一串加法器和 D 触发器,“数清楚时间”——这就是时间数字转换器(TDC)的魅力。
    的头像 发表于 09-02 15:15 2599次阅读
    <b class='flag-5'>聊聊</b>FPGA中的TDC原理

    光伏电站中应用的无人机AI巡检系统架构设

    维护提供数据支持,在当下的电站运营中发挥着重要的作用。 从系统架构设计方面来说,通过硬件层、软件层以及云平台层各层不同功能模块部署设计,实现智能化的巡检流程应用。首先是硬件层,通过构建无人机平台适应如沙漠、山地
    的头像 发表于 09-02 14:13 545次阅读
    光伏电站中应用的无人机AI巡检系统<b class='flag-5'>架构设</b>计

    深入剖析RabbitMQ高可用架构设

    在微服务架构中,消息队列故障导致的系统不可用率高达27%!如何构建一个真正可靠的消息中间件架构?本文将深入剖析RabbitMQ高可用设计的核心要点。
    的头像 发表于 08-18 11:19 1081次阅读

    寻开发伙伴 一起搞细胞电阻仪,有兴趣的朋友来聊聊

    寻开发伙伴 一起搞细胞电阻仪,有兴趣的朋友来聊聊
    发表于 07-10 15:51

    同一水平的 RISC-V 架构的 MCU,和 ARM 架构的 MCU 相比,运行速度如何?

    ARM 架构与 RISC-V 架构的 MCU 在同一性能水平下的运行速度对比,需从架构设计原点、指令集特性及实际测试数据展开剖析。以 ARM Cortex-M33 这类 ARMv8M 架构
    的头像 发表于 07-02 10:29 1716次阅读
    同一水平的 RISC-V <b class='flag-5'>架构</b>的 MCU,和 ARM <b class='flag-5'>架构</b>的 MCU 相比,运行速度如何?

    光伏运维管理系统架构设计及其应用分析

    开展。 光伏运维管理系统集成先进的数据监测、故障诊断、运维任务管理等多种功能内容,为光伏电站提供全面、高效、智能的运维服务。其系统分层架构设计,覆盖感知层、网络层、平台层和应用层。感知层通过传感器和摄像头等设
    的头像 发表于 06-10 11:34 763次阅读
    光伏运维管理系统<b class='flag-5'>架构设</b>计及其应用分析