网易云信实现真正“无上限人数”直播聊天室

社区编辑2018-05-14 16:14

今年以来,视频直播行业迎来了里程碑式的大爆发。以YY、斗鱼、网易BOBO为代表的视频直播平台层出不穷。有行业人士指出,以最低的码率为800K来算,一个同时在线百万的直播平台,每个月仅仅带宽费用就高达3000万到4000万元之间。据了解,2015年虎牙带宽的预算就高达2.6亿元,平均每月2000万。

 

直播聊天室卡顿之现象谈

 

按照传统的方式来搭建一个视频服务器,需要具备cache服务器、存储服务器、编码服务器、调度服务器等开发能力,系统维护人员和开发人员以及一系列的硬件要求。而庞大的用户访问量引发的卡顿、宕机、网站崩溃、用户无法访问等问题也成为是传统视频直播中的痛点。其中有一个非常显见的问题场景是热门视频直播间人数可能达到几十万人,一个人发消息几十万人接收,几十万人发消息几十万人接收,惊人的流量之下,直播聊天室时常出现卡顿和不流畅。视频直播后台服务器承受的能力有限,一旦用户访问量激增,冲破服务器承受范围,崩溃现象不可避免。去年,A站举办了一个AKB48投票活动,acer一拥而上,网站崩溃,投票被迫终止。而秀场直播行业下的主播家族规模大体有1-2万,同时观看视频直播人数更是可想而知。

 

现在市场上很多提供聊天室类服务的产品其实都是基于群的模式来实现,所以人数上限一直是一个难以突破的瓶颈,甚至有的服务直接使用“超大群”或“千人群”这样一种特殊群模式来满足用户对聊天室场景的需求。

 

那是否能从一个已有的成熟技术框架上改造一个聊天室出来呢?聊天室和论坛及IM群都具有一定的共性,看起来似乎可以将论坛架构改造成聊天室,也可以将IM群改造成聊天室。

 

如果将论坛架构改造成聊天室会如何?首先需要提高消息送达的即时性,由于论坛都是基于HTTP协议的,为了保证消息即时送达,需要客户端不断轮询服务器来获取新的消息,如果对即时性的要求越高,轮询时间就需要缩短,这种模式在用户量达到一定规模后无法承载。为了保证消息的高效送达,客户端与服务器之间的需要采用长连接机制,新消息的送达通过服务器主动向客户端下推来完成。

 

如果将已有的IM群改造成聊天室呢?由于群具有对离线消息关注度高的特性,所有的群消息在成员离线时需要持久化,因而群人数越多效率越低,也正是因为这个原因,一般的IM群都是有人数上限的,想把群改造成聊天室,就不能存储离线消息,所以这种方式并不顺畅。

 

网易云信如何实现真正“无上限人数”直播聊天室?

 

 

跨平台问题,云信SDK实现了多平台覆盖,对iOS、Android、Windows和Web等开发平台都提供了原生SDK版本,最大程度上解决了开发者跨平台需求的难题,使开发者能使用自己熟悉的开发语言和平台快速实现产品功能。此外对iOS和Android移动网络做弱网络优化,开发者无需关心移动网络切换时网络断线重连等问题,提高了连接的稳定性。在通信安全方面,对客户端与服务器端之间的通信数据都做了加密压缩处理,一则帮用户节省了网络流量,提高数据传输效率,二则保证了通信数据的安全性,规避数据泄露或中间人攻击等各种安全风险。

 

网关接入层面,网关接入层主要用于客户端长连接的管理,单个节点可以维护的长连接在十万量级。网关接入层还有一个重要功能是处理不同SDK的协议兼容问题,比如Web端使用的WebSocket协议和iOS端使用的基于TCP的私有协议并不一样,这类客户端与服务器在数据通信协议上的差异需要通过接入网关做协议转换;另外,云信网关接入层还要处理数据安全逻辑和跨网络的高可用逻辑;最后是广播消息的高效下行分发,网关接入节点需要将收到的广播消息分发到本节点上维护的客户端。

 

路由层,路由层承担网关接入层和业务层之间解耦的功能,数据包到达接入层之后通过路由层中转送达到正确的业务节点,同时具有负载均衡和高可用的能力,在单个业务节点处理能力达到瓶颈时能方便快速的扩容;路由层使业务层扩容对前置网关层完全透明,当一个网络的业务集群出现网络故障时,可以切换到备用网络,保证服务可用性。

 

业务层,聊天室功能上的业务节点主要用于处理收发聊天室消息,成员进出鉴权等具体的业务逻辑,集群内有众多节点,它们角色相互对等,单节点的故障可能会使集群的业务处理能力受影响但不会引起服务的中断,在节点故障发生时可以快速增加新的替代节点来恢复集群的业务处理能力;此外业务集群有多个网络环境的热备,以应对可能出现的区域性网络故障。

 

云信从四个层面入手最终实现真正的“无上限人数“直播聊天室的建设,具有跨平台、数据加密、高可用、易扩展、高并发低延迟的优点。网易云信基于网易15年的IM技术经验,无上限人数直播聊天室适用于在线教育、游戏直播、秀场直播、远程医疗、在线金融等多个领域。