Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Austin消息中心

Austin消息中心

作者头像
路行的亚洲
发布于 2023-08-31 05:46:27
发布于 2023-08-31 05:46:27
1.1K00
代码可运行
举报
文章被收录于专栏:后端技术学习后端技术学习
运行总次数:0
代码可运行

写这篇文章是首先我之前也是做过消息中心的需求,当时3y开源了它的项目Austin,当时觉得挺好的,之后我负责的消息中心重构了一版,现在想想也挺开心的。所以想把之前学习的整理了下来。

开源项目Austin的地址:https://gitee.com/zhongfucheng/austin,以下内容基于Austin,同时带上自己的一些思考。更多细节请参考开源项目Austin,作者是3y,感谢作者开源这么好的项目。以下内容基于Austin。

一、首先我们来说思考一下,如果实现一个消息中心?

1.实现的原则

方便业务方调用,同时调用的成本相对来说较小,统一的接口发送各种类型消息,对消息生命周期全链路追踪。也即实现一个消息中心,需要对来自各个渠道的消息进行统一接口的提供,方便排错。同时方便后续的迭代开发。同时实现熔断限流的功能。

2.消息中心提供的能力

邮件、短信、IM、微信服务号、微信小程序、企业微信、钉钉、飞书等

3.实现的模型

业务方通过消息中心,能够实现对短信、邮件、IM、微信类、飞书等消息的正确发送

4.具体的实现方式

1).首先它具有多种渠道,因此我们需要对此维护一个渠道的相关账号信息

2).由于发送的消息不同于消息中间件的消息,比如短信、邮件等,需要先准备好模板,因此需要一个模板表

3).由于存在审计信息需要记录,发送消息的人发送的消息记录

4).由于存在审计信息需要记录,因此这里需要准备一张消息接收者接收消息的情况

5).对失败的消息进行一些补充或者重试,此时需要起一些定时任务或者在代码中进行重试,这个具体需要根据业务的需求进行

6).对失败和成功的消息做指标的统计,方便业务查询哪些消息发送成功了,哪些消息发送失败了,如果失败了,可以进行手动重试与定时任务重试,这个具体根据业务方的需求进行

也即总结起来就是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
实现多渠道统一接口
模板信息的准备与填充
审计信息的记录
成功失败指标统计
失败重试与提示
5.实时之外延迟队列=>不定时任务—延迟队列

除了实现这些功能外,思考一下,如果业务通常希望今天填充的信息,明天能够在某时某点能够进行发送,而且每次可能都是不固定的。此时就不再单单是发送了,需要考虑延迟的情况,也即结合延迟队列实现对短信的方式或者邮件等等。

延迟队列的实现,网上有很多实现的方案,这里主要介绍三个实现的方案:

1.基于开源版本的RocketMQ的延迟队列实现,其在5.0之后是支持任意精度的延迟消息队列的,在5.0之前它不支持任意精度的延迟消息队列。其实现原理是通过时间轮的方式实现的。 5.0之前,通过将消息的主题修改SCHEDULE_TOPIC_XXXX,并投递到延迟队列,比较局限只支持18个等级,精度有限。时间轮是一种算法, 用来管理和调度固定时间间隔内的事件。它将固定时间间隔分成若干个时间槽,并将事件映射到相应的时间槽上。在时间轮中,每个时间槽都会按顺序处理它所映射的事件,从而实现对固定时间间隔内的事件的调度。 支持的RIP:[RIP-43] Support Timing Messages with Arbitrary Time Delay

2.基于xxl-job实现,这个是开源项目Austin主推的方式 方案:万物皆扫表,针对这次需求(晚上发的消息,次日早上发送),就不需要上延时队列,因为austin已经接入了分布式定时任务框架了(对应的实现是xxl-job),只要把晚上的接收到的消息扔进Redis list,然后启个定时任务(每天早上9点)轮询该list是否有数据,如果有再重新做处理就完事了。当然它这种也不属于任意精度的。只能说是定时

3.基于Redis实现,思想还是轮询。基于Redis 实现一个轻量级的延迟队列。

6.实现业务之外的考虑-防重

业务方使用不当,不小心连续推送了两次,如果没有任何限制,那就真的下发了两次。试想下,如果你点了下验证码,如果收到了两条一模一样的短信,你是什么感受?作为平台需要有兜底的功能(尽可能避免由于业务使用不恰当,导致出现事故)

7.实现业务之外的考虑-防重-统计量化监控限流

前面说到对相关指标进行统计量化,仅仅是做这些是做了成功失败的统计,做这些是不够的。第三方接口一般都会有限流的,比如在腾讯云官网上看到对发送接口有3000QPS的限制。我们是需要知道现在各种类型的消息的发送情况是怎么样的,是否有限流的操作。如果限流了,是不是可以告诉业务方可能是原因目前发送量过大导致触发限流。系统上有完备的监控,你知道了各种的系统指标数据,自己才不会慌。比如此时产生的白名单、黑名单信息记录。同时实现熔断限流的相关措施。

8.实现业务之外的考虑-防重-花销统计

接入的短信后台都有对应的统计,但我们量大的话是需要「对账」,以我们的发送记录与回执统计跟短信的后台进行统计。austin使用的方案是基于hive实现。将短信的发送和回执数据导入到Hive,每个月跑一次Hive脚本统计进行对账

9.实现业务之外-供应商的服务挂掉了怎么办

比如某个短信渠道商挂了怎么办?短信需要接入多个渠道商,调用接口失败需要继续调用其他渠道商,支持动态分配渠道商的流量(一旦有提前预警,直接切换渠道商)

实现业务之外需要实现的功能

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
延迟队列
防重
统计量化监控限流
花销统计
多渠道服务
10.实现业务之外-可配置

相关参数信息可配置化,这里可以看到其使用了nacos进行相关参数配置化。

二、Austin的实现

首先准备好对应的账号信息、渠道信息、模板信息,然后进行消息的发送。

实现流程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
austin-web:为前端项目提供相关接口  可以调用austin-web创建发送消息
austin-cron: 承载着定时任务的工作
austin-api: 接受到发送消息请求,直接将请求进MQ
austin-handler: 消费MQ消息后,由各类handler进行发送处理
1.调用消息推送接口
2.接受消息推送接口返回信息
3.保存消息推送接口返回信息至mysql
4.从推送消息第三方拉去,推送消息回执
5.将回执信息保存到mysql中
austin-stream:处理handler产生的日志数据
austin-support: pipeline的支持、获取配置、mq的封装等,主要是对项目的支持
austin-conmmon:公共类
austin-data-house:对数据的处理,hive、flink

开源项目参考地址:https://gitee.com/zhongfucheng/austin

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端技术学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊聊消息中心的设计与实现逻辑
微服务的架构体系中,会存在很多基础服务,提供一些大部分服务都可能需要的能力,比如文件管理、MQ队列、缓存机制、消息中心等等,这些服务需要提供各种可以复用的方法或者接口,以便其他业务服务可以快速调用;下面来看看消息通知的原理:
知了一笑
2022/11/30
1.1K0
聊聊消息中心的设计与实现逻辑
1年后,终于要上线了呀!
1、渠道账号配置改为在前端上做页面管理,之前会把渠道的账号配置散落在分布式配置中心/本地配置文件;
Java3y
2023/01/08
4800
1年后,终于要上线了呀!
APP通知栏、微信、短信、邮箱消息推送:多渠道消息触达平台
通过与消息触达平台的接口对接,开发者无需自行编写发送消息的代码,从而实现业务逻辑代码和发送消息逻辑代码的解耦。
hanabi
2023/12/09
1.8K0
APP通知栏、微信、短信、邮箱消息推送:多渠道消息触达平台
干货 | 高吞吐消息网关的探索与思考
作者简介 刘惊惊,唯品会业务架构部高级架构师。主要负责用户线,营销线的业务架构,也参与库存系统的重构改造。 一、背景介绍 唯品会是一家立足于“全球精选,正品特卖”的电商网站,拥有4亿注册会员,日活约2千万会员。随着会员数量的增多,公司业务部门的飞速发展,和用户的沟通变得日益重要。沿用至今的消息网关,面对多变的业务和爆发式增长的消息面前,显得力不从心,多次大促出现性能瓶颈,急需重构来跟上公司业务发展的需要。 二、唯品会消息网关的架构定位 在本次重构中,将原来耦合在一起的消息发送渠道,被拆分成逻辑消息网关和
携程技术
2018/03/16
2K0
干货 | 高吞吐消息网关的探索与思考
难得的好文:如何构建一套高可用的 APP 消息推送平台
消息推送作为移动 APP 运营中的一项关键技术,已经被越来越广泛的运用。本文追溯了推送技术的发展历史,剖析了其核心原理,并对推送服务的关键技术进行深入剖析,围绕消息推送时产生的服务不稳定性,消息丢失、延迟,接入复杂性,统计缺失等问题,提供了一整套平台级的高可用消息推送解决方案。实践中,借助于该平台,不仅能提能显著提高消息到达率,还能提高研发效率,并道出了移动开发基础设施的平台化架构思路。
Java技术栈
2019/07/12
4.1K0
难得的好文:如何构建一套高可用的 APP 消息推送平台
揭秘!消息管理平台的实现原理
这个系列就以「消息管理平台」来打个样吧,这是我维护近一年的系统了。这篇文章可以带你全面认识「消息管理平台」是怎么设计和实现的,有兴趣的同学欢迎在评论区下留言和交流。
Java3y
2020/09/24
1.6K0
揭秘!消息管理平台的实现原理
探索 RocketMQ:企业级消息中间件的选择与应用
RocketMQ 是一个高性能、高可靠、可扩展的分布式消息中间件,它是由阿里巴巴开发并贡献给 Apache 软件基金会的一个开源项目。RocketMQ 主要用于处理大规模、高吞吐量、低延迟的消息传递,它是一个轻量级的、功能强大的消息队列系统,广泛应用于金融、电商、日志系统、数据分析等领域。
用户7954602
2024/11/23
2670
探索 RocketMQ:企业级消息中间件的选择与应用
开源短信项目 platform-sms 发布了新版本 0.5.0
短信服务 platform-sms 0.5.0 发布 ,新的版本做了非常多的优化和改进。
勇哥java实战
2024/03/05
6800
我与消息队列的八年情缘
消息队列,缓存,分库分表是高并发解决方案三剑客,而消息队列是我最喜欢,也是思考最多的技术。
勇哥java实战
2022/07/27
6440
我与消息队列的八年情缘
消息队列的七种经典应用场景
在笔者心中,消息队列,缓存,分库分表是高并发解决方案三剑客。在职业生涯中,笔者曾经使用过 ActiveMQ 、RabbitMQ 、Kafka 、RocketMQ 这些知名的消息队列 。
勇哥java实战
2024/03/28
4390
【高并发】为何高并发系统中都要使用消息队列?这次彻底懂了!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2020/10/29
5350
【高并发】为何高并发系统中都要使用消息队列?这次彻底懂了!
为何高并发系统中都要使用消息队列?这次彻底懂了!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2020/12/28
1.3K0
为何高并发系统中都要使用消息队列?这次彻底懂了!
想不到吧?我是这样用Redis实现消息定时推送的!
先说一下领劵中心的项目吧,这个项目就类似京东app的领劵中心,当然图是截取京东的,公司的就不截了。。。
Bug开发工程师
2019/08/09
2.6K0
想不到吧?我是这样用Redis实现消息定时推送的!
11个高可用设计实战技巧,轻松应对大厂面试
面对一个庞然大物,如果没有一个合理的分工分层。任何一个小小失误都会被无限放大,酿成巨大灾难。
微观技术
2024/07/04
3401
11个高可用设计实战技巧,轻松应对大厂面试
聊聊高可用的 11 个关键技巧
面对一个庞然大物,如果没有一个合理的分工分层。任何一个小小失误都会被无限放大,酿成巨大灾难。
微观技术
2022/05/27
4500
聊聊高可用的 11 个关键技巧
我与消息队列的八年情缘
消息队列,缓存,分库分表是高并发解决方案三剑客,而消息队列是我最喜欢,也是思考最多的技术。
勇哥java实战
2021/11/11
5960
我与消息队列的八年情缘
企业级消息推送架构设计,太强了!
【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本
芋道源码
2024/06/17
4690
企业级消息推送架构设计,太强了!
腾讯游戏打通 Apache Pulsar 与 Envoy,构建高效 OTO 营销平台
作者|江烁 本文整理自 Pulsar Summit Asia 2022 上腾讯互娱 GDP 微服务开发平台网关技术负责人江烁的演讲《打通 Apache Pulsar 与 Envoy,构建高效游戏 OTO 营销平台实践》。本文将介绍介绍腾讯互娱利用 Apache Pulsar 和 Envoy 运营游戏 OTO 营销平台的经验。 腾讯互动娱乐旗下涵盖腾讯游戏、腾讯文学、腾讯动漫等多个互动娱乐业务平台。其中,腾讯游戏注册用户超过 8 亿。2022 年 6 月,腾讯游戏旗下王者荣耀日活跃用户数量超过 1 亿 6
深度学习与Python
2023/04/30
9060
腾讯游戏打通 Apache Pulsar 与 Envoy,构建高效 OTO 营销平台
主流的消息队列MQ比较,详解MQ的4类应用场景
消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。
Java
2018/09/26
8.6K0
主流的消息队列MQ比较,详解MQ的4类应用场景
从0到1,亿级消息推送的稳定性保障 | 得物技术
消息推送每天都在我们的手机上发生,如图所示,除非你的手机没有安装App或关闭了通知栏权限。
得物技术
2023/03/22
9200
从0到1,亿级消息推送的稳定性保障 | 得物技术
推荐阅读
相关推荐
聊聊消息中心的设计与实现逻辑
更多 >
LV.1
用友汽车java工程师
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档