写点什么

Serverless Streaming:毫秒级流式大文件处理探秘

  • 2023-02-17
    北京
  • 本文字数:3702 字

    阅读完需:约 12 分钟

Serverless Streaming:毫秒级流式大文件处理探秘

点击查看 Serverless 系列文章:

Serverless 时代的微服务开发指南:华为云提出七大实践新标准

华为云发布冷启动加速解决方案:助力 Serverless 计算速度提升 90%+


旧浪 | 华为云 Serverless 研发专家

平山 | 华为云中间件 Serverless 负责人

背景


企业应用从微服务架构向 Serverless(无服务器)架构演进,开启了无服务器时代,面向无服务器计算领域的 Serverless 工作流也应运而生。许多 Serverless 应用程序不是由单个事件触发的简单函数,而是由一系列函数多个步骤组成的,而函数在不同步骤中由不同事件触发。Serverless 工作流用于将函数编排为协调的微服务应用程序。


Serverless 工作流由于自身可编排、有状态、持久化、可视化监控、异常处理、云服务集成等特性,适用于很多应用场景,比如:


  1. 复杂度高需要抽象的业务(订单管理,CRM 等)

  2. 业务需要自动中断 / 恢复能力,如多个任务之间需要人工干预的场景(人工审批,部署流水线等)

  3. 业务需要手动中断 / 恢复(数据备份 / 恢复等)

  4. 需要详细监控任务执行状态的场景

  5. 流式处理(日志分析,图片 / 视频处理等)


当前大部分 Serverless Workflow 平台更多关注控制流程的编排,忽视了工作流中数据流的编排和高效传输,上述场景 1-4 中,由于数据流相对简单,所以各大平台支持都比较好,但是对于文件转码等存在超大数据流的场景,当前各大平台没有给出很好的解决方案。华为云 FunctionGraph 函数工作流针对该场景,提出了 Serverless Streaming 的流式处理方案,支持毫秒级响应文件处理。本文将以图片处理的场景作为例子详细描述当前的问题以及华为云 FunctionGraph 函数工作流在面对该问题时采取的一系列实践。


问题描述


先以一个图片处理的场景举例,用户想要执行一个图片压缩并且加水印的任务,这个场景在典型的工作流系统中,可以用如图一所示的方式进行处理。



图 1:一个典型的图片处理工作流


如上图所示,图片压缩和图片加水印的结果都是二进制文件格式,但是当前主流的 Serverless Workflow 平台在多个步骤之间传输上下文都只能支持文本格式传输,所以图片压缩和加水印的结果都需要经过 BASE64 或者其他转码方式转成文本进行数据流传输。


但是这种方案的限制和使用成本都比较高:


  1. 函数的 Response Body 通常有大小限制,所以这种方式无法处理超大文件

  2. 执行结果转换为文本,需要消耗大量内存,内存成本比较高


如何简单高效的进行文件处理,业界也给出了其他解决方案,如通过云存储进行中间结果转储、AWS 的 Lambda Object 文件转换方案。下面给出了这两个方案的优缺点分析。


方案一:中间结果通过云存储进行转储


该方案如图 2 所示:



图 2:云存储转储运行方式示意图


两个步骤之间的文件流通过云存储去传递,这种方案支持大文件流的传输,但是由于中间多了一次到云存储的网络传输,如果业务对时延要求不高,该方案问题不大,但是对于时延敏感类业务,这种多出的时延是无法接受的。另外云存储转储需要额外的成本,如果调用量比较大,使用成本较高。


方案二:AWS Lambda Object



图 3:AWS 解决方案示意图 [1]


AWS 对于这种文件处理场景,提出了基于 S3 和 Lambda 的 Lambda Object 的方案,参考 [1],简单来说,是支持为 S3 文件桶的 getObject API 提供 Access Point,AccessPoint 可以指向某一个 Lambda 函数,在函数中可以对原来的桶数据文件进行修改,比如可以将原始视频转码,得到转码后的结果返回到客户端。虽然解决了时延和大文件处理的问题,但是这个方案强依赖 S3 的 API,用户无法进行流程编排,也无法通过事件触发,不是一个真正通用的方案。


业界方案总结


简单总结如表 1 所示,当前业界提供的各个方案或多或少存在一些局限性,没有办法在同时满足低时延的情况下支持可编排的文件处理。然而低时延和可编排都是大量客户所追求的关键能力,如何解决这些关键痛点,提升客户体验,成为了当前我们重点想要攻克的难题。


表 1:业界文件处理方案对比



华为云 FunctionGraph 的 Serverless Streaming 流式处理方案


针对当前业界缺少高效,可编排的文件处理方案的痛点,华为云 FunctionGraph 函数工作流提出 Serverless Streaming 的流式可编排的文件处理解决方案,步骤与步骤之间通过数据流驱动,更易于用户理解。本章通过图片处理的例子解释该方案的实现机制。


如果需要驱动一个工作流执行,工作流系统需要处理两个部分:


  1. 控制流:控制工作流的步骤间流转,以及步骤对应的 Serverless 函数的执行。确保步骤与步骤之间有序执行。

  2. 数据流:控制整个工作流的数据流转,通常来说上一个步骤的输出是下一个步骤的输入,比如上述图片处理工作流中,图片压缩的结果是打水印步骤的输入数据。


在普通的服务编排中,由于需要精准控制各个服务的执行顺序,所以控制流是工作流的核心部分。然而在文件处理等流式处理场景中,对控制流的要求并不高,以上述图片处理场景举例,可以对大图片进行分块处理,图片压缩和加水印的任务不需要严格的先后顺序,图片压缩处理完一个分块可以直接流转到下一个步骤,而不需要等待图片压缩把所有分块处理完再开始加水印的任务。


基于上述理解,华为云 FunctionGraph 工作流的 Serverless Streaming 方案架构设计如图四所示:



图 4:Serverless Streaming 流式处理架构图


Serverless Streaming 的流程中,弱化控制流中步骤之间的先后执行顺序,允许异步同时执行,步骤与步骤之间的交互通过数据流驱动。其中数据流的控制通过 Stream Bridge 组件来实现。


同时函数 SDK 增加流式数据返回接口,用户不需要将整个文件内容返回,而是通过 gRPC Stream 的方式将数据写入到 Stream Bridge,Stream Bridge 用来分发数据流到下一个步骤的函数 Pod 中。


这种方式存在如下优点:


  1. 由于控制流的弱化,完全通过数据流来驱动流程执行,不需要再强限制步骤之间完成的先后顺序,如图片处理场景中,压缩和加水印的步骤可以做到完全并行执行,这样可以加速整个流程的执行速度。

  2. 每次请求都开辟独立缓冲区,缓冲区限制大小,数据流仅在内网传输,保证整体数据传输的可靠性和安全性。

  3. 不依赖其他外部服务,使用成本低。

  4. 对于开发人员来讲,只需要关注数据流的处理,而不需要关心数据流如何转发,如何存储,降低开发难度。

  5. 底层流式传输通过 gRPC 进行,整体数据传输效率高


在 FunctionGraph 中开发文件处理工作流


当前 FunctionGraph 已经基于上述方案支持了在函数工作流中进行数据流处理,并且将结果通过流数据的方式返回到客户端,以构建一个图片处理工作流举例:


1. 首先创建一个图片压缩的函数,其中代码在处理返回数据通过 ctx.Write() 函数将结果以流式数据的形式返回:



FunctionGraph 通过 ctx.Write() 函数提供了流式返回的能力,对开发者来说,只需要将最终结果通过流的方式返回,而不需要关注网络传输的细节。


2. 在函数控制台中启用该函数的流式返回能力



3. 用上面的方式完成其他函数的编写,最后在 FunctionGraph 的函数流控制台完成工作流编排,举例如下:



4. 调用工作流的同步执行接口,获取最终结果的文件流,数据将以 chunked 流式返回的方式返回到客户端


使用效果


针对图片处理的具体场景,我们测试对比了不同大小图片(333k、1m、4m、7m、10m、12m)进行图片切割和图片压缩的场景,由于 BASE64 转码方案无法支持大文件,AWS Lambda Object 方案无法支持编排,所以这里只对比使用 OBS 转储方案和基于流式返回的 Servlerss Streaming 方案的时延数据。具体对比数据图表如下:



图 5:测试数据对比


响应时延:指客户端发出请求到收到第一个字节消耗的时延(单位:秒)


端到端时延:指客户端发出请求到收到最后一个字节消耗的时延(单位:秒)


从测试数据可以看出,响应时延和端到端时延使用流式返回方案后都得到了不同程度的降低。其中响应时延降低幅度较大,OBS 转储方案响应时延随着图片大小增大,响应时延呈线性上升,超过 4M 的图片响应时延就达到秒级,使用流式返回方案后,响应时延持续稳定在毫秒级的水平。从中可以发现,基于 Serverless Streaming 的流式返回方案不仅具备流式处理和可编排的能力,并且在文件处理场景中可以显著降低时延,从多个方面提升了用户使用体验。


总结与展望


本文主要讨论了 Serverless Workflow 在大文件处理时碰到的问题,FunctionGraph 通过简化数据传输链路,提升文件流处理效率, 给出了一种稳定高效、极低时延的大文件处理方法 Serverless Streaming,支持毫秒级的文件流式处理, 显著改善函数编排在文件处理等场景中的用户体验。


FunctionGraph 作为华为元戎加持的下一代 Serverless 函数计算与编排服务,将围绕通用全场景 Serverless 的前沿理论及案例实践,持续分享,回馈社区。


参考资料:


[1]Introducing Amazon S3 Object Lambda (https://aws.amazon.com/cn/blogs/aws/introducing-amazon-s3-object-lambda-use-your-code-to-process-data-as-it-is-being-retrieved-from-s3/)


今日好文推荐


告别SVN,Git成“独苗”:GitHub 在 13 年后宣布淘汰Subversion支持


被逼出来的自主可控,从华为自研看国产IDE的未来和商业模式


GitHub裁员10%,办公室全关,全体远程办公;微软必应集成ChatGPT下载量猛增10倍;谷歌出师不利市值蒸发超万亿|Q资讯


马斯克开会当场解雇Twitter首席工程师:我有1亿多粉丝,他却说公众对我失去兴趣


2023-02-17 12:205407

评论

发布
暂无评论
发现更多内容

这样的商城系统全开源免费商用,还要什么自行车!

CRMEB

rxjs Observable of 操作符的单步调试分析

汪子熙

typescript 前端开发 angular RXJS 7月月更

【LeetCode】找树左下角的值Java题解

Albert

LeetCode 7月月更

hive数据导入:文件导入

怀瑾握瑜的嘉与嘉

大数据 hive 7月月更

2022 · 让我带你Jetpack架构组件从入门到精通 — Lifecycle

编程的平行世界

an'droid android jetpack

架构实战营 毕业总结

热猫

软件产品管理平台有哪些?12个最佳产品管理工具盘点

爱吃小舅的鱼

产品经理 产品管理 PingCode

无需zookeeper安装kafka集群(kakfa3.0版本)

字母哥哥

大数据 kafka 消息队列

数据中台咋就从“小甜甜”变成了“牛夫人”?

雨果

数据中台

《你的灯亮着吗》开始解决问题前,得先知道“真问题”是什么

图灵教育

从MLPerf谈起:如何引领AI加速器的下一波浪潮

OneFlow

人工智能 深度学习 加速器

6年技术迭代,阿里全球化出海&合规的挑战和探索

阿里技术

阿里巴巴 最佳实践 方法论 全球化

面试必答题“聊聊Java中线程的生命周期状态”如何破?

博文视点Broadview

超90万个K8S实例可被发现暴露在公网上,14%位于中国

SEAL安全

安全

远程办公如何保持高效协同,实现项目稳定增长 |社区征文

三掌柜

初夏征文 7月月更

主流实时流处理计算框架Flink初体验

百思不得小赵

大数据 flink 7月月更

密码学进阶(一):浅谈常见的七种加密算法及实现

No Silver Bullet

加密 文本摘要 数字签名 7月月更

学会使用LiveData和ViewModel,我相信会让你在写业务时变得轻松🌞

编程的平行世界

JetPack Andriod

当你真的学会DataBinding后,你会发现“这玩意真香”!

编程的平行世界

JetPack andiod

Ubuntu环境编译OpenJDK11源码

程序员欣宸

Java Openjdk 6月月更

手把手带你快速入门Electron

是乃德也是Ned

7月月更

兼容10个浏览器HTML头部配置

写程序的小王叔叔

html 浏览器 浏览器插件 7月月更

Go Web 编程入门:一探 GoConvey 测试库

宇宙之一粟

Go web Go 语言 7月月更

DBPack 赋能 python 微服务协调分布式事务

峨嵋闲散人

分布式事务 分库分表 读写分离 seata dbmesh

Fiori 应用通过 Adaptation Project 的增强方式分享

汪子熙

前端开发 SAP Fiori SAP UI5 7月月更

架构实战营 模块九:设计电商秒杀系统

热猫

云原生到底是什么?它会是未来发展的趋势吗?

Albert Edison

7月月更

投稿开奖丨轻量应用服务器征文活动(5月)奖励公布

阿里云弹性计算

nginx OSS MySQL 数据库 轻量征文

【Python技能树共建】requests-html库初识

梦想橡皮擦

7月月更

8款最佳实践,保护你的 IaC 安全!

SEAL安全

安全 IaC

2022上半年英特尔有哪些“硬核创新”?看这张图就知道了!

科技之家

Serverless Streaming:毫秒级流式大文件处理探秘_服务革新_旧浪_InfoQ精选文章