轻松构建基于 Serverless 架构的弹性高可用音视频处理系统

前言

随着计算机技术和 Internet 的突飞猛进,视频点播技术因其良好的人机交互性和流媒体传输技术倍受教育、娱乐等行业青睐,而在当前, 云计算平台厂商的产品线不断成熟完善, 若是想要搭建视频点播类应用,告别刀耕火种, 直接上云会扫清硬件采购、 技术等各类障碍,以阿里云为例:html

这是一个很是典型的解决方案, 对象存储 OSS 能够支持海量视频存储,采集上传的视频被转码以适配各类终端,CDN 加速终端设备播放视频的速度。此外还有一些内容安全审查需求, 好比鉴黄、鉴恐等。git

而在视频点播解决方案中, 视频转码是最消耗计算力的一个子系统,虽然您可使用云上专门的转码服务,但在不少状况下,您会选择本身搭建转码服务。好比:github

  • 您已经在虚拟机/容器平台上基于 FFmpeg 部署了一套视频处理服务,可否在此基础上让它更弹性,更高的可用性?
  • 您的需求只是简单的转码需求,或是一些极其轻量的需求,好比获取 OSS 上视频前几帧的 GIF、获取视频或者音频的时长,本身搭建成本更低。
  • 各类格式的音频转换或者各类采样率自定义、音频降噪等功能
  • 您有更高级的自定义处理需求,好比视频转码完成后, 须要记录转码详情到数据库, 或者在转码完成后, 自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力。
  • 您有并发处理大量视频的需求。
  • 自定义视频处理流程中可能会有多种操做组合, 好比转码、加水印和生成视频首页 GIF。后续为视频处理系统增长新需求,好比调整转码参数,但愿新功能发布上线对在线服务无影响。
  • 您的视频源文件存放在 NAS 或者 ECS 云盘上,自建服务能够直接读取源文件处理,而不须要将它们再迁移到 OSS 上。

若是您的视频处理系统有上述需求,或者您指望实现一个 弹性高可用低成本免运维灵活支持任意处理逻辑 的视频处理系统,那么本文则是您期待的最佳实践方案。数据库

Serverless 自定义视频处理

在介绍具体方案以前, 先介绍两款产品:安全

  • 函数计算 :阿里云函数计算是事件驱动的全托管计算服务。经过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码,并提供日志查询、性能监控、报警等功能。
  • 函数工做流:函数工做流(Function Flow,如下简称 FnF)是一个用来协调多个分布式任务执行的全托管云服务。您能够用顺序,分支,并行等方式来编排分布式任务,FnF 会按照设定好的步骤可靠地协调任务执行,跟踪每一个任务的状态转换,并在必要时执行用户定义的重试逻辑,以确保工做流顺利完成。

免费开通函数计算,按量付费,函数计算有很大的免费额度。服务器

免费开通函数工做流,按量付费,函数工做流有很大的免费额度。架构

函数计算可靠的执行任意逻辑, 逻辑能够是利用 FFmpeg 对视频任何处理操做, 也能够更新视频 meta 数据到数据库等。
函数工做流对相应的函数进行编排, 好比第一步的函数是转码, 第二步的函数是转码成功后,将相应 meta 数据库写入数据库等。并发

至此,您应该初步理解了函数计算的自定义处理能力 + 函数工做流编排能力几乎知足您任何自定义处理的需求,接下来,本文以一个具体的示例展现基于函数计算和函数工做流打造的一个弹性高可用的 Serverless 视频处理系统,并与传统方案进行性能、成本和工程效率的对比。less

简单视频处理系统

假设您是对短视频进行简单的处理, 架构方案图以下:运维

如上图所示, 用户上传一个视频到 OSS, OSS 触发器自动触发函数执行, 函数调用 FFmpeg 进行视频转码, 而且将转码后的视频保存回 OSS。

OSS 事件触发器, 阿里云对象存储和函数计算无缝集成。您能够为各类类型的事件设置处理函数,当 OSS 系统捕获到指定类型的事件后,会自动调用函数处理。例如,您能够设置函数来处理 PutObject 事件,当您调用 OSS PutObject API 上传视频到 OSS 后,相关联的函数会自动触发来处理该视频。

简单视频处理系统示例工程地址

您能够直接基于示例工程部署您的简单视频处理系统服务, 可是当您想要处理大视频(好比 test_huge.mov ) 或者对小视频进行多种组合操做的时候, 您会发现函数很大几率会执行失败,缘由是函数计算的执行环境存在一些限制, 好比最大执行时间为 10 分钟, 最大内存为 3G。

为了突破函数计算执行环境的限制,引入函数工做流 FnF 去编排函数实现一个功能强大的全功能视频处理系统。

全功能视频处理系统

如上图所示, 假设用户上传一个 mov 格式的视频到 OSS,OSS 触发器自动触发函数执行, 函数调用 FnF,并行进行提取音频文件,同时进行 avi,mp4,flv 格式的转码。 因此您能够实现以下需求:

  • 一个视频文件能够同时被转码成各类格式以及其余各类自定义处理,好比增长水印处理或者在 after-process 更新信息到数据库等。
  • 当有多个文件同时上传到 OSS,函数计算会自动伸缩, 并行处理多个文件。
  • 对于每个视频,先进行切片处理,而后并行转码切片,最后合成,经过设置合理的切片时间,能够大大加速较大视频的转码速度。

所谓的视频切片,是将视频流按指定的时间间隔,切分红一系列分片文件,并生成一个索引文件记录分片文件的信息

  • 结合 NAS + 视频切片, 能够解决超大视频(大于 3G )的转码。

全功能视频处理系统示例工程地址

示例效果:

函数计算 + 函数工做流 Serverless 方案 VS 传统方案

卓越的工程效率

弹性伸缩免运维,性能优异

函数计算 + 函数工做流 Serverless 方案转码性能表

实验视频为是 89s 的 mov 文件 4K 视频: 4K.mov,云服务进行 mov -> mp4 普通转码须要消耗的时间为 188s, 将这个参考时间记为 T

性能加速百分比 = T / FC转码耗时

从上表能够看出,设置的视频切片时间越短, 视频转码时间越短, 函数计算能够自动瞬时调度出更多的计算资源来一块儿完成这个视频的转码, 转码性能优异。

更低的成本

  • 具备明显波峰波谷的视频处理场景(好比只有部分时间段有视频处理请求,其余时间不多甚至没有视频处理请求),选择按需付费,只需为实际使用的计算资源付费。
  • 没有明显波峰波谷的视频处理场景,可使用预付费(包年包月),成本仍然极具竞争力。

    函数计算成本优化最佳实践文档

    假设有一个基于 ECS 搭建的视频转码服务,因为是 CPU 密集型计算, 所以在这里将平均 CPU 利用率做为核心参考指标对评估成本,以一个月为周期,10 台 C5 ECS 的总计算力为例, 总的计算量约为 30% 场景下, 两个解决方案 CPU 资源利用率使用状况示意图大体以下:

    由上图预估出以下计费模型:

    • 函数计算预付费 3CU 一个月: 246.27 元, 计算能力等价于 ECS 计算型 C5
    • ECS 计算型 C5 (2vCPU,4GB)+云盘: 包月219 元
    • 函数计算按量付费占整个计算量的占比 <= 10%,费用约为 3×864×10% = 259.2 元,(3G 规格的函数满负载跑满一个月费用为:0.00011108×3×30×24×3600 = 863.8,详情查看计费

    在这个模型预估里面,能够看出 FC 方案具备很强的成本竞争力,在实际场景中, 基于 ECS 自建的视频转码服务 CPU 利用甚至很难达到 20%, 理由以下:

    • 可能只有部分时间段有视频转码请求
    • 为了用户体验,视频转码速度有必定的要求,可能一个视频转码就须要 10 台 ECS 并行处理来转码, 所以只能预备不少 ECS

    所以,在实际场景中, FC 在视频处理上的成本竞争力远强于上述模型。

  • 即便和云厂商视频转码服务单价 PK, 该方案仍有很强的成本竞争力

    经实验验证, 函数内存设置为3G,基于该方案从 mov 转码为 mp4 的费用概览表:

    实验视频为是 89s 的 mov 文件视频, 测试视频地址:
    480P.mov 720P.mov 1080P.mov 4K.mov
    测试命令: ffmpeg -i test.mov -preset superfast test.mp4

    格式转换

    成本降低百分比 = (腾讯云视频处理费用 - FC 转码费用)/ 腾讯云视频处理费用

    腾讯云视频处理,计费使用普通转码,转码时长不足一分钟,按照一分钟计算,这里计费采用的是 2 min,即便采用 1.5 min 计算, 成本降低百分比也在 80% 左右

    从上表能够看出, 基于函数计算 + 函数工做流的方案在计算资源成本上具备显著优点。

操做部署

免费开通函数计算,按量付费,函数计算有很大的免费额度。

免费开通函数工做流,按量付费,函数工做流有很大的免费额度。

免费开通文件存储服务NAS, 按量付费

详情见各自示例工程的 README

总结

基于函数计算 FC 和函数工做流 FnF 的弹性高可用视频处理系统自然继承了这两个产品的优势:

  • 无需采购和管理服务器等基础设施,只需专一视频处理业务逻辑的开发,大幅缩短项目交付时间和人力成本
  • 提供日志查询、性能监控、报警等功能快速排查故障
  • 以事件驱动的方式触发应用响应用户请求
  • 免运维,毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,性能优异
  • 成本极具竞争力

最后一一回答一下以前列出的问题:

Q1: 您已经在虚拟机/容器平台上基于 FFmpeg 部署了一套视频处理服务,可否在此基础上让它更弹性,更高的可用性?

A: 如工程示例所示,在虚拟机/容器平台上基于 FFmpeg 的服务能够轻松切换到函数计算, FFmpeg 相关命令能够直接移值到函数计算,改形成本较低, 同时自然继承了函数计算弹性高可用性特性。

Q2:您的需求只是简单的转码需求,或是一些极其轻量的需求,好比获取 OSS 上视频前几帧的 GIF 等。 本身搭建成本更低。

A: 函数计算天生就是解决这些自定义问题, 你的代码你作主, 代码中快速执行几个 FFmpeg 的命令便可完成需求。

Q3: 您有更高级的自定义处理需求,好比视频转码完成后, 须要记录转码详情到数据库, 或者在转码完成后, 自动将热度很高的视频预热到 CDN 上, 从而缓解源站压力。

A: 详情见全功能视频处理系统(函数计算 + 函数工做流方案),after-process 中能够作一些自定义的操做, 您还能够基于此流程再作一些额外处理等, 好比:

  • 再增长后续流程
  • 最开始增长 pre-process

Q4: 您有并发同时处理大量视频的需求。

A: 详情见全功能视频处理系统(函数计算 + 函数工做流方案), 当有多个文件同时上传到 OSS, 函数计算会自动伸缩, 并行处理多个文件。详情能够参考 全功能视频处理系统 (FnF + FC) 压测

Q5: 自定义视频处理流程中可能会有多种操做组合, 好比转码、加水印和生成视频首页 GIF,后续为视频处理系统增长新需求,好比调整转码参数,但愿新功能发布上线对在线服务无影响。

A: 详情见全功能视频处理系统(函数计算 + 函数工做流方案), FnF 只负责编排调用函数, 所以只须要更新相应的处理函数便可,同时函数有 version 和 alias 功能, 更好地控制灰度上线, 函数计算版本管理

Q6: 您的视频源文件存放在 NAS 或者 ECS 云盘上,自建服务能够直接读取源文件处理,而不须要将他们再迁移到 OSS 上。

A: 函数计算能够挂载 NAS, 直接对 NAS 中的文件进行处理

 

本文做者:rsong

原文连接

本文为阿里云内容,未经容许不得转载。

相关文章
相关标签/搜索