B站长连接实时消息系统的架构优化与实践

作者:公子世无双2024.11.27 20:30浏览量:38

简介:本文深入探讨了B站基于golang实现的千万级长连接实时消息系统的架构设计,包括长连接服务的框架设计、核心流程、功能列表及针对稳定性与高吞吐做的优化措施,如负载均衡、消息聚合与压缩等,并强调了这些优化在提升系统性能方面的作用。

在当今的互联网环境中,实时消息系统已经成为各类应用不可或缺的一部分,特别是对于像B站这样的直播平台来说,长连接实时消息系统的稳定性和高效性更是至关重要。本文将详细介绍B站千万级长连接实时消息系统的架构设计与实践,包括其框架设计、核心流程、功能列表以及针对稳定性与高吞吐做的相关优化。

一、架构设计

B站的长连接服务设计为多业务方共同使用一条长连接,这样的设计需要考虑到不同业务方、不同业务场景对长连接服务的诉求,同时也要明确长连接服务的边界,避免介入业务逻辑,从而影响后续长连接服务的迭代和发展。整体服务包含以下几个关键部分:

  1. 控制层:作为建连的前置调用,主要负责接入合法性校验、身份校验和路由管控。其职责包括用户身份鉴权、加密组装数据生成合法token,以及动态调度分配接入节点。
  2. 接入层:这是长连接的核心服务,主要负责卸载证书、协议对接和长连接维护。它负责和客户端建立并维护连接,管理连接id和roomid的映射关系,并处理上下行消息。
  3. 逻辑层:简化接入层,主要处理长连的业务功能,并记录连接ID各属性和各节点的映射关系。
  4. 消息分发层:负责将消息推送到接入层。
  5. 服务层:作为业务服务对接层,提供下行消息推送入口,并按一定策略限流以保护自身系统。

二、核心流程

长连接主要包含三个核心流程:

  1. 建立连接:由客户端发起,先通过控制层获取设备合法的token和接入点配置。
  2. 上行数据转发:目前主要是心跳数据,尚未有实际业务场景需求。
  3. 下行推送:由业务Server发起,经由服务层根据相关标识确定连接标识和接入节点,经过消息分发层,推送到对应的接入层,写入到指定连接上,然后下发到客户端。

三、功能列表

结合B站业务场景,下行数据推送提供以下通用功能:

  1. 用户级消息:指定推送给某些用户,如给某个主播发送邀请PK消息。
  2. 设备级消息:指定推送给某些设备,如针对未登录的设备推送客户端日志上报指令。
  3. 房间级消息:给某房间内的连接推送消息,如给直播间的所有在线用户推送弹幕消息。
  4. 分区消息:给某分区的房间推送消息,如给某个分区下所有开播的房间推送某个营收活动。
  5. 全区消息:给全平台用户推送消息,如给全部在线用户推送活动通知。

四、系统优化

随着B站业务的发展壮大,在线用户越来越多,长连系统的压力也越来越大。特别是在热门赛事直播期间,如S赛,全平台在线人数快达到千万,消息吞吐量上亿。为此,B站对长连系统进行了多项优化:

  1. 网络协议选择

    • TCP协议:提供可靠的连接和数据传输,适用于对数据可靠性要求较高的场景。
    • UDP协议:传输效率高但不可靠,适用于对数据可靠性要求不高的场景。
    • WebSocket协议:实现双向通信而不增加太多开销,更多用于web端。

    通过协议模块和连接模块的分离,实现了业务逻辑和通讯协议的隔离,方便迭代增加通讯协议,并简化兼容多通讯协议的实现难度。

  2. 负载均衡

    • 长连增加控制层,做负载均衡。控制层提供HTTP短连接口,基于客户端和各边缘节点实际情况,根据就近原则动态选择合适的接入节点。接入层支持水平扩展,控制层可以实时增加、减少分配节点。
  3. 消息队列与分发层

    • 增加消息队列和消息分发层,提高了系统的并发处理能力和稳定性,避免了因消息推送阻塞而导致的性能问题。
  4. 消息聚合与压缩

    • 针对热点房间的消息推送,采用消息聚合技术,降低了消息分发层对接入层的调用QPS,减轻了压力。
    • 消息聚合后,虽然降低了消息数量但增加了消息体大小,因此采用brotli压缩算法对消息进行压缩,减少了消息体大小并提升了吞吐量,同时降低了宽带使用成本。

五、实践效果

通过上述优化措施,B站的长连接实时消息系统在S赛期间成功应对了千万级在线用户和上亿条消息吞吐量的挑战。系统消息分发平均延迟耗时在1秒左右,消息到达率高达99%。这些优化措施不仅提升了系统的性能和稳定性,也为B站的直播业务提供了坚实的技术支撑。

六、产品关联

在长连接实时消息系统的优化过程中,千帆大模型开发与服务平台提供了强大的技术支持。该平台支持大规模并发处理、高效的数据传输和智能的负载均衡,为B站的长连接系统提供了稳定可靠的基础设施。通过千帆大模型开发与服务平台,B站能够更好地应对高并发场景下的挑战,提升用户体验和业务效率。

综上所述,B站千万级长连接实时消息系统的架构设计与实践是一项复杂而细致的工作。通过合理的架构设计、核心流程的优化以及多项性能提升措施的实施,B站成功打造了一个高效、稳定的长连接实时消息系统,为直播业务的快速发展提供了有力保障。