关于全球即时通讯系统架构的点滴思考
来源:互联网 发布:淘宝卖红酒需要什么 编辑:程序博客网 时间:2024/04/29 22:13
全球化的IM系统,用户量大,并发访问高,这样的系统如何架构?笔者刚刚结束相关产品的研发工作,做点滴总结。
一、 全球IM系统的基本要求
1 首先即时性要好,在海量用户高并发访问时,减少用户消息到达的延迟,要求服务端计算要快;
2 高可用性和可靠性,在拥有如此海量用户的系统,势必采用集群化部署,机器故障发生率高,在机器发生故障时,要求仍可以正常提供服务;
3 伸缩性好,在增加机器时,系统服务能力能得到线性增长;
4 扩展性强,在增加功能需求或变动功能时,不会引起系统架构大的调整;
5 安全性好,可以防止第三方冒名登录。
二、 机器全球化部署
为了缩短客户端到服务端的通信距离,宜将服务器全球化部署,不如效仿谷歌云将计算中心部署在全球6个数据中心:亚洲东部、亚洲东北部、欧洲西部、美国中部、美国东部和美国西部。每个计算中心为所在区域的用户提供服务,所有的数据中心通过光纤连接,提供局域网的服务。
三、基本架构
全球化IM系统架构包括几个部分:入口层、连接层、消息队列、协议层、微服务层。
1 入口层:客户端连接服务端时,首先连接入口层,入口层提供两类服务:(1) 首先判断客户端IP是否在黑名单中,若是则拒绝为其提供入口;(2)然后根据IP所属区域为其提供所属区域的计算中心的连接层地址。
2 连接层:全球6个计算中心分别部署一个连接层集群,集群中机器数量取决于用户的连接数量,每个集群分别提供负载均衡;连接层业务代码简单,写好之后,一般不改动;连接层主要的任务就是与客户端保持TCP长连接,把客户端发送的数据包向后转发;这样设计的目的是为了在后端业务升级变动时,对用户透明化。
3 消息队列:消息队列在连接层的后面,暂时存放连接层接收到的数据包;消息队列的作用有两个:(1)应对访问高峰,防止对后端业务造成过高的负载;(2)实现异步方式,使连接层与后端业务解藕。
4 协议层: 前端连接层基于TCP实现简单的数据包收发,该层结合业务实现自定义的应用层协议,将协议从业务代码中分离出来单独作为一个层实现,便于维护和性能调优,可以在很大程度上提高系统的可扩展性;该全球化的IM系统客户端除了PC还包括大量的移动设备,移动端在弱网络环境中;为了使消息能在弱网络环境中正常传输,必须设计可靠、高效、低带宽的协议,可靠是指消息可达、不丢包,高效是指弱网络环境下消息快速收发,低带宽是为了节省用户移动设备的流量。该全球IM系统采用基于版本号的消息传输协议。
5 微服务层:微服务层以微服务的形式实现业务代码,与协议层通过RPC的方式进行调用。
四 总结
1 所有层次的机器都是集群化部署,除了提高处理能力外,最重要的是为了容错处理,提高可靠性;
2 IM系统通讯协议是重点,一个好的通讯协议可以简化系统设计,提高消息传输效率,节省资源;
3 对于高并发的系统,推荐采用go语言实现,与C++语言相比, 可以极大降低开发者的心智负担。
- 关于全球即时通讯系统架构的点滴思考
- 关于移动即时通讯协议的点滴思考
- 关于系统架构的一些思考
- 系统架构的思考
- 关于架构的思考
- 关于架构的思考
- 关于架构的思考
- 即时通讯系统架构
- 即时通讯系统架构
- 即时通讯系统架构
- 关于系统的SignalR的即时通讯功能
- 关于即时通讯系统开发的问题
- 关于新架构的思考
- 关于客户端架构的思考
- 关于分布式架构的思考
- 关于软件架构的思考
- 关于架构的一点点思考
- 关于系统的一点思考
- 据说码农都要有自己的博客
- B+ tree
- 170212
- fast rcnn 安装 demo测试
- java中 static,final,transient,volatile关键字的作用
- 关于全球即时通讯系统架构的点滴思考
- css连续的纯数字或字母强制换行
- Android Service应用
- 170213
- 【Android测试】自动化测试框架简介
- Windows下的Memcache安装
- Windows下的Eclipse访问虚拟机的Hadoop的一些注意事项
- CSRF 攻击的应对之道
- 类型A调用类型B