关于全球即时通讯系统架构的点滴思考

架构 专栏收录该内容
1 篇文章 0 订阅

    全球化的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++语言相比, 可以极大降低开发者的心智负担。

  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

wang_zong_sheng

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值