长连接通信设计

IM通信
消息推送(APP内、安卓苹果手机端、其他渠道)

最小化case

IM通信基础

通信

websocket

视频

webRtc

长连接集群

基础

长连接生命周期内主要有四个核心流程:建立连接、维持连接、上行请求、下行推送。
  • 1):建立连接 由长连接SDK发起,先通过控制层获取该设备的合法标识token和接入配置(接入点、接入协议),然后和接入层开始建联长连接,成功则长连接建立完成;
  • 2):维持连接 主要是通过长连接SDK定时发起心跳来保证长连接活跃;
  • 3):上行请求 上行请求由业务SDK发起,长连接SDK封装后发送给接入层,接入层根据请求来源发送给指定的业务Server;
  • 4):下行推送 下行推送由业务Server发起,经由路由层根据设备标识确定连接标识,然后将请求转发到对应的接入层,写入到设备指定连接上,经由长连接SDK转发给业务SDK。
    • notion image

技术方案

java netty
go——百万、千万、亿级现在用go 做长链接集群的很多
 
 
netty、或者 go 做长连接接集群(通过负载均衡连接上)
Redis 存储用户长链接集群位置映射,调用服务
心跳维持
Json、protobuf做通信协议

架构设计

notion image
notion image
notion image
统一长连接服务整体架构如图所示,整个服务包括统一长连接SDK、控制层、接入层、路由层四个部分组成。统一长连接SDK归属于客户端,控制层、接入层、路由层归属于服务端。每个组成部分在整体系统中的扮演的角色和功能如下。
1.统一长连接SDK:统一长连接SDK归属于客户端,负责连通业务SDK和长连接服务端,其主要职责包括:
  • 请求控制层,获取能够标识设备合法身份的token、长连接接入点和长连接接入协议;
  • 同长连接接入层建立、维护长连接,在连接状态异常时,主动触发连接重连,维护端上连接的稳定;
  • 转发各业务SDK请求到长连接服务;
  • 接受长连接下发的数据并将数据转发给指定的业务SDK。
2.控制层:长连接建联之前的一个前置服务,主要用来验证接入设备的合法性和决定设备的接入策略,其主要职责包括:
  • 生成和验证标识设备合法性的token;
  • 根据客户端属性下发对应的接入点;
  • 负责小流量控制策略等。
3.接入层:接入层作为统一长连接核心服务,承担了连接介入,连接维护、请求转发、下行推送等主要功能,是长连接核心逻辑和主要压力的承担者,其主要职责包括:
  • 对端通讯:负责与长连接SDK建立、维护、释放长连接;
  • 连接管理:负责连接管理、构建连接ID->连接信息的映射关系
  • 组管理:负责连接组的管理,构建组ID-> 连接信息的映射关系
  • 上行转发:接受并转发业务请求到业务后端,接受业务后端的返回,并写回给长连接SDK;
  • 下行推送:接受业务的推送请求,写到对应的长连接SDK。
4.路由层:负责构建设备标识和连接标识的映射关系,在业务指定设备标识进行推送的时候,提供设备标识查询连接标识的能力。

映射

用户——设备——长连接

多地区部署

1.长连接在国内三大运营商的华东、华北、华南地域均部署了接入点;部分业务需要支持海外业务,增加了香港机房的独立接入点入口;
2.根据业务量级和重要性,分大小集群部署,每个集群对应不同的域名,不同业务通过控制层下发域名分流到对应集群。主要目的针对于重点业务,提供独立部署的能力;对于次级业务,提供混部服务,降低成本和提高资源利用率;
3.针对接入层每个实例,将实例的配置和能够支持的连接数,控制在10w-20w量级,避免单个实例支持连接数过多,实例发生服务抖动时,对整个集群服务产生较大影响;单个实例支持的连接数有限制,减少实例内常态维护的goroutine数,减轻gc压力。
notion image

上行流量

接入层根据业务标识确认业务数据来源后,会通过RPC请求将业务数据转发给业务server,然后将业务Server的返回写回给端上。上行请求转发除了会转发业务上行请求数据外,也会讲长连接公参数据一并带给业务Server。除此外, 如果业务有诉求,在连接状态发生变化,比如连接断开等,长连接接入层也可以将该信号实时通知业务Server,以便业务Server 根据状态信号变化做进一步操作。
notion image
 

其他

go-websocket
woodylanUpdated Jan 8, 2025
gowebsocket
link1stUpdated Jan 8, 2025
go-push
owenliangUpdated Jan 9, 2025
 
千万级消息推送系统的设计与实践
Loading...
目录
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP