爱奇艺内容中台之Serverless应用与实践( 二 )


此外 , Serverless为我们提供了一种更加精细化拆分服务及功能再组合的理念 , 此前我们为了部署方便 , 将这些图片处理服务打包在一起部署一个大服务 , 每个子服务的变更都需要一次完整的部署 , 并且在资源控制方面也无法做到精细化 , 毕竟每种图片FaaS服务对资源的消耗还是不同的 。
爱奇艺内容中台之Serverless应用与实践
文章图片
同步FaaS+BaaS
在自嗨型FaaS的基础上 , 增加了BaaS服务的依赖 。 例如图片同步生产服务 , 这个服务将处理完的图片 , 上传至云存储 , 并调用第三方API分发至CDN 。 分发至CDN的图片 , 需要统一规格(格式、质量因子等)进行处理 , 以减少带宽使用 , 提升端加载图片的速度 。 服务虽然经过了三个步骤 , 但总体还算轻量 , 非常适合CMS图片上传这种需要快速生产的应用场景 。
爱奇艺内容中台之Serverless应用与实践
文章图片
异步事件驱动
前两种应用 , 依赖使用方的调用 。 但有些业务场景可能会带来不便 , 比如有很多用户上传图片的场景 。 按照传统流程来看 , 业务除了将图片上传至云存储 , 还需要额外触发一次生产任务 。 如下图:
爱奇艺内容中台之Serverless应用与实践
文章图片
可以看到 , 上传与生产严重脱节 , 虽然这样可以走得通 , 但图片生产与业务方耦合过于紧密 。 Serverless出现之后 , 其经典的事件驱动模型 , 给应用的形态提供了丰富的可能性 。 图片服务除了业务主动的同步http、异步消息触发之外 , 还有很多其他有趣的应用场景 。 例如上例 , 可以将业务主动的触发 , 改为自动的云存储异步事件触发 , 这样一来业务不需再主动触发图片生产 , 实现了解耦 。 其次 , 虽然Serverless可以不需要考虑资源的动态伸缩情况 , 但同步的处理能力还是会有上限 。 这样即使在高并发下 , 也可能会因为资源过度消耗产生问题 。 下面是爱奇艺某业务的图片异步事件驱动案例:
爱奇艺内容中台之Serverless应用与实践
文章图片
当图片上传至云存储后 , 触发一个异步事件 , 驱动图片处理函数进行压缩、加水印 , 然后再进行持久化的“一条龙”服务 。 图片的处理逻辑完全与业务解耦 , 业务只需进行云存储的上传 , 而不必再调用一次进行图片处理 。 如此也可轻松应对高峰流量 , 实现削峰填谷 。
Serverless工作流
除了上面的例子 , 爱奇艺还有不少其他图片生产业务 。 这些业务各有各的生产需求 , 比如A业务需要经过AI智能识别 , B业务需要先从视频中抽图 , C业务需要对图片进行增强 。 难点在于如何用一个抽象的流程 , 对现有Serverless服务进行复用组合 , 统一支持不同业务的生产需求 。
爱奇艺内容中台之Serverless应用与实践】此前我们使用第三方工作流系统进行流程的编排 , 驱动生产流程 , 后来引入了serverless工作流 。
爱奇艺内容中台之Serverless应用与实践
文章图片
现有工作流系统虽然能满足我们的需求 , 但是存在不少问题 。
维护成本极高 。 为了满足业务运行需求 , 我们使用了几十台虚机部署工作流实例 , 无论是扩容或是虚机下线 , 都给我们带来了极大的维护工作量 。
资源部署复杂 。 为了避免业务之间相互影响 , 无论是工作流实例或依赖的中间件 , 都需要划分生产线 , 进行资源的隔离 。
与业务系统耦合 。 在工作流与业务系统解耦方面 , 虽然我们做了不少工作 , 但还是无法做到100% , 还是时常会产生修改工作流代码满足业务需求 。