三体云——高可用实时音视频服务、极稳定、低延迟、高保障的直播云服务的演进之路,这些变化体现在三个方面:架构升级、系统调度、质量监控。本文来自张光在LiveVideoStackCon2019北京站的精彩分享。文/张光整理/LiveVideoStack大家好,我是三体云CTO张光。我今天演讲的主题是三体云如何提供高可用的实时音视频服务。2005年开始从事音视频技术研究,有十年移动音视频研发经验。我曾经是一家知名视频会议厂商的研发经理。负责人目前比较关注实时音视频技术的发展。1.高可用性1.1高可用性的定义众所周知,云服务厂商在与客户签订协议时,一般都会包含SLA协议,而SLA协议基本上定义了厂商需要为用户提供何种级别的服务。SLA协议中更多提到的是什么时候可以为客户提供服务,但是具体的使用效果并没有说清楚。因此,三体云对自己提出了更高的要求,希望所提供的服务能够在可用的同时,给用户带来更好的体验。1.2如何实现高可用三体云的前身是一家视频会议提供商。整体软件架构由视频会议过渡而来。要提供实时音视频服务,处理海量并发需求,优化系统架构是当务之急。升级,此外,一个好的调度系统也可以让音视频服务更好用。在提供优质服务后,三体云也希望建立完善的质量监控体系,更好更快地找出体系的不足,不断改进,为客户提供更好的服务。2.系统架构升级2.1适用于视频会议的早期系统架构由于三体云曾经是视频会议的系统架构,我们先从早期架构说起。如图所示,早期的业务节点和媒体节点部署在一个位置。如果没有高并发或者跨地域的需求,只需要一个master就可以提供服务。由于用户的分支变化较多,用户接入较多,需要在MASTER节点上使用SLAVE节点连接进行扩容。随着关卡数量的增加,延迟也会增加。主节点可能成为瓶颈。在这种结构下,所有状态都存储在业务服务器上,业务同步会非常复杂。节点宕机后,一般采用双机热备的方式处理。因此,三体云在转型为音视频业务后,需要对原有的系统架构进行全面升级。2.2更适合公网部署的解决方案2.2.1媒体访问转发系统架构升级的第一步是对媒体访问转发进行一些改动。做横向处理,相互之间没有分层,所有的媒体服务器都会向loadbalance节点汇报状态,帮助它做一些调度决策。对于媒体之间的转发部分,在视频会议架构中,节点转发需要先上报给根节点,然后才能发送到相应的节点,变化也如图所示。比如北京移动需要通过BGP中心节点帮助广东电信进行路由转发,还会有一个广东到上海的三线IDC来帮助转发。2.2.2信令和状态维护信令和状态维护的变化与之前媒体部分的变化类似。Loadbalance节点也做访问和分发工作,服务之间没有层级关系,都会上报给loadbalance,同时所有业务相关的房间和用户状态信息都会写入redis,相互之间进行数据同步生意会变得更容易。2.2.3结合上图可以看出,客户端要访问系统需要先连接loadbalance。目前,域名用于连接。接入后,将派发到指定的业务服务器。写入redis的时候,业务服务器分发后,首先会有一个验证创建状态的环节,完成后会给他分配一个媒体服务器。变更后的业务和媒体扩展比之前的树状结构要简单的多。新添加的媒体或业务无需挂在某个MASTER或SLAVE节点下,直接部署到平台上,注册到loadbalance上即可,业务和媒体的数量不需要一一绑定,扩展要相对灵活。三体云虽然实现了这些架构升级,但现实中仍然存在Loadbalance、redis集群瘫痪等问题,需要进一步完善框架,优化产品服务。2.2.4优化通过系统架构的升级优化,客户端访问时,会出现如图所示的两组loadbalance连接,分别写redis,保持两个loadbalance之间的高速同步,这样两个人就可以通过不同的loadbalance进行连续麦操作。但是这样做还是会导致部分用户无法连接到服务器。经排查,发现这些用户的域名已被劫持。所以三体云自己搭建了一套固定IP,和前两个loadbalance一起写进了SDK,当用户使用服务连接时,如果域名无法访问,会尝试连接静态IP访问,进一步保证了服务的连通性。3.智能调度3.1节点选择系统架构的升级在一定程度上提升了三体云服务的用户体验,但仅靠架构优化远远不能达到我们的预期,还需要智能调度进一步提升产品品质。中国幅员辽阔,国土面积大带来的问题就是会出现各种网络问题。如果要为异地用户提供服务,就需要部署更多的服务器。目前国内有200多台服务器。数据节点,节点部署需要根据不同的位置进行选择。首先,你需要找到一些可以部署服务器的机房。找到节点后,需要进行拨号测试,确保服务器可用并满足基本条件后,才能部署服务。部署成功后,内测即可上线,真正考验节点的是部署之后。.节点上线后,我们会对其数据进行监控,观察节点是否符合服务标准,最终剔除不合格的节点,重新选择节点部署在该区域。这样,节点选择过程将使三体云部署的所有节点都符合服务标准。3.2第一公里&最后一公里智能调度的第一点是让节点部署更贴近用户。最初,三体云通过IP库返回区域和运营商来选择,但实际上国内的网络环境非常复杂,IP库也存在一定的准确性问题。甚至服务器获取的IP也可能与媒体服务器获取的IP不一致。这些问题亟待解决。通过IP库返回地区和运营商是没有问题的。问题是运营商并没有彻底解决这件事。因此,在调度用户时,需要严格要求就近原则、运营商匹配原则、负载原则。此外,我们还需要做一些备份保障和数据统计,完善调用规则。3.3路径选择互联网上的实时音视频交互大多是跨地域连接的,三体云在解决这部分问题时也遵循四个原则。首先,通过检测机制检测节点间(按区域)的网络状态。毕竟国内目前有200多个服务器节点,想要检测到这些节点基本上是不可能的。因此检测分区域进行,每个区域将检测结果上报给决策中心统一调度。第二点是关于实时负载状态的统计。国内200多个服务器节点配置各不相同,必须将实时运行状态上报给决策中心,方便后续部署。最后,路径选择也需要基于成本的考虑,遵循路径最短的原则。3.4路径切换路径选择完成后,仍然会出现在真实的网络环境中。国内的网络,包括骨干网和单线机房,随时都会抖动,或者机房宕机。为了避免这些特殊情况对用户体验的影响,还需要在智能调度中加入路径切换,可以在使用过程中实时选择路径。3.5服务下线升级服务器部署不是一成不变后,算法改进和服务节点更换就是服务下线升级的过程,我们也希望在这个过程中有更好的用户体验。如果服务A需要下线升级,之前的方法是直接把服务A杀掉,靠客户端断线重连维持服务,但是这期间出现黑屏、卡顿等情况,对服务影响很大用户体验会发生。接下来的改进措施是先将服务A从loadbalance中注销,保证调度时没有新用户访问服务A,等待服务A的用户逐渐归零后再升级服务。但是现实中没办法等到所有用户都登录后A服务下线,所以三体云最终的改进方式是主动发信令通知用户从A服务迁移到B服务。在此期间,用户完全感知不到服务的下线和升级,没有中间断线的体验。4、质量监控服务器部署和智能调度完成后,用户已经可以保证用户可以一直访问三体云的业务,但是没有质量监控是无法观察到最终使用效果的,需要提前做好用户发现问题,或帮助客户共同提高服务质量。以下是三体云质量监控系统对客户的效果的一些指标统计。4.1质量监控实例
