gopush-cluster 架构
来源:互联网 发布:数字滚动抽奖软件 编辑:程序博客网 时间:2024/05/29 06:55
前言
gopush-cluster是一套golang开发的实时消息推送集群,主要分享一下开发这套系统的想法和思路。
架构
主要分为三个模块来开发,comet/web/message。
comet
主要负责消息排队、消息推送以及和客户端的连接维护;整套系统依据是消息ID顺序原则获取消息(客户端本地获取最大的消息是1,那么之后获取的消息就是大于1的,获取离线消息的时候也要从上次最大消息ID来获取),因此消息推送以后需要在comet中排队然后发起RPC给message实现存储。
message
主要负责消息的存储和读写;接受来自comet模块的消息进行持久化,或者接受web模块的读取消息请求获取离线消息。message是可以部署多个节点来负载来自大量comet的推送压力,比如不同的comet使用不同的message节点(节点无状态),之后在comet也会做多message节点的负载均衡RPC调用和故障转移(TODO)。
web
主要负责节点询问,以及离线消息获取和后台节点管理等;节点询问主要依据客户端的订阅Key一致性hash计算出连接的comet节点地址,因此海量客户端连接的时候可以打散到多个comet来服务;另外离线消息也是通过web接口返回给客户端的,但是消息的读取是通过RPC发送给message模块的,尽量的职责单一。web节点因为无状态,可以部署多个web,来实现负载均衡和故障转移。
thrid-part
消息存储现在主要依赖Redis进行消息读写(Sorted Set),因为Sorted Set不支持int64类型的Score(我们也开发了一个支持int64 Score的分支但是因为时间原因没有大量测试上线),之后可能会使用HBase集群代替Redis的使用,已提供更安全的离线消息存储(TODO)。
另外使用了Zookeeper来实现的同一个comet的故障转移,例如comet 节点1可以有一个备选节点节点2,当节点1注册到zookeeper之后,因为机器或者其他原因宕了,这时候会在web层触发zookeeper的选举选中节点2来服务。
结束语
gopush-cluster大致的架构就说到这了,之后会写其他模块细节以及优化和遇到的问题。
- gopush-cluster 架构
- gopush-cluster 架构
- gopush-cluster 架构
- 推送系统总结(gopush-cluster)
- 一个golang推送服务器集群:gopush-cluster
- 一个Go推送服务器集群:gopush-cluster
- 一个Go推送服务器集群:gopush-cluster
- 一个Go推送服务器集群:gopush-cluster
- 一个golang推送服务器集群:gopush-cluster
- Redis Cluster架构优化
- redis cluster 集群架构
- Redis Cluster架构优化
- MySQL-Cluster架构图文详解
- MySQL-Cluster架构图文详解
- MySQL-Cluster架构图文详解
- MySQL-Cluster架构图文详解
- MySQL-Cluster架构图文详解
- MySQL-Cluster架构图文详解
- Reverse Bits
- Windows程序设计(消息机制)
- javascript 如何定义一个多维数组
- 技术人员在转向移动开发过程中有哪些经验和教训值得大家借鉴?
- Jlabel实现内容自动换行
- gopush-cluster 架构
- 阿里云ECS服务器之tomcat安装,并部署测试war,测试RDS
- project euler 32
- 利用JQuery jqprint实现打印功能
- cf Guess a number!
- Handler源码解析
- Python实例浅谈之三Python与C/C++相互调用
- 计算理论中的莱斯定理(Rice's Theorem)——证明与应用
- 杭电 1003 max sum