无服务器方法,用于快速开发有效的视频服务

AWS Elemental

我从事外包工作,主要原则可以用短语“卖很多,快点做”来描述。 我们做得越快,我们就越赚钱。 并且,希望一切都不会在拐杖和鼻涕上起作用,而是具有可接受的质量水平。 我将在短时间内需要开发促销服务时讲述我的经验。

假定: AWS上的root帐户,对技术堆栈的选择,一个后端和一个月的开发没有任何限制。

目标:实施促销服务,用户上传一到四个持续一到四秒钟的视频,然后将其嵌入到原始视频序列中。 也就是说,我们用自定义视频替换了原始视频的片段(系列屏幕保护程序)。 杀手级功能-能够发送您的姓名,该姓名以精美文字的形式覆盖相应的视频片段。 此外,用户可以上传4到30秒长的视频,而在服务端,视频会被裁剪为4秒。


解决方案


在如此紧迫的时间内编写自行车服务是一个主意。 此外,为了使服务能够应付负载以及每个想要接收令人垂涎的视频的人,都将需要基础结构。 而且最好不要带飞机上的价格标签。 因此,我们立即将重点放在最小化定制的现成解决方案上。

用于处理视频的标准解决方案是FFmpeg,这是一种跨平台的控制台实用程序,可通过自变量来分割和叠加声音。 小事情是写一个包装并将其付诸实践。 我们正在编写一个将两个视频粘贴在一起的原型,然后……乐趣开始了。 .NET Core 2上的库应在任何虚拟机上旋转,因此我们采用了AWS EC2实例,一切正常

隐藏文字
不,这行不通

FFmpeg虽然简化了任务,但是对于真正可行的解决方案,您需要创建EC2实例,为此为其设计网络基础结构,包括负载均衡器。 从头开始部署的简单任务“有点”复杂,基础架构立即开始要求资金-运行时间的金额每小时从客户帐户中提取。

我们的服务不涉及长期运行的流程,不需要庞大而大胆的关系数据库,并且通过一系列微服务调用而完全适合事件架构。 该解决方案表明了自己-我们可以放弃EC2并实现真正的无服务器应用程序,例如基于AWS Lambda的标准Image Resizer。

顺便说一下,尽管明显不喜欢AWS开发人员使用.NET,但他们支持.NET Core 2.1作为运行时,这提供了广泛的开发机会。

锦上添花-AWS提供了单独的服务来处理视频文件-AWS Elemental MediaConvert。

工作的本质非常简单:我们通过AWS控制台,.NET SDK或仅通过JSON,将S3链接链接到传出视频,然后编写我们想对视频进行的处理并调用该服务。 他本人实现了用于处理传入请求的队列,他在S3中卸载了结果,最重要的是,为每个状态更改生成了CloudWatch Event。 这使我们可以实现lambda触发器来完成视频处理。

图片
最终版本的架构看起来像这样

整个后端放置在两个lambda中。 另一个是旋转垂直视频,因为这样的工作不能一次性完成。

文本叠加是通过根据视频分辨率动态渲染透明图像来完成的。 SixLabors.ImageSharp库非常适合此目的,并且内存泄漏问题很好地绕过了lambda生命周期。

以JS编写并通过pug编译的SPA应用程序形式的前端将放置在公共S3篮子中。 要自己下载视频,我们不需要任何服务器代码-只需打开S3为我们提供的REST端点即可。 唯一的事情-不要忘记配置策略和CORS。

陷阱


  • 由于某些未知原因,AWS MediaConvert仅将声音单独施加在每个视频片段上,因此我们需要整个屏幕保护程序中的狂热歌曲。
  • 垂直视频需要单独处理。 AWS不喜欢黑色条纹,而是将滚筒置于90°。


简易溜冰场


尽管Stateless有很多优点,但您仍需要跟踪视频的处理方式:在已完成的视频序列上粘贴或叠加声音。 幸运的是,MediaConvert支持通过其Job进行元数据的传输,我们始终可以应用一个简单的标志,例如“ isMasterSoundJob”,在任何阶段都可以解析该元数据。

Serverless使NoOps正常工作-这种方法假定需要一个单独的团队来负责项目基础结构。 因此,这是一个小问题-我们在没有任何系统管理员参与的情况下在AWS上部署解决方案。
为了加快速度,我们尽可能将部署脚本自动化到AWS CloudFormation,允许您直接从VS部署一个按钮。 结果,具有200行代码的文件使您可以推出现成的解决方案,尽管CloudFormation语法可能会令人讨厌。

合计


无服务器不是万灵药。 但这将极大地便利以下三个方面的生活:“有限的资源-时间短-钱少”。

适用于无服务器的应用程序的特征

  • 没有长时间运行的流程。 硬限制API网关-29秒,硬限制lambda-15分钟;
  • 由事件驱动架构描述;
  • 按SOA类型分解为松散耦合的组件;
  • 在他的情况下不需要很多工作;
  • 用.NET Core编写。 要使用.NET Framework,您仍然至少需要具有适当运行时的Docker。

无服务器方法的好处

  • 降低基础设施成本;
  • 降低交付解决方案的成本;
  • 自动扩展
  • 发展处于技术进步的最前沿。

缺点,举一个具体的例子

  • 分布式跟踪和日志记录-通过AWS X-Ray和AWS CloudWatch部分解决;
  • 调试不便;
  • 空载冷启动;
  • AWS用户敌对接口是一个普遍问题:)

Source: https://habr.com/ru/post/zh-CN448974/


All Articles