360怎么做网站搜索,网站在哪做,实体店100个营销策略,网上推广怎么拉客户简介#xff1a; 对于负责建设视频处理系统的技术团队而言#xff0c;这样的业务场景就留给了他们一系列的挑战。
前言
近些年#xff0c;在线教育行业飞速发展#xff0c;为整个社会的知识传播提供了前所未有的便利性。通过多种形式的在线教育平台#xff0c;学员与教师…简介 对于负责建设视频处理系统的技术团队而言这样的业务场景就留给了他们一系列的挑战。
前言
近些年在线教育行业飞速发展为整个社会的知识传播提供了前所未有的便利性。通过多种形式的在线教育平台学员与教师即使相隔万里也可以开展教学活动。借助丰富的网络课件学员还可以随时随地的进行学习真正打破了时间和空间的限制。在各种形式的网络课件中视频课件自然是最直观表现力最丰富的形式因此视频课件的市场占有率也在逐年提升。
视频处理需求分析
对于在线教育领域的视频课件出品方而言每天都要对大量视频内容进行处理下图展示了一个比较典型的场景 1用户上传一个视频到平台后会先在对象存储中对视频源文件进行暂存。
2平台对视频进行预处理并打上水印。
3平台将视频文件转换为其他格式并对分辨率进行调整以适配各种不同的终端设备的要求。
4将处理好的视频文件保存回对象存储并同步到CDN进行加速。
虽然从流程上来讲这个场景比较简单但在技术上的挑战其实是非常大的。视频课件的原作者来自于在线教育平台的广大用户可能是平台负责内容输出的内部用户也有可能是签约的教师或者是平台认证过的分享型用户。用户上传视频的操作并没有固定的频率往往集中在几个时间段存在明显的波峰波谷。在业务高峰期视频处理的需求量非常大有的在线教育企业每天要完成数万个视频的转码工作。对于负责建设视频处理系统的技术团队而言这样的业务场景就留给了他们一系列的挑战
1如何确保这套系统在业务高峰期的高可用性
2如何让每一个上传的视频尽可能快的处理完
3如何尽可能的降低资源成本
4如何高效率的应对需求的频繁变更
基于这几个诉求我们结合云计算的特点来分析一下可行的解决方案。
使用SaaS化的云服务完成视频处理
随着各大云计算厂商产品线的不断丰富我们可以很轻松的寻找到开箱即用的方案来解决这类典型的视频处理需求。以阿里云为例视频点播类产品提供了视频采集、编辑、上传、媒体资源管理、转码处理、视频审核分析、分发加速于一体的一站式解决方案。 对于技术团队而言采用这样的方案不用预先准备任何计算资源甚至不用编写任何代码就能够从无到有拥有一整套视频处理系统完全不用考虑资源规划的问题。这样的方案非常适合在业务发展初级需要让系统快速上线的场景。
但随着业务的不断发展开箱即用的SaaS化方案还是存在不少的局限性基于如下的原因大多数的技术团队还是会选择自己建设视频处理系统
1对于之前已经通过FFmpeg技术实现的视频处理服务因为涉及到复杂的业务逻辑很难直接迁移到SaaS化方案上来。
2高阶的视频处理需求必须使用代码来实现比如音频降噪、插入动态Gif水印、按固定频率截帧等等。
3使用高分辨率的大视频是行业趋势对于超大视频的处理比如10G以上的1080P视频往往需要通过自定义的手段进行计算优化才能保证处理的及时性。
4在很多种场景下自建视频处理系统都会带来明显的成本优势。
5频繁的业务需求变更需要对整套系统进行更精细粒度的迭代管理比如采用金丝雀策略降低新版本发布所带来的风险。
那么如何建设一套同时具备高性能、高可用性、高灵活性、低成本特点的视频处理系统呢
基于分布式集群
最典型的方案是申请一组云虚拟机在每台虚拟机上部署视频处理应用组建成一个可以水平伸缩的服务集服。当有新的上频上传的时候可以触发一个处理任务并通过负载均衡或消息队列对任务进行分发接到任务的应用节点负责完成对应的任务。 通过这个架构在业务高峰期用户上传视频行为比较密集可以增加服务集群的实例数量来提升处理能力。在业务低峰期可以减少服务集群的实例数量来减少资源成本。
此方案可以通过定制化的代码逻辑实现各种高阶的视频处理需求灵活度非常高配合可以水平伸缩的计算集群以及负载均衡机制能同时满足性能和成本方面的需求是一套被广泛采纳的方案。但在生产环境大规模运行的情况下这套方案还是会暴露出很多问题
1维护工作量大。
整套系统的维护工作量涵盖了虚拟机、网络、负载均衡组件、操作系统、应用等多个层面需要投入大量的时间和精力来保障系统的高可用性与稳定性。举一个最简单的例子当某个应用实例出现故障的时候如何第一时间定位故障并尽可能迅速的将其从计算集群中摘除摘除之后又如何保证之前没有完成的任务能够重新得到处理呢这些都需要再配合完整的监控机制、故障隔离恢复机制来实现甚至涉及到代码层的业务逻辑优化。
2弹性伸缩能力滞后。
有两种方式实现计算集群的弹性伸缩通过定时任务触发或者通过指标阈值CPU利用率内存使用率等触发。不管采用哪种方式都没有办法基于用户行为精细化管理在遇到任务密度大幅度起伏的时候会面临弹性伸缩能力滞后的问题。当来自用户的视频上传请求突增的时候新增一个应用实例需要经过申请云资源初始化部署应用镜像应用启动加入负载均衡列表等多个阶段即便通过Kubernetes预留资源池等技术优化也往往需要10分钟以上。
3资源利用率低。
滞后的弹性伸缩能力会导致伸缩策略制定的相对保守造成计算资源的大量浪费增加了使用成本如下图所示 有没有一种方案能能帮助技术团队专注于业务逻辑的实现并可以根据用户的实际上传请求进行精细化的资源分配实现资源利用最大化呢随着云计算的飞速发展各大云厂商都在积极探索新的方案用更加“云原生”的方式来解决成本和效率的问题阿里云提供的函数计算 Serverless工作流就是这个领域非常具有代表性的方案。
函数计算
阿里云函数计算是事件驱动的全托管计算服务。通过函数计算开发者无需管理服务器等基础设施只需编写代码并上传。函数计算会为自动准备好计算资源以弹性、可靠的方式运行代码并提供日志查询、性能监控、报警等功能确保系统的稳定运行。
相比传统的应用服务器保持运行状态并对外提供服务的方式函数计算最大的区别是按需拉起计算资源对任务进行处理在任务完成以后自动的回收计算资源这是一种真正符合Serverless理念的方案能最大化的提升资源利用率减少系统系统维护工作量和使用成本。因为不需要预先申请计算资源使用者完全不需要考虑容量评估和弹性伸缩的问题只需要根据资源的实际使用量来进行付费。
下图展示了函数计算的工作方式 对于使用者而言把实现关键业务逻辑的代码上传到函数计算平台就能以事件驱动的方式触发函数执行。函数计算已经支持各种主流的编程语言对于即有的代码可以通过几个非常简单的步骤部署到函数计算。函数支持的所有开发语言请参考开发语言列表。
每一次计算资源的分配都基于事件的触发一个事件往往对应着业务上的一个任务。函数计算支持多种多样的触发器比如HTTP触发器的事件源就是HTTP请求函数计算接收到一次HTTP请求后会按照预设的规格分配相应的计算资源来处理这个HTTP请求请求处理完成之后函数计算会根据用户的设置决定是否立即回收这一次拉起的计算资源。而OSS触发器能够监控发生在对象存储OSS上的各种事件当有用户上传新文件或者对文件进行修改的时候自动触发函数执行这种方式就刚好适合视频处理的业务场景。更多支持的函数触发器请参考触发器列表。
在计算资源的调度上函数计算进行了大量优化面对用户请求的突增可以在毫秒级拉起大量的计算资源来并行工作确保用户体验。
通过函数计算进行视频处理
基于函数计算的特性搭建一套视频处理系统就非常简单只需要配置一个OSS触发器并将视频处理的核心代码上传到函数计算就大功告成 通过这套方案使用者不再需要考虑资源管理、负载均衡、系统高可用、弹性伸缩、系统监控等一系列复杂的问题函数计算平台会按最优的方式根据用户的上传行为调度计算资源低成本高效率的完成视频处理任务。具体的操作步骤和代码实现可以参考视频处理Python实现Demo在这个Demo中演示了如何基于函数计算将用户上传的视频统一转为640 * 480分辨率的mp4格式视频。
代码开发
每一个创建好的函数都会对应一个指定的入口函数计算会从这个函数入口开始执行类似于本地开发中的Main()函数。以Python语言为列一个简单的入口函数如下
def handler(event, context):return hello world
当有事件触发的时候就会从入口函数开始执行其中event参数携带了事件源相关的信息比如在视频处理场景中event参数携带了上传到OSS的Bucket以及文件名等信息。而context参数携带了函数的运行信息包括函数名、超时时间、访问凭证等。通过这些信息就能让执行代码完成预定义的各种操作。
函数计算支持各种主流的编程语言在这个编程语言当中Node.js和Python等脚本型语言含了丰富的类库开发效率很高而且运算实例启动的速度很快能够支持对延迟特别敏感的任务是函数计算最匹配的语言。Java和Go等语言不能像脚本型语言一样直接上传代码就能创建一个函数需要预先进行编译使用起来会稍微复杂一些但配合函数计算提供的Funcraft等工具也可以大幅度提升开发和部署的效率。不管使用哪种开发语言都建议使用者下载官方提供的Funcraft工具更轻松进行开发、构建、部署操作请参考Funcraft。
像Java这样的语言在虚拟机启动的时候需要加载比较多的类库不能够像实现运算实例毫秒级启动并进入执行状态不能直接使用在一些对于延迟特别敏感的业务场景。但配合函数计算提供的预留实例以及单实例多并发新功能能够消除冷启动对业务的影响并降低等待下游服务响应的影响让函数计算上运行的Java语言也能实现API网关等对延时要求特别高业务场景。请参考预留实例和单实例多并发。
Serverless工作流
通过前面介绍的方案可以轻松完成对短视频的各种定制化处理。但每一个函数计算实例在资源规格上和总运行时长都不是无限的目前函数计算实例可以拥有3G的内存资源和10分钟的执行时间这也就说明当一个视频处理任务需要占用3G以上的系统内存或者总执行时长超过10分钟的情况下处理任务是会失败的。
在5G时代超大视频课件是非常普遍的需求如何通过函数计算处理这样的大视频呢这个时候就要出动另一个武器---Serverless工作流来配合函数计算一起完成这个任务。
Serverless 工作流是一个用来协调多个分布式任务执行的全托管云服务。您可以用顺序、选择、并行等方式来编排分布式任务Serverless 工作流会按照设定好的步骤可靠地协调任务执行跟踪每个步骤的状态转换并在必要时执行用户定义的重试逻辑以确保工作流顺利完成。Serverless 工作流通过提供日志记录和审计来监视工作流的执行方便您轻松地诊断和调试应用。 您可以使用 Serverless 工作流编排一系列的函数资源同时定义流程中每一步的输入和输出使用内置控制步骤编排复杂逻辑、发起并行执行、管理超时或终止流程。另外通过控制台能够使用图形界面显示出执行任务状态和执行顺序同时控制台会显示每个步骤的实时状态并提供每次执行的详细历史记录。通过Serverless工作流 函数计算的组合我们可以突破时间和空间的限制对任意大小的视频文件进行复杂的处理。
大视频处理
简单来讲处理一个大视频的基本思路是
1将视频先进行切片处理把每一个分片的大小控制在合理的大小以便单个函数计算实例可以对其进行快速处理。
2拉起多个函数计算实例对每一个分片进行并行处理。
3对处理结果进行合并。
通过Serverless工作流 函数计算进行视频处理的流程如下 通过Serverless工作流提供的可视界面我们能在工作流执行的过程当中方便的查看到每一个步骤运行的信息并配合自定义的Dashboard实现对整套视频处理系统的全面监控 降低维护成本与资源成本并大幅度的缩短项目交付时间。
在线教育领域对于视频处理的需求量非常大而且对于处理速度、并发吞吐量、资源利用率等方面都有极高的要求函数计算 Serverless工作流方案组合帮助用户轻松建设弹性高可用的视频处理架构是实现这些复杂需求的最优解。随着云原生的不断发展Serverless相关技术还将深入更多的业务场景有未来有无限可能 原文链接 本文为阿里云原创内容未经允许不得转载。