设计的系统支持不同类型消息的发送,例如push消息,sms消息和邮箱消息,能够支持千万级别的发送,保证消息推送的幂等性。系统结构图如下:
系统架构图中各组件作用说明:
device/setting/user info:收集到的最终信息,比如可以通过app收集
ServiceN:需要发送通知的应用服务
message template: 将消息定义和消息发送解耦,实现业务上解耦;对消息进行统一管理,统一发送消息格式。
message log:记录已经发送的消息,发送消息幂等
third party:将消息发送到用户端的云服务,一般由对应终端巨头或者统一协议制定者维护
系统设计中需要注意的点:
1、需要对单个用户发送的消息进行限流,防止对用户在短时间发送消息,导致用户直接禁止接受消息(message log)
2、根据业务场景对消息发送进行幂等(message log)3、除了考虑通知系统的承载能力,进行水平扩展,更要考虑第三方服务有限流(mq),有失败重试机制(mq),保证通知最终能够触动到用户端
4、考虑通知触达状态的监控
5、客户端进行的设置,触达系统需要维护?比如设置了拒收,设置了拒收就不发送,可以通过thrid parth取尝试获取,如果可以精确获取到,存储一份可以避免无效信息的发送,减少第三方发送消息的费用。