用于快速开发工作视频服务的无服务器方法

用于快速开发工作视频服务的无服务器方法

我从事外包工作,其主要原则可以用“卖得很多,做得快”来描述。 我们做得越快,我们赚的就越多。 而且,我们希望一切都能顺利进行,而不是依靠拐杖和鼻涕,而是具有可接受的质量水平。 我将告诉您我在需要在短时间内开发促销服务时的经验。

给定: AWS根账户,技术栈选择无限制,XNUMX个后端,XNUMX个月开发时间。

问题: 实施一项促销服务,用户上传一到四个视频,持续一到四秒,然后嵌入到原始视频系列中。

在这么短的时间内编写自己的自行车服务并不是一个好主意。 此外,为了使服务能够应对负载并让每个人都能接收到令人垂涎的视频,需要基础设施。 最好不要带有飞机上的价格标签。 因此,我们立即专注于最小化定制的现成解决方案。

处理视频的标准解决方案是 FFmpeg,它是一个跨平台控制台实用程序,通过参数,您可以剪切和配音音频。 剩下要做的就是编写一个包装并将其发布到生活中。 我们编写了一个将两个视频拼接在一起的原型,然后……有趣的事情开始了。 该库基于 .NET Core 2,它应该在任何虚拟机上运行,​​因此我们采用 AWS EC2 实例,一切都会正常工作

隐藏文字不,这行不通
.
尽管 FFmpeg 简化了任务,但对于真正有效的解决方案,您需要创建一个 EC2 实例并为其设计一个网络基础设施,包括负载均衡器。 从头开始部署的简单任务变得“有点”复杂,基础设施开始立即需要资金 - 每小时都会从客户帐户中提取运行时金额。

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

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

锦上添花的是,AWS 提供了一项用于处理视频文件的单独服务 - AWS Elemental MediaConvert。

这项工作的本质非常简单:我们获取传出视频的 S3 链接,通过 AWS 控制台、.NET SDK 或简单的 JSON 编写我们想要对视频执行的操作并调用服务。 它本身实现了用于处理传入请求的队列,将结果上传到 S3 本身,最重要的是,为每个状态更改生成一个 CloudWatch 事件。 这使得我们能够实现 lambda 触发器来完成视频处理。

用于快速开发工作视频服务的无服务器方法
最终的架构如下所示:

整个后端位于两个 lambda 表达式中。 另一种是用于旋转垂直视频,因为此类工作无法一次性完成。

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

陷阱

  • 由于某种未知的原因,AWS MediaConvert 仅将声音分别应用于每个视频片段,但我们需要整个屏幕保护程序中的一首欢快的歌曲。
  • 垂直视频需要单独处理。 AWS 不喜欢黑条,并将滚轮设置为 90°。

简易溜冰场

尽管无状态有很多优点,但您需要跟踪需要对视频执行的操作:将音频粘合或添加到完成的视频序列中。 幸运的是,MediaConvert 支持通过其作业传递元数据,我们始终可以使用“isMasterSoundJob”形式的简单标志,在任何阶段解析此元数据。

无服务器完美地允许使用NoOps——这种方法假设没有必要由一个单独的团队负责项目基础设施。 因此,这是一件小事 - 我们在 AWS 上部署解决方案,而没有系统管理员的参与,反正他们总是有事情要做。
为了加快这一切,我们在 AWS CloudFormation 上尽可能自动化部署脚本,这使您可以直接从 VS 一键部署。 因此,一个 200 行代码的文件允许您推出现成的解决方案,尽管如果您不习惯 CloudFormation 语法,它可能会令人震惊。

在总

无服务器并不是万能药。 但在存在三个限制的情况下,它会让生活变得更加轻松:“资源有限——短期——钱很少。”

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

  • 没有长时间运行的进程。 API Gateway硬限制为29秒,lambda硬限制为5分钟;
  • 由事件驱动架构描述;
  • 分解为松散耦合的组件,如 SOA;
  • 根据您的情况不需要做太多工作;
  • 用 .NET Core 编写。 要使用 .NET Framework,您至少仍需要具有适当运行时的 Docker。

无服务器方法的优点

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

缺点,举个具体例子

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

来源: habr.com

添加评论