欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于实时消息推送系统的架构之浅见

程序员文章站 2022-07-13 15:46:19
...

最近,有一个朋友问了一个问题:如何实现实时消息推送架构,当时只是说了比较笼统的概念,并没有进行深入的探讨。再加上时间比较也就没有进行一个归总。刚好今天进行一个梳理。具体内容如下


关于实时消息推送系统的架构之浅见
            
    
    博客分类: 架构
 

那么整体的设计如上。接下来我们针对每一块进行剖析

1、协议的选择

   关于协议的选择这块,现在比较常用的方式:XMPP、MQTT、自定义协议等,那么关于每种协议的优缺点,这里面我们不进行细致描述。只要知道最终的目的:

   (1)、协议轻量、编解码速度快捷;

   (2)、流量消耗小

2、连接方式 常用的连接方式:

      轮询、长连接、websocket等各种方式同样具有不同的优缺点,具体的目的

    (1)、连接稳定;

    (2)、不同网络环境使用不同的心跳间隔;

    (3)、app连接消耗平衡;

3、海量连接 针对海量连接都会使用到负载均衡;常见的方式:

    lvs/nginx做负载均衡、服务端负载均衡、客户端负载均衡;首先我们应该明白国内的网络环境关于dns的问题;可以通过ip来直接完成;通过预埋ip或者提供webservice来获取相关的ip等方式;

 关于负载均衡:

          (1)、lvs负载均衡存在单点问题:可通过提供一个vip来做高可用

          (2)、服务端负载均衡:选择负载低的服务器

          (3)、客户端负载均衡:采用跑马策略来完成负载均衡,同时也解决跨运营商网络慢的问题

4、消息重复 一般情况下,在网络正常的情况下,消息的发送可能一个平衡的状态。但是在不同网络环境2G/3G/4G/WIFI等,可能我们就面临消息重复的问题。在这个问题上我们一般采取的方式通过将回执--响应转为

        (1)、第一阶段欲请求:服务端发送通知到客户端,客户端接收到通知之后返回最近接收消息的最大序列号(将msg绑定序列号);

        (2)、服务端验证序列号避免消息重复;

        (3)、第二阶段正式发送消息:发送消息

5、运维、扩展 在上图的架构中并没有存在 服务管理、运营监控以及预埋服务(解决dns问题)

6、架构介绍 整个架构在逻辑上,划分四层:

    (1)、接口服务:提供推送服务接入

    (2)、分发服务:主要完成下行消息和上行消息的路由;同时提供一个对应的路由表,主要提供 clientId、GroupId、ServerId之间的关系映射。

    (3)、订阅信息:通过订阅的不同的消息,完成对应的消息的推送

    (4)、存储:防止消息的丢失 基本上整个架构就这样。其中有很多细节并没有进行一个很详细的阐述。同时在构建一个实时推送系统存在很多坑。这里面也没有进行详细描述和分析。

  • 关于实时消息推送系统的架构之浅见
            
    
    博客分类: 架构
  • 大小: 16.8 KB