新东方教育科技集团定位于以学生全面成长为核心,以科技为驱动力的综合性教育集团。新东方线上教育业务的云教室系统支持了视频直播、转码、点播等新东方所有在线教育场景。随着业务量的增大,由于直播转录及视频转码任务处理平台具有明显的波峰波谷特性,自建机房较低的资源利用率成为了业务的核心痛点。
为了提升计算资源利用率,进一步实现降本提效目标,在几次尝试之后,新东方踏上了 Serverless 实践之路。以下内容是由新东方教育科技集团云教室直播平台技术负责人 么敬国 在云栖大会的分享。
如何应对难以预测的业务量?
新东方除了自己的线上教育业务使用云教室平台以外,还通过美刻云直播对外开放了新东方的直播能力。云教室直播平台主要支持四种业务模式:
- 云教室:在线直播互动课,讲究互动性。
- 云点播:录播课。
- 云直播:大型直播,以主播为主。
- 智慧教室:软硬件结合的方案,提供类似于双师的教育模式。
直播+录播是新东方主推的课程交付模式。直播课程互动性强,可以实现良好的课堂互动,激发学生的学习兴趣;教师可以基于学生的课堂反馈或互动直接与学生进行互评,便于教师及时对教学环境作出微调,从而让教学过程更有针对性;通过互动和课堂答疑,可以让教学过程和效果更有保障,直播课程比较适合低幼年龄段的学生。
而面对高中及高中以上年龄段的学生,录播课更为合适,录播课特点为学习时间灵活,学生可以自主对学习内容进行检索,进行有选择性的学习,一般适用于高中和高中以上年龄段学生。录播课的优点在于可以对授课内容不断进行打磨、编辑,制作精品课程,需求量逐步加大。最初团队采用地录制技术方案为客户端录屏,将老师的直播进行录制,方便学生反复观看,但这样的方式出错率高, CPU 占用率也较高,无法对录制 UI 布局进行灵活定制,只能是看到什么录什么,这样的方式仅能满足低幼年龄段的课程需求。今年,新东方开始对接大学生线上教育业务,对录播课程的质量提出了更高的要求。团队开始考虑采用服务端录制的方式解决问题。服务端录制的两个核心点在于直播录制和视频标准化生产。我们的业务模式决定了我们很难准确预测业务量,因此,新东方关键的技术任务是实现计算弹性。
三种选择:函数计算脱颖而出
三种选择,函数计算脱颖而出要解决服务端录制的问题,摆在团队面前的有三个可选的技术路线:
- 直接使用 ECS 自建,该方案的优势是灵活性比较高,但问题在于计算没有弹性,虽然云厂商提供了弹性分配 ECS 资源 API ,但是自己实现整个计算弹性需要巨大的开发量,同时后续运维比较复杂,资源成本高,难以做到标准化。
- 云录屏 SaaS 方案,这个方案的优势是具备标准化的服务,研发投入比较少,运维工作也较少,但是问题在于灵活性差,资源成本极高,难以进行进一步的性能优化。我们希望寻找一家成熟的 SaaS 厂商提供地服务以快速支持业务,但是经过试用,这些平台的成熟度和技术指标等均无法满足我们的需求。
- 采用阿里云函数计算 FC,我们发现阿里云的函数计算产品可以完美满足计算的弹性需求,只需要关注具体需求在平台上做开发即可,研发投入小同时免运维,开发过程自主可控,灵活性高,可按需使用极大降低了使用成本,实现标准化相对容易。不过函数计算是一个比较新的技术,团队需要一段时间来熟悉。
经过反复比对,新东方团队选择使用函数计算来解决服务端录制问题。
新东方的 Serverless 实践
录播转码,函数计算小试牛刀
我们首先在录播转码场景下进行了尝试。录播转码的核心诉求是对直播流进行实时转码,保存为标准的视频格式,方便后续加工使用。
在这个场景中,我们第一次感受到了函数计算 FC 带来的弹性优势。在老师进入房间发起转码请求后,可快速启动函数实例进行转码。在上课结束后,结束转码任务,将临时音视频结果上传至云存储后即可立即释放函数实例,不会存在任何计算资源的浪费。
有了在录播转码项目中应用函数计算的经验以后,我们对函数计算方案有了更大的信心。
初露锋芒,函数计算直播合流转码方案
之后,我们启动了云端录制项目。使用 Chrome 浏览器加入直播房间,对浏览器界面进行截屏录制,该方案的关键在于弹性提供浏览器实例。
因此,我们利用阿里云函数计算启动 Linux 容器,在 Linux 容器运行 Chrome 浏览器实现弹性提供浏览器实例。
整个的录制流程是这样的:老师进入教室以后,开始进行音视频推流以及白板操作。同时,录制平台发起录制请求,启动函数处理,开始接收教室的音视频流和白板操作,并在浏览器展现整个教室的画面,同时做截屏。课程结束后,平台发起结束录制请求,函数计算平台会优雅地终止实例。终止之前,实例会将临时结果上传至云存储,随后函数实例被销毁,整个过程不存在任何资源浪费。
开箱即用的可观测能力
我们认为,可观测能力对于函数计算平台至关重要。首先,业务高峰期需要启动大量函数实例,因此,必须要完整的 metrics、log 和 trace 才能有效对海量实例进行监控。其次,因为函数计算实例按需创建,完成任务之后被销毁,平台必须保存完整的日志,以便发现问题后开发人员进行排错。
我们曾在开发录制服务的过程中面临的问题是:启动函数实例以后,Chrome 浏览器要访问直播服务,此时网络出现问题,导致录制失败。后续我们使用阿里云 SLS 日志平台查看日志,发现 Chrome 浏览器内核对网络处理过于敏感。找出问题后对症下药,加入了重试机制,问题得以解决。
超出预期:函数计算带来更多惊喜
在使用函数计算技术之前,我们期望它能通过百毫秒拉起上万个实例,定时预热彻底解决冷启动困难,帮助我们承载直播转码和录屏业务业务洪峰。有效应对大规模突发在线流量,按量付费,提高资源利用率,减少 20% 资源成本开支,极大程度降低运维成本,让我们可以只专注业务创新。
在实际使用的过程中,我们发现函数计算不但能够中我们完美满足我们的需求,还带来了惊喜:让我们的开发人员只需掌握几个新概念、使用几个 API ,即可轻松使用平台。函数计算方案运行一段时间以来,云资源费用得到较大降低。另外,函数计算允许根据自己的业务场景制作模板,并且可供其他业务方使用,也为我们带来意外收获。
作者 | 么敬国(新东方教育科技集团云教室直播平台技术负责人)& 灏正(阿里云 Serverless 架构师)
本文为阿里云原创内容,未经允许不得转载。