伊对 App 视频直播场景在Serverless 做了哪些实践?
用户介绍 北京米连科技有限公司成立于 2015 年,是国家高新技术企业,旗下品牌伊对 App 上线于 2018 年,专注于移动端交友和相亲,将视频、直播和线上红娘创造性地融合在一 起,开辟了视频恋爱社区的独立赛道,为单身人群提供了全新的社交体验。截至 2020 年, 伊对 App 注册用户已达 1 亿,每月撮合线上相亲活动约 1000 万场,成为视频恋爱社交 垂直领域最具影响力的品牌之一。 业务需求 随着伊对 App 业务的快速增长,核心应用的系统规模和系统复杂度也在经历着翻天覆 地的变化。伊对 App 技术团队通过引进新的技术手段,维护整套系统架构的技术先进性, 以更好地支持业务需求,降低 IT 成本。从成立以来,伊对 App 的核心系统架构完成了多 次重大的升级,涉及微服务化、容器化、分布式数据库、大数据和人工智能等重要的技术, 特别在 Serverless 技术的探索方面,伊对 App 投入了很大精力,以充分享受到云计算 时代资源快速弹性伸缩的价值。 在伊对 App 的业务场景里面,视频直播是最为重要的环节,基于视频直播这个骨架, 可以融入线上红娘等多类创新业务模式,这也对视频直播的内容安全提出了极高的要求。不 论是自身通过 AI 技术对视频直播内容进行智能分析,还是应对监管的要求,都需要在每一 路视频直播流开始后,根据固定频率对视频进行截帧,并通过统一的审核服务对截帧生成的 图片进行处理。 在这个需求里面,截帧服务承担着关键职责,这个服务不仅需要通过 FFmpeg 命令 对每一路直播视频流进行截帧操作,还需要将生成的图片保存到对象存储 OSS,并将截帧 信息写入到 Kafka。这样下游的截帧服务就能从 Kafka 上拉取截帧信息,并从截帧信息 中得到图片在 OSS 中的地址,从而完成对于图片的审核。在这个架构中,引入 Kafka 是 为了通过异步处理机制缓解审核服务在业务高峰期的负载。业务痛点 FFmpeg 截帧命令使用非常简单,但这是一个对于 CPU 算力要求非常高的操作。根 据伊对 App 技术团队的多次试验,采用 ECS 部署截帧服务,是一个相对成本最优的选 择。如果按照每秒钟 1 次截帧的固定频繁,1 台 ECS 能够同时支撑大约数百路直播视频 流的截帧任务。为了保障业务高峰期的资源储备,伊对 App 准备了大量 ECS 来部署截 帧服务。跟绝大多数互联网应用一样,伊对 App 的负载也存在着波峰波谷,这样的波动对 伊对 App 整体的资源规划带来了极高的挑战,如果按照固定的 ECS 集群规模来部署截 帧服务,会存在两个非常明显的弊端: 为了支持业务高峰,必须按照高峰期的用户量来评估集群规模,在业务低峰期就会造成 巨大的浪费。 在某些场景下,比如节假日效应的带动,业务量会有突增,有可能需要对集群进行临时 扩容,这种情况下往往扩容速度会滞后于业务流的增速,造成部分业务的降级处理。 为了节省资源成本,伊对 App 也探索过很多种弹性伸缩策略,比如通过弹性 ECS 实 例配合容器化的方式部署应用,以实现集群规模能动态适配真实业务量的变化。但这些策略的实现都比较复杂,弹性伸缩能力都相对滞后。其中根本的原因是在传统的服务架构中,一 个应用启动后都是长期保持运行的,在运行期间会并发会处理多个业务需求,不管业务量如 何变化,这个应用占据的计算力都不会有本质的变化。 有没有一种直截了当的方式,可以在一路直播视频流开启后,拉起对应的计算力承接截 帧任务,而在视频流关闭后,自动将计算力释放呢?这样的方式不需要应用实例长驻,可以 实现真正的计算资源按需分配,也不需要借助额外的手段动态调整截帧服务的集群规模,是 一种最为理想的方案。解决方案及优势 1. 支持多种编程语言的 Runtime 伊对 App 的技术团队第一次和阿里云沟通 Serverless 方案的时候,阿里云的技术 人员推荐使用 Python 语言实现截帧函数,因为函数计算 FC 对于 Node.js、Python、 PHP、Java 等语言提供了原生的运行环境,而且像 Python 这样的脚本语言可以实现在 函数计算平台上直接修改调度代码,使用非常简单。其实函数计算 FC 对于开发语言没有 要求,任何主流的开发语言都可以很好的支持。通过函数计算 FC 提供的 Custom Runtime,可以为任务语言建立自定义的运行环境。Custom Runtime 本质上是一个 HTTP Server,这个 HTTP Server 接管了函数计算系统的所有请求,包括来自事件调 用或者 HTTP 函数调用。2. 极致弹性和高可用性 由于在 Serverless 架构下,每一路直播视频流都会拉起新的计算资源来承接截帧任 务,因此并不需要采用高规格的 ECS 实例同时并发处理多个截帧任务。通过反复的测试, 伊对 App 采取了最适合的函数计算实例来完成每路视频流的截帧任务。 函数计算 FC 在计算资源的启动方面做了大量优化,配合云化的资源池,能够在 100 毫秒的时间内调度大量计算实例,以承载特殊情况下突增的业务流量。为了更进一步的适配 伊对 App 的业务场景,阿里云函数计算团队还专门为伊对 App 提供了定时预热的方式, 以最大程度地保障业务高峰期冷启动计算资源的性能。这样极致的弹性伸缩能力是 Serverless 的专长,传统的应用架构的弹性伸缩依赖于底层计算资源的调度,以及复杂的 初始化工作,在计算实例的启动速度上远远达不到这个水平。 正常情况下,函数计算 FC 上一个普通弹性实例可运行时长为 10 分钟,此外还提供 了性能实例,以应对更高的资源需求,性能实例在可运行时长上也提升到了数小时。在伊对 App 的截帧场景中,单实例并不需要有很高的性能,但有必要伴随着直播视频流长期运行, 因此阿里云也为伊对 App 适当放开了弹性实例的运行时长限制:达到 1 小时。对于超过 1 小时的直播,同样可以支持:在截帧场景中,当一个函数实例将要达到运行时长限制的时 候,只需要再拉起一个新的函数实例对截帧任务进行接力就可以了,对于截帧业务的正常运 行不会有任何影响。 3. 节省资源,降本增效 函数计算 FC 在实现计算资源按需调度,按量计费的同时,还通过预留实例的模型更 进一步降低使用成本。根据初步的评估,在直播截帧这个业务场景上,通过基于函数计算 FC 的 Serverless 架构,能够帮助伊对 App 减少 20% 以上的资源成本开支。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。