文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

聊聊消息推送架构设计

2024-11-29 19:21

关注

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

推送能力的演进

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

推送服务功能要求

推送非功能性需求(NFR)

推送系统设计架构

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

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

1. 通知客户端

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

2. 通知服务

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

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

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

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

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

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

3. 模板服务

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

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

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

4. 消息分发服务

(1) 定时分发服务:

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

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

(2) 消息验证服务:

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

(3) 消息优先级服务:

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

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

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

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

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

6. 通用出站处理程序

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

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

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

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

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

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

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

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

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

7. 通知适配器

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

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

8. 通道供应商

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

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

9. 用户选择服务

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

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

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

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

10. 用户配置文件服务

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

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

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

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

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

11. 分析服务

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

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

以下是一些用例:

12. 通知跟踪器

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

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

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

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

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

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

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

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

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

来源:技术老男孩内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯