本篇文章3521字,读完约9分钟
自个人电脑时代以来,Oicq、qq、msn、飞信、imessage、微信和即时通讯就一直伴随着我们。目前,只有少数熟悉的产品从即时通讯开始,更多面向食品、服装、住房和交通的产品已经具备了即时通讯的功能。作为一种联系人们的功能,即时通讯在每一个场景中都是必不可少的。近日,网易云信首席技术官阕航宁在一次演讲中,就即时通讯云的技术问题,如何解决云服务不同阶段的稳定性问题,如何解决数百万聊天室的实时性和稳定性风险,分享了自己的独到见解。
即时通讯云平台面临的三座大山
虽然即时通讯已经存在了很长时间,但它在个人电脑时代和移动时代有不同的特点。
在网络连接、用户在线状态、流量计费、设备性能和运行环境等方面,即时通讯在两个时代都有所不同。
面对移动互联网时代的诸多特征,我们在打造即时通讯云平台时,必须翻越三座大山:第一是连接管理;二是服务协议满足低流量和低计算环境的特点;第三,它能够承受高并发性。在这个过程中,R&D团队将面临四个问题:技术难度大、整体开发优化周期长、业务细节复杂、上线后维护复杂度高。在这次讲话中,阙杭宁分析了四个问题中的第一个也是最重要的“技术”问题。
从技术上讲,作为一个拥有16年R&D经验的云平台,网易云信已经处于成熟阶段。现阶段,云平台容量大,日业务量大,增长速度慢,因此大客户新接入时对整体容量的影响不明显。在这个阶段,即时通讯云平台需要坚守两条决定成败的生命线。首先是数据的实时性能,如整个网络的网络调度和弱网络环境下数据实时性能的优化。另一方面,也有一些异常调用,如自循环,特别是一些应用程序具有大调用技术和大最终用户技术。如果发生这种情况,云平台需要与访问者进行良好的沟通,并应对资源竞争。下面,我们将了解更多关于即时通讯的实时性和稳定性的问题,以及如何在云信处理这些问题。 如何确保即时消息的即时性
首先,对于即时通讯云平台来说,稳定性是基础,而实时性是衡量即时通讯云平台的关键指标。
从整个网络的角度来看,即时通讯云面临的问题是客户端网络不能满足单个网络入口,包括bgp机房,不能满足全国或全球覆盖。这是即时通讯云目前面临的主要问题之一。由于单个门户无法满足复杂庞大的整个网络的网络需求,因此有必要使用更多的门户来覆盖更广泛的网络。云信的策略是通过选择代理或加速节点等服务器网络来取代一些特殊的客户网络。
我们可以通过拓扑图了解云信服务网络入口的网络结构(如下图所示)。我们将图中的服务门户视为bgp门户,绿色为正常覆盖区域,黄色为不稳定节点,红色为远程节点或链路。在图的左侧,可能有一些关于云服务的一般想法,而在右侧,有云信的当前策略。对于不稳定节点,云信将首先根据地理位置选择网络质量较好的机房,进行服务连接测试和区域网络测试,选择最佳节点,然后征收代理,将该区域的用户门户分发给代理。对于红色节点,云信将发布一组条目,客户端将选择是直接连接还是充当代理,或者通过lbs选择更好的节点。
在整个过程中,入口将被动态调整。云信将通过上次连接的门户缓存重新连接客户端,并保持isp不变。与此同时,云信还使用类似的惰性加载方法,为在短时间内重复连接且中断次数达到一定数量的客户端启动lbs请求。然而,在大多数情况下,由于手机运营商和家庭wi-fi可以保持稳定的连接,只有当服务节点增加和服务负载发生变化时,这种方法才能保证实时性。
从弱网络的角度来看,连接中断、连接更新和切换是频繁的。如何快速重建连接以及如何尽快添加信息也是即时通讯云目前面临的主要问题之一。为了解决这个问题,云信优化了连接探索和重新连接的效率,特别是对于android系统。云信·安卓建筑师曾经。与此同时,云信还将精简数据包,以减少弱网络下的数据包重传量,并改善对弱网络的支持。
即时通讯云的三大服务是即时通讯、实时音视频和聊天室,这三大服务对实时最为敏感。
在实时音视频场景中,用户普遍认为通话双方距离较近,延迟应该较低。但事实是它们之间的距离是圆的,所以网络传输距离必须相对较长,传输速度相对较慢。然而,两者之间的物理距离很近,但网络距离不一定很近,同一屋檐下的对话可能来自数据中心的另一个人。
从网易云信的经验来看,我们在做实时交互业务架构时设定了一个目标,尽量让实际的调度走得直,缩短整个传输距离,并提供多个通道,可以根据客户之间的网络探索进行分配。
在调度和优化方面,阙杭宁展示了云信的方法。他们使用用户ip、用户isp、国家isp和从位置到计算机房的数据作为调度介绍,并使用分配算法“速率=距离*优先级*rand/isp”进行动态调整。即距离、集群优先级和随机因素。反因子是isp,isp是主要维度。同时,参照双方的距离选择实际物理机房的位置,然后根据其业务优先级和随机因素计算出一组结果,取前几个向客户端报告,客户端将进行网络检测,然后选择最佳候选。
然而,实时音视频不仅面临距离带来的问题,还面临网络条件带来的差异。在wi-fi下,我们可以根据网络负载以更高的比特率和更高的质量传输数据。然而,在4g、3g甚至2g网络中,比特率需要降低。为了保证实时性,云服务需要针对不同的模型和网络制定不同的参数计划,如抗抖动算法和动态比特率。云信开发了一套防抖算法,结合了pjsip和webrtc的neteq算法,并对参数校准进行了大量的测试。目前,它可以达到800毫秒左右的防抖效果。除了抗抖动算法之外,为了改善对弱网络环境的支持,云信还对数据包进行了精简,以减少数据包的重复传输量。
目前,许多云服务平台开始支持实时聊天室,甚至基于此的初创公司。网易云信不仅支持这种商业场景,还支持没有最大人数限制的聊天室。
聊天室的特点是,一个拥有10000人的聊天室的信息量肯定会被放大几倍,除了有效的信息外,还会包含赞美、礼物甚至大量无效的信息。体系结构中的主要问题是组播性能。云信的经验是,分布式并行体系结构在体系结构中被采用,它可以无损失地横向扩展。就性能而言,云平台应该在消息放大过程中减少数据量。阙杭宁分享了他们的聊天室业务多层架构(如下图所示),分为客户端层、网关接入层、路由层和业务层。
在客户端,sdk可以进行多平台适配和移动弱网络优化。在重新连接效率方面,SDK还可以保存一些相关的连接授权信息,以提高重新连接的速度。云信曾在mdcc上详细分享过弱网络优化的经验。云信还可以做安全加密、压缩和解包、数据包分包等。在网关接入层,它侧重于长连接的管理、优化和广播分包,以便升级和跨网络交换更加顺畅。在路由层,云信支持面向服务的后端,并负责接收来自网关层的请求。路由层可以根据热更新策略划分簇入口,也可以实现横向扩展。在业务层面,微服务架构提供高可用性、灵活的整体扩展和横向扩展。
除了实时性,稳定性是即时通讯云平台的另一条生命线。
阙杭宁分享了一个例子。云信平台上有很多应用,一些应用一夜成名或大规模在线活动可能会带来巨大的容量波动。
用户的异常调用通常会给云平台带来资源攻击,同一平台上的其他应用也会受到影响。此时,考验的是云平台的扩展策略和架构的灵活性。那么应该采用什么策略来减少异常调用对其他应用程序的干扰呢?
云信有两个对策:快速扩张和单元化服务。快速扩展有两个关键,第一个是扩展的时机,第二个是环境准备和服务部署。在触发扩展之前,有必要观察子服务的集群容量和水位。水位上升和水量减少可能只是暂时的抖动。但是,如果此时有任务积压,生产速度会比消耗速度快得多,消耗速度是需要扩展的时间。第二个方面是环境准备和服务部署,以提高扩展速度。因为云信是建立在网易蜂窝的基础上的,云信的团队可以通过蜂窝的api快速创建运行环境。
第二项措施,统一服务。网易云信的组合服务也称为组合服务域,它基于微服务架构。以消息服务为例,它可以分为域消息服务和域消息服务。im不是域中唯一的功能。通过一些排列和组合,包括一些规格和容量的定义,使其具有实际的商业意义。开发人员将在他们各自的服务领域中享受底层数据层,并相互隔离。当出现抖动时,服务域可以将异常应用程序分割成独立的域,从而确保不会影响其他应用程序。在刚才的案例中,云信采取了同样的策略。
阙杭宁认为,做即时通讯云服务需要从客户终端了解即时通讯场景,然后设计api和后续教程指导。从他分享的案例中可以看出,云服务应该做的不是避免太多的资源冲突,给客户太多的商业行为规则和条例,而是使用灵活的架构和调整方法来满足访问者的需求,甚至是突然的非常规调用。
即时通讯已经成为许多产品的标准功能,实时互动直播更有可能成为未来内容、娱乐和协作产品的必备功能。解决即时通讯的实时挑战,如优化连接探索、精简数据包、开发防抖算法等。为了确保即时通讯的稳定性,即时通讯云服务具有灵活的分钟级扩展和统一的服务,只有在底层拥有如此成熟的架构和危机响应机制,它才能经受住未来10万甚至数百万用户数据的考验。