文|古德
网易云信服务端开发工程师
背景
基于网易云信 linux 录制 sdk, 可以通过以 sdk 拉流的方式在开发者的 linux 服务器上实现本地录制的功能;可以实现录制的定制化开发,录制文件存储在本地具有更高的安全性。本地服务端录制在金融业或对于数据安全有很高要求的场景下非常重要,同时具有更高的灵活性(比如自定义水印),这也是本地服务端录制的一个重要优势。
在实际客户接入的场景下,客户方的开发者大多是 Java 开发,对接 linux 录制 sdk,需要封装 jni 桥接包,还需要考虑录制的负载均衡,录制服务的可靠性等问题,接入成本很高。为了在降低接入成本的同时又能实现可扩展的高可用本地服务端录制服务,搭建一套本地服务端录制的分布式集群系统显得格外重要。
下面我们介绍一下本地服务端录制分布式集群的特性。
系统特性
为了实现上面的特性,整个系统的架构是什么样的呢?下面来介绍一下。
整体架构
架构上整体分为三层
接口层
业务方服务端可以直接使用云信的 Java sdk 控制录制的开始、布局的更新以及录制结束。
服务层
提供标准的 rest api 的接口供接口层调用,同时接口受到秘钥加密鉴权的安全保护。
为了让集群内的机器协调执行录制任务,服务层在入口处有一个调度层,负责计算集群内的各个节点的录制并发数。结合节点机器的配置权重,在开始录制时实时计算录制任务应该分配到哪台节点最合适。在开始录制后,更新录制布局及结束录制时,也是在调度层根据录制编号将请求自动路由到正确的录制节点上。在追求高可用性的背景下,可以选择使用多台录制机器同时执行一个房间的录制任务。
注册中心,集群中的每一个录制节点都将自己注册到注册中心上。每一个录制节点都和录制中心保持心跳请求。当录制节点下线后,调度层会自动发现更新后的注册列表。通过注册中心可以实现不停机扩容,只要启动新的录制节点注册到注册中心后,集群感知到新的录制节点就会按照指定的负载均衡策略将录制请求路由到新的录制机器节点上了。
注册中心被设计成一个高可用的注册中心,只要超过半数的注册中心在线就可以保证服务正常。
注册中心具备主节点选举机制,从而方便实现由主节点来执行的集群内单机定时任务。
同时各个录制点在上报心跳的时候,会将该节点的机器负载,录制并发数等信息一并发送到注册中心,供调度层针对采集的数据进行合理的调度路由。
录制执行器负责调用云信本地服务端录制 sdk 动态链接库,实现拉流录制核心控制。每一个房间的录制会被分配一个单独的进程来执行。录制执行器管理器通过 socket 与录制执行器通信,控制开始结束录制和更新布局等操作,同时也通过 socket 探测录制执行器的健康状况,当发现无法探测到录制执行器时即时告警。
说到告警,自然少不了对集群的监控。全面的监控可以保证对服务整体运行状态做到了如指掌,更能够提前发现问题即时应对,甚至做到自动容灾。因为录制对 CPU 资源的消耗非常大,所以对集群 CPU 使用率的监控是必不可少的。
服务断路保护器,是指在服务 CPU 或录制并发数超过设定的阈值以上之后,服务集群将拒绝新的开始录制的请求,已达到保护录制集群稳定性的目的。
配置管理模块用来保存集群的系统配置,以及业务配置。更新配置后,整个集群会自动感知到配置更新。
对象存储模块负责存储录制文件。在录制完成后,可以将机器上的录制文件根据配置自由上传到期望的存储服务中,比如传统的 ftp 服务器、网易的 NOS 服务、阿里的 OSS 服务等对象存储服务。
定时任务,这里分有两种定时任务,一种是全集群中同一时间只能有一个机器在执行的任务(这里叫它 Leader Job,由集群中的主节点负责执行),另外一种是集群内所有的机器都要执行的任务(这里叫它 Distribute Job)。
Leader Job,典型的一个任务是扫描整个集群中所有正在录制的记录,对他们进行健康探测,发现录制异常时,完成录制异常扫尾操作,如杀掉录制进程,更新录制记录状态等。还会发出告警通知。
Distribute Job,其中一个重要的任务是要定时清理掉磁盘上过期的录制文件及对应的日志文件,回收磁盘空间。
数据层
大家可以看到上图中黄色区域内的部分就是我们的本地服务端集群服务。外围的应用服务器对整个录制过程透明,不需要关心录制内部复杂的实现逻辑。当录制结束后,应用服务器就会收到录制文件的抄送请求。
针对上面的拓扑图,大家对整体请求的时序可能还不太清楚,那么下面再带大家了解一下服务的时序流程。
时序流程步骤
为了减少系统对外部系统的依赖,降低系统架构复杂度,从而开发了嵌入式集成部署的注册中心,录制节点同时也具备了注册中心的功能。
如上图所示,作为注册中心节点的录制节点,会相互发送心跳保活,并选举出 leader 节点。新加入集群的录制节点中,内部的注册中心模块是没有激活的,只有录制功能。
总结
本地服务端录制不仅可以服务于金融行业,任何对数据安全有更高要求的场景都适合采用本地服务端录制方案。
本文主要介绍了网易云信本地服务端集群录制的整体系统架构。系统性地解决了使用本地服务端录制时并发录制场景及可用性的问题,帮助客户快速实现安全可靠的本地服务端录制。欢迎大家共同探讨与交流。
作者介绍
古德,网易云信服务端开发工程师。负责网易会议账户体系、互动直播、本地服务端集群录制等模块的设计与研发。对微服务、分布式事务等中间件技术方面有一定的经验。热爱技术喜欢 coding,善于面向对象设计编程、领域驱动设计与代码优化重构。
相关阅读推荐