一、前提
1、我们的多个系统都需要推送功能,但是我们又不想每个系统都去实现这样一个推送功能。
2、推送作为一个服务后,可以方便切换,比如一开始我们使用的是极光推送,后来切换到gopush推送,这样修改推送服务实现即可。
二、实现
在做这这套系统的第一版时,采用的是多线程和kafka(消息系统,用来缓存需要推送的消息)实现的,运行一段时间后,发现在推送大量消息时存在很大的问题,(当然问题都是在实现上)。第二版时,我对系统进行了新的架构,全面采用scala和akka来实现,组件之间的通信采用akka.tcp协议通信(代替旧的http通信)。
三、架构
四、简介
1、superpush-client和sperpush-web:推送的客户superpush-client可以直接导入到java或scala的项目中使用,sperpush-web是为了方便非java项目调用而提供的http接口调用(开发中)。client向worker推送失败时,在一定时间内后重新推送。当某个worker挂掉后,会重新选择新的woker进行推送
2、superpush-master:管理client和worker。client和worker启动后会注册到master中并且定期向master汇报自己的状态。当worker改变时,master会通知client,client会更新自己可用的worker列表。
3、superpush-worker:负责具体推送消息。
4、每个组件都支持集群
时间: 2024-10-11 04:11:09