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

前言

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

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

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

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

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

Serverless 自定义视频处理

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

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

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

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

简单视频处理系统

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

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

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

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

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

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

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

性能加速百分比 = 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,详情查看计费)
    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% 左右

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

操作部署

详情见各自示例工程的 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 中的文件进行处理


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

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

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

相关文章

Centos/Red Hat6.8 安装、配置、启动Gitlab (内网环境)心得分享

文章目录一、Gitlab下载1. Gitlab官网下载二、分析思路2.1. 分析2.2. 代码托管平台2.3. 镜像站二、Gitlab 重新加载配置异常2.1. 异常现象2.2. 分析定位三、百度解决问题3.1. 百度类似异常3.2. 参考博文3.3. 解决方案3.4. 执行测试3.5. 结论四、官网issues 014.1. 找官网issues…

祝贺我的同事王坚当选院士!

刚刚&#xff0c; 收到一个激动人心的消息&#xff1a; 原文链接 本文为云栖社区原创内容&#xff0c;未经允许不得转载。

带你从零入门 Serverless | 一文详解 Serverless 架构模式

作者 | Hongqi 阿里云高级技术专家责编 | Carol来源 | Serverless本文整理自《Serverless 技术公开课》什么是 Serverless 架构&#xff1f;按照 CNCF 对 Serverless 计算的定义&#xff0c;Serverless 架构应该是采用 FaaS&#xff08;函数即服务&#xff09;和 BaaS&#xf…

端智能揭秘|促使双十一GMV大幅提升,手淘用了什么秘密武器?

作者|莫凌、桑杨、明依 出品|阿里巴巴新零售淘系技术部 导读&#xff1a;信息流作为手淘的一大流量入口&#xff0c;对手淘的浏览效率转化和流量分发起到至关重要的作用。在探索如何给用户推荐其喜欢的商品这条路上&#xff0c;我们首次将端计算大规模应用在手淘客户端&#xf…

bug:The selected directory is not a valid home for Go SDK

问题描述&#xff1a; 使用IDEA插件配置go开发环境无法选择已经安装配置好的SDK 当选择local中的SDK时&#xff0c;出现如下错误&#xff1a; The selected directory is not a valid home for Go SDK解决方案&#xff1a; 在自己的SDK目录C:\Program Files\Go\src\runtime\…

Dataphin的代码自动化能力如何助力商业决策

前言 随着大数据趋势的迅速增长&#xff0c;数据的重要性与日俱增&#xff0c;企业内看数据、用数据的诉求越来越强烈&#xff0c;其中最常见的就是各种经营报表数据&#xff1a; 老板每日早晨9点准时需要看到企业核心的经营数据&#xff0c;以便进行企业战略及方向决策 业务负…

Gitlab14.x 安装、配置、启动 (Centos/Red Hat7/8.x)

文章目录一、下载、安装、配置依赖1. 安装配置需要的依赖2. Gitlab下载3. 安装Gitlab4. 配置external_url5. 重新加载配置文件6. 查看服务状态7. 配置防火墙8. 浏览器验证9. 寻找密码信息10. 查看密码11. 重新登陆12. 修改密码13. 重新登陆14. Gitlab常用命令声明&#xff1a;C…

如何通过Dataphin构建数据中台新增100万用户?

欢迎来到数据中台小讲堂&#xff01;这一期我们来看看&#xff0c;作为阿里巴巴数据中台(OneData - OneModel、OneID、OneService)方法论的产品载体&#xff0c;Dataphin如何帮助传统零售企业实现数字化转型&#xff0c;并在短时间内新增100万用户&#xff1f; 传统营销的痛点…

真香!3个月0基础转型大厂数据分析师,他做对了什么?

年初的黑天鹅打乱了我的求职阵脚&#xff0c;专业不对口&#xff0c;无实习经验&#xff0c;在求职路上的竞争优势几乎为0&#xff0c;然而&#xff0c;开启自救模式后&#xff0c;我顺利成为了头条数据分析师&#xff0c;下面我就讲讲人生是怎么开挂的。随着人工智能普及&…

36氪联合阿里云,共同研制中小企业发展「催化剂」

互联网的“中场战事” 伴随着第一代原生互联网人进入中年&#xff0c;高速发展了20多年的互联网也开始进入了中场阶段。 现阶段的创新创业领域&#xff0c;商业逻辑已日渐清晰&#xff0c;标志性公司陆续出现&#xff0c;整个行业大家在争夺什么、竞争什么都已摆在眼前。 大…

如何在项目运行过程中动态修改邮箱发件人的配置信息

&#x1f3a8;领域&#xff1a;Java后端开发&#x1f525;收录专栏&#xff1a; 框架 &#x1f412;个人主页&#xff1a;BreezAm &#x1f496;Gitee&#xff1a;https://gitee.com/BreezAm ✨个人标签&#xff1a;【后端】【大数据】【前端】【运维】 文章目录业务场景场景分…

Centos/Red Hat7/8.x 安装、配置、启动Gitlab14.x (语言和主题配置)

接上一篇&#xff1a;Centos/Red Hat7/8.x 安装、配置、启动Gitlab14.x 文章目录1. 简体中文2. 个性化主题1. 简体中文 2. 个性化主题

Hive数据如何同步到MaxCompute之实践讲解

摘要&#xff1a;本次分享主要介绍 Hive数据如何迁移到MaxCompute。MMA&#xff08;MaxCompute Migration Assist&#xff09;是一款MaxCompute数据迁移工具&#xff0c;本文将为大家介绍MMA工具的功能、技术架构和实现原理&#xff0c;再通过实际操作MMA&#xff0c;演示将Hiv…

CPU 明明 8 个核,网卡为啥拼命折腾一号核?

作者 | 编程技术宇宙责编 | Carol封图 | CSDN 下载自视觉中国中断机制我是CPU一号车间的阿Q&#xff0c;我又来了&#xff01;我们日常的工作就是不断执行代码指令&#xff0c;不过这看似简单的工作背后其实也并不轻松。咱不能闷着头啥也不管一个劲的只管执行代码&#xff0c;还…

2684亿销售额背后的阿里AI技术

人工智能生态发展趋势 大家好&#xff0c;我是林伟&#xff0c;我今天演讲的主题是《AI 突破无限可能—5 亿消费者的云上双 11》。我本人是做系统出身的&#xff0c;但在最近的一些会议上发现&#xff0c;越来越多做系统出身的人开始研究 AI。在 90 年代末的那波热潮里&#x…

FTP多用户权限 linux环境 一站式解决方案(基础篇)

需求背景&#xff1a;第三方厂商中国移动、电信、联通、微软、京东与我司内部进行接口交易&#xff0c;采用ftp协议&#xff0c;外部厂商负责上传文件&#xff0c;内部系统负责下载各厂商上传的文件。 文章目录一、用户与目录1. 用户与目录约定2. 用户创建3. 用户密码4. 创建用…

gateway集成nacos、loadbalancer实现自定义负载均衡器,带源码解析(cloud版本:2021.0.3|boot版本:2.7.4)[场景1:灰度发布(金丝雀发布)]

&#x1f3a8;领域&#xff1a;Java后端开发&#x1f525;收录专栏&#xff1a; 系统设计与实战 &#x1f412;个人主页&#xff1a;BreezAm &#x1f496;Gitee&#xff1a;https://gitee.com/BreezAm ✨个人标签&#xff1a;【后端】【大数据】【前端】【运维】 文章目录前言…

高德服务单元化方案和架构实践

导读&#xff1a;本文主要介绍了高德在服务单元化建设方面的一些实践经验&#xff0c;服务单元化建设面临很多共性问题&#xff0c;如请求路由、单元封闭、数据同步&#xff0c;有的有成熟方案可以借鉴和使用&#xff0c;但不同公司的业务不尽相同&#xff0c;要尽可能的结合业…

免费直播:1小时带你体验Python车牌识别实战

Python基础学会了&#xff0c;实战又是爬虫&#xff1f;太枯燥&#xff1f;别无聊&#xff0c;CSDN学院邀请章秀淞老师开设技术直播课&#xff1a;1小时带你体验车牌识别实战。让你从众多车中&#xff0c;能用Python技术找到夏树上的那辆叔叔的奔驰车牌&#xff08;玩笑&#x…

IDEA 断点调试高级玩法 |debug高手必看!

文章目录条件表达式//条件表达式public static void main(String[] args) {for (int i 0; i < 10; i) {System.out.println(i);}} }需求1&#xff1a; 当i2时&#xff0c;断点停顿 添加断点&#xff0c;鼠标右击添加自定义条件即可 需求2&#xff1a; 当i偶数时&#xff…