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

作者 | 罗松(西流)  阿里巴巴技术专家  

本文整理自架构师成长系列 2 月 12 日直播课程。

关注“阿里巴巴云原生”公众号,回复 “212”,即可获取对应直播回放链接及 PPT 下载链接。

前言

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

1.png

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

而在视频点播解决方案中, 视频转码是最消耗计算力的一个子系统,虽然您可以使用云上专门的转码服务,但在很多情况下,您会选择自己搭建转码服务。比如:

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

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

Serverless 自定义音视频处理

在介绍具体方案之前, 先介绍两款产品:

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

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

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

函数计算可靠的执行任意逻辑, 逻辑可以是利用 FFmpeg 对视频任何处理操作, 也可以更新视频 meta 数据到数据库等。

函数工作流对相应的函数进行编排, 比如第一步的函数是转码, 第二步的函数是转码成功后,将相应 meta 数据库写入数据库等。

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

简单视频处理系统

假设您是对短视频进行简单的处理, 架构方案图如下:
3.png

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

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

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

您可以直接基于示例工程部署您的简单音视频处理系统服务,因为音视频是强 CPU 密集型计算,强烈建议直接函数内存设置为 3G(2vCPU),但是当您想要处理大视频(比如 test_huge.mov ) 或者对小视频进行多种组合操作的时候, 您会发现函数还是大概率会执行失败,原因是函数计算的执行环境有最大执行时间为 10 分钟的限制,如果最大的 10 分钟不能满足您的需求, 您可以选择:

  • 对视频进行分片 -> 转码 -> 合成处理, 详情参考:fc-fnf-video-processing, 下文会详细介绍。
  • 联系函数计算团队(钉钉群号: 11721331) 或者提工单

    • 适当放宽执行时长限制
    • 申请使用更高的函数内存 12G(8vCPU)

为了突破函数计算执行环境的限制(或者说加快大视频的转码速度),引入函数工作流 FnF 去编排函数实现一个功能强大的全功能视频处理系统是一个很好的方案。

全功能视频处理系统-Example

4.gif

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

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

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

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

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

当然, 具体的处理流程是可以根据您的需求修改 fnf 工作流流程, 上面的只是一个示例。

示例效果:

5.gif

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

卓越的工程效率

 自建服务函数计算 + 函数工作流 Serverless
基础设施需要用户采购和管理
开发效率除了必要的业务逻辑开发,需要自己建立相同线上运行环境, 包括相关软件的安装、服务配置、安全更新等一系列问题只需要专注业务逻辑的开发, 配合 FUN 工具一键资源编排和部署
并行&分布式视频处理需要很强的开发能力和完善的监控系统来保证稳定性通过 FnF 资源编排即可实现多个视频的并行处理以及单个大视频的分布式处理,稳定性和监控交由云平台
学习上手成本除了编程语言开发能力和熟悉 FFmpeg 以外,可能使用 K8S 或弹性伸缩( ESS ),需要了解更多的产品、名词和参数的意义会编写对应的语言的函数代码和熟悉 FFmpeg 使用即可
项目上线周期在具体业务逻辑外耗费大量的时间和人力成本,保守估计大约 30 人天,包括硬件采购、软件和环境配置、系统开发、测试、监控报警、灰度发布系统等预计 3 人天, 开发调试(2人天)+ 压测观察(1 人天)

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

 自建服务函数计算 + 函数工作流 Serverless
弹性高可用需要自建负载均衡 (SLB),弹性伸缩,扩容缩容速度较 FC 慢FC系统固有毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,免运维,全功能视频处理系统 (FnF + FC) 压测;性能优异, 详情见下面的转码性能表
监控报警查询ECS 或者容器级别的 metrics提供更细粒度的 FnF 流程执行以及函数执行情况, 同时可以查询每次函数执行的 latency 和日志等, 更加完善的报警监控机制

比如短视频处理系统的监控的一个 Example:

5.gif

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

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

视频切片时间FC 转码耗时性能加速百分比
45s160s117.5%
25s100s188%
15s70s268.6%
10s45s417.8%
5s35s537.1%

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

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

更低的成本

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

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

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

6.png

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

  • 函数计算预付费 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,详情查看计费)。
ITEM平均CPU利用率计算费用总计
函数计算组合付费>=80%998(246.27×3+259.2)<= 998
按峰值预留ECS<=30%2190(10*219)>=2190
  • 在这个模型预估里面,可以看出 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

  • 格式转换
分辨率bitrate帧率FC 转码耗费时间FC 转码费用腾讯云视频处理费用成本下降百分比
标清 640*480618 kb/s2411s0.003665640.03288.5%
高清 1280*7201120 kb/s2431s0.010330440.06584.1%
超清 1920*10801942 kb/s2466s0.021993840.12682.5%
4K 3840*21605250 kb/s24260s0.08664240.55684.4%

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

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

从上表可以看出, 基于函数计算 + 函数工作流的方案在计算资源成本上具有显著优势。

操作部署

  • 免费开通函数计算,按量付费,函数计算有很大的免费额度。
  • 免费开通函数工作流,按量付费,函数工作流有很大的免费额度。
  • 免费开通文件存储服务NAS, 按量付费

详情见各自示例工程的 README:

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

总结

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

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

Q & A

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

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

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

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

A: 函数计算天生就是解决这些自定义问题, 你的代码你做主, 代码中快速执行几个 FFmpeg 的命令即可完成需求。
典型示例: fc-oss-ffmpeg

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

A: 详情见全功能视频处理系统(函数计算 + 函数工作流方案),after-process 中可以做一些自定义的操作, 您还可以基于此流程再做一些额外处理等, 比如:再增加后续流程;最开始增加 pre-process。

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

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

Q5: 您有很多超大的视频需要批量快速处理完, 比如每周五定期产生几百个 4G 以上的大视频, 但是希望当天几个小时后全部处理完。

A: 详情可以参考 全功能视频处理系统 (FnF + FC) 压测,  可以通过控制分片的大小, 可以使得每个大视频都有足够多的计算资源参与转码计算, 大大提高转码速度。

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

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

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

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

如果你对函数计算的能力还不是很了解,欢迎加入钉钉交流群:

7.png

2_

“阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/516565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学不动?Apache Member 教你评估实用技术的思路

导读&#xff1a;笔者从 2008 年开始工作到现在也有 11 个年头了&#xff0c;一路走来都在和数据打交道&#xff0c;做过很多大数据底层框架内核的开发 ( Hadoop&#xff0c;Pig&#xff0c;Tez&#xff0c;Spark&#xff0c;Livy )&#xff0c;现在是多个 Apache 项目的 PMC。…

linux异步IO的几种方法及重点案例

异步IO的方法 在Linux下&#xff0c;有几种常见的异步I/O&#xff08;Asynchronous I/O&#xff09;机制可供选择。以下是其中一些主要的异步I/O机制&#xff1a; POSIX AIO&#xff08;Asynchronous I/O&#xff09;&#xff1a;POSIX AIO是一种标准的异步I/O机制&#xff0c…

AI赋能案例—阿里云身份证OCR识别助力实现“无接触”式政务服务!

2020年初的这场疫情&#xff0c;是一场对突发性公共卫生事件应急处置的大考&#xff0c;也是对数字政务体系能力的检验。在保证不影响办事效率的情况&#xff0c;如何减少人员的接触是政务场景下的“防疫”关键&#xff01;日前由一窗&#xff08;北京&#xff09;互联网科技研…

Hive 终于等来了 Flink

Apache Spark 什么时候开始支持集成 Hive 功能&#xff1f;笔者相信只要使用过 Spark 的读者&#xff0c;应该都会说这是很久以前的事情了。 那 Apache Flink 什么时候支持与 Hive 的集成呢&#xff1f;读者可能有些疑惑&#xff0c;还没有支持吧&#xff0c;没用过&#xff1…

AWS拓展中国合作伙伴生态 加速企业数字化转型进程

在2020年9月9日举办的AWS合作伙伴峰会2020上&#xff0c;亚马逊云服务&#xff08;AWS&#xff09;宣布将携手APN合作伙伴进一步拓展中国合作伙伴生态&#xff0c;以更好地服务客户的数字化转型和数字创新需求。AWS宣布与毕马威、神州数码分别达成战略合作关系&#xff0c;结合…

如何在 Flink 中规划 RocksDB 内存容量?

本文描述了一些配置选项&#xff0c;这些选项将帮助您有效地管理规划 Apache Flink 中 RocksDB state backend 的内存大小。在前面的文章[1]中&#xff0c;我们描述了 Flink 中支持的可选 state backend 选项&#xff0c;本文将介绍跟 Flink 相关的一些 RocksDB 操作&#xff0…

能力差的程序员90%输在这点上!CTO:其实都是瞎努力!

在大数据浪潮当中&#xff0c;数据分析是这个时代的不二“掘金技能”。我们每一个人&#xff0c;每天无时无刻都在生产数据&#xff0c;一分钟内&#xff0c;微博上新发的数据量超过10万&#xff0c;b站的视频播放量超过600万......这些庞大的数字&#xff0c;意味着什么&#…

DNS高可用设计--软件高可用

DNS是网络的基础服务&#xff0c;网络上的各种应用对DNS的依赖性很高。DNS的稳定&#xff0c;直接决定了上层应用服务的稳定。那如何保障DNS服务的高可用呢&#xff1f; 我们先来看下高可用的概念&#xff1a; 高可用 高可用&#xff08;High availability&#xff09;&#…

十年磨一剑!支付宝自研数据库OceanBase通过阿里云向全球开放

近日&#xff0c;由支付宝自研的金融级分布式数据库OceanBase正式通过阿里云向全球开放&#xff0c;提供高可用、高性能、低成本的计算服务&#xff0c;企业可在云上获得“支付宝同款”的世界顶级数据库处理能力。 数据库和操作系统一样&#xff0c;是IT行业的重要基础软件&am…

20张图,带你搞懂高并发中的线程与线程池!

来源 | 码农的荒岛求生从这篇开始将会开启高性能、高并发系列&#xff0c;本篇是该系列的开篇&#xff0c;主要关注多线程以及线程池。一切要从CPU说起你可能会有疑问&#xff0c;讲多线程为什么要从CPU说起呢&#xff1f;原因很简单&#xff0c;在这里没有那些时髦的概念&…

React 常用UI库

流行的开源React UI组件库 http://www.material-ui.com/#/ 组件总览 - Ant Designhttps://ant.design/components/overview-cn/ 安装方式&#xff1a;yarn add antd ## 按需加载antd库样式 1. 安装&#xff1a;yarn add react-app-rewired customize-cra 2. 修改 package.j…

蚂蚁金服自研分布式关系数据库OceanBase上线阿里云

OceanBase于2020年3月在阿里云上完成了商业化&#xff0c;在公有云上正式对外开放。同步上线的还有相关的生态产品&#xff0c;包括集群管控&#xff08;OCP:OceanBase Cloud Platform&#xff09;&#xff0c;诊断&#xff08;OTA:OceanBase Tunning Advisor&#xff09;&…

【远程沟通】“云答辩”“云招聘”双管齐下,解救“最难毕业生”

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 突如其来的新冠病毒来势汹汹&#xff0c;给这届学生带来了梦寐以求的超长豪华假期&#xff0c;同时也让毕业生的论文答辩及毕…

从零开始学网络|搞懂OSI参考模型和TCP/IP分层模型,看这篇文章就够了

来源 | 网络工程师笔记前言今天和大家一起谈谈“网络”&#xff0c;之前写的文章可能不太通俗易懂&#xff0c;有人就问我可不可以写些比较容易理解的文章&#xff0c;我想了想那就从头说起吧&#xff01;那么什么是网络呢&#xff1f;百度百科的定义&#xff1a;网络是由若干节…

升级遗留代码的最佳实践

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 在传统企业甚至互联网企业中往往存在大量的遗留代码&#xff0c;这些遗留代码大多都能够正常工作&#xff0c;有的可能还运行…

字节、腾讯、阿里的开发为啥都在用Python?网友:又酸又香!

毋庸置疑&#xff0c;Python越来越被认可为程序员新时代的风口语言。 无论是刚入门的程序员&#xff0c;还是年薪百万的 BATJ 的大牛都无可否认&#xff1a;Python的应用能力是成为一名码农大神的必要项。 所以&#xff0c;很多程序员把Python当做第一语言来学习。 但对于Pytho…

【新冠疫情】5G到底能为抗疫做点啥,这篇文章终于讲清楚了

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 3月24日&#xff0c;工信部网站发布关于推动5G加快发展的五方面18条措施&#xff0c;其中包括推动“5G医疗健康”创新发展。 …

美甲帮:数加平台打造大数据架构

公司简介 美甲帮是牧云网络旗下一款专注美甲行业的社区型垂直电商APP&#xff0c;其核心业务包括美甲资讯、美甲行业认证、培训教学、商城、招聘等板块&#xff0c;目前已汇聚全国80%的美甲师&#xff0c;覆盖国内90%的美甲店&#xff0c;数以百万计的美甲从业人员和爱好者在此…

在容器上构建持续部署,这份超详细实践指南不要错过!

作者 | 倚天码农责编 | 刘静出品 | CSDN 博客要想理解持续集成和持续部署&#xff0c;先要了解它的部分组成&#xff0c;以及各个组成部分之间的关系。下面这张图是我见过的最简洁、清晰的持续部署和集成的关系图。图片来源&#xff08;https://www.sonatype.com/products-over…

docker nacos mysql nginx 集群一台

文章目录服务器编排一、mysql1. 创建挂载目录2. 赋予权限3. 运行容器4. 创建数据库5. 初始化脚本二、nacos-cluster2.1. nacos-cluster012.2. nacos-cluster022.3. nacos-cluster03三、nginx3.1. 运行临时容器3.2. 配置拷贝3.3. 删除临时容器3.4. 添加配置3.5. 运行容器四、验证…