0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

YG科技 来源:jf_81200783 作者:jf_81200783 2023-03-21 10:37 次阅读

背景

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

Serverless 工作流由于自身可编排、有状态、持久化、可视化监控、异常处理、云服务集成等特性,适用于很多应用场景,比如:复杂度高需要抽象的业务(订单管理,CRM 等)、业务需要自动中断 / 恢复能力,如多个任务之间需要人工干预的场景(人工批,部署流水线等)、业务需要手动中断 / 恢复(数据备份 / 恢复等)、需要详细监控任务执行状态的场景、流式处理(日志分析,图片 / 视频处理等)

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

问题描述

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

poYBAGQZGFmAJUePAAF-nLGKLzs454.jpg

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

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

1、函数的 Response Body 通常有大小限制,所以这种方式无法处理超大文件。2、执行结果转换为文本,需要消耗大量内存,内存成本比较高。

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

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

该方案如图所示:

pYYBAGQZGFqACvBdAAFhg66oejM608.jpg

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

方案二:AWS Lambda Object

poYBAGQZGFuAXv6TAAJMDvoRo8U021.jpg

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

业界方案总结

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

业界文件处理方案对比

pYYBAGQZGFyAchSOAAFCpDjQSF4823.jpg

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

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

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

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

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

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

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

poYBAGQZGF2AR8b7AAGH-Tp-tKw829.jpg

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

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

这种方式存在如下优点:

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

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

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

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

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

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

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

poYBAGQZGF-AWixOAAFuJqw2C-s012.jpg

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

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

pYYBAGQZGGCAOhwVAABbay3eEY4320.jpg

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

poYBAGQZGGCAO4YkAAEwLFMWZ4Y016.jpg

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

使用效果

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

pYYBAGQZGGGANuDZAAApZjT-rtA741.jpg

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

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

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

总结与展望

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

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

审核编辑黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 流式
    +关注

    关注

    0

    文章

    3

    浏览量

    5350
  • serverless
    +关注

    关注

    0

    文章

    61

    浏览量

    4440
收藏 人收藏

    评论

    相关推荐

    鸿蒙原生应用元服务实战-Serverless华为账户认证登录需尽快适配

    一、ArkTS\\\\API9,服务器端基于serverless开发的应用与元服务华为账号注册登录功能暂时是不支持的 二、3月1日后的审核要求 3月1日的时间是快到了。 三、会导致的结果
    发表于 02-20 10:14

    鸿蒙应用/元服务开发实战-Serverless云存储没法创建处理方式

    新账户,Serverless云存储没法创建 ,没法进行下一步。 解决方式 请按照这个方式修改一下就能正常创建了,浏览器中打开控制台输入 window.top.cfpConfig.cloudStorageSwitch=‘off’ 后再创建桶
    发表于 02-19 11:21

    鸿蒙原生应用/元服务开发-Serverless账户验证码的问题

    在应用/元服务早期使用过程中,-Serverless账户验证码的格式是[AGC][应用/元服务名称],如下图。 但是,在最近,[应用/元服务]名称直接变成了【default】,用户收到这种验证码后,心里存有疑虑的,这是哪里配置或者设置的问题吗?大家有遇到同样的问题吗?如何调整?
    发表于 12-27 15:55

    华为云全新上线 Serverless 应用中心,支持一键构建文生图应用

    近日,华为云全新上线 Serverless 应用中心,提供大量应用模板,帮助用户实现一键部署函数和周边依赖资源,节省部署时间,快速上手将应用部署到华为云函数工作流 FunctionGraph,并一键
    的头像 发表于 11-13 09:36 319次阅读
    华为云全新上线 <b class='flag-5'>Serverless</b> 应用中心,支持一键构建文生图应用

    51单片机如何实现毫秒精确延时?

    51单片机如何实现毫秒精确延时?
    发表于 10-27 06:25

    HarmonyOS/OpenHarmony原生应用开发-华为Serverless服务支持情况(四)

    /agc-cloudhosting-introductions-0000001057944575 三、Serverless模板 是基于Serverless服务构建的场景化解决方案,提供了应用生态常见场景的代码实现。开发者可将所需能力快速
    发表于 10-16 14:20

    HarmonyOS/OpenHarmony原生应用开发-华为Serverless云端服务支持说明(一)

    云端原生的实现,就现在来看,华为的Serverless应该是系统地考虑了这个问题。 而前端的实现,现在官方主推为“Stage模型+ArkTS+API9及以上”应用开发,我们认为通过以上方式实现
    发表于 10-08 10:22

    全域 Serverless 化,华为云引领下一代云计算新范式

    开发者,分享了在 Serverless 领域的前沿思考和实践。 华为云致力于推进全域 Serverless,通过核心产品全面的 Serverless 化,具有极简开发部署、极快自动弹性、极低成本消耗的优势,能够帮助企业缩短 TT
    的头像 发表于 09-06 23:05 381次阅读
    全域 <b class='flag-5'>Serverless</b> 化,华为云引领下一代云计算新范式

    Serverless计算产品为什么采用并发度作为扩缩容?

    2019 年 Berkeley 预测 Serverless 将取代 Serverful 计算 [1 ] ,成为云计算的计算新范式。Serverless 为应用程序开发提供了一种全新的系统架构,其凭借
    的头像 发表于 07-30 15:52 801次阅读
    <b class='flag-5'>Serverless</b>计算产品为什么采用并发度作为扩缩容?

    大文件传输的9种方法

    SendBig是在全球范围内发送你的文件的最简单方法。免费分享高达30GB的大文件、照片和视频,让文件共享变得简单。在不注册的情况下,可以发送高达50MB的数据,如果你想发送更大的文件
    的头像 发表于 07-29 11:12 2874次阅读
    <b class='flag-5'>大文件</b>传输的9种方法

    Linux平台大文件生成和处理方法

    在日常工作中,为了验证某些场景下的功能,经常需要人为构造一些大文件进行测试,有时需要用大文件来测试下载速度,有时需要用大文件来覆盖磁盘空间;偶尔会看到一些网络博文会教大家如何构造大文件
    发表于 07-14 16:38 3457次阅读

    一款解决大文件内存溢出的 Excel 处理工具

      介绍 快速开始 引入依赖 简单导出 定义实体类 复杂导出 简单导入 参考资料 介绍 EasyExcel 是一个基于 Java 的、快速、简洁、解决大文件内存溢出的 Excel 处理工具。它能
    的头像 发表于 07-03 16:11 1136次阅读
    一款解决<b class='flag-5'>大文件</b>内存溢出的 Excel <b class='flag-5'>处理</b>工具

    如何将.txt 大文件发送到HTTP服务器?

    我在 SPIFFS 闪存中创建了多个 .txt 文件系统。但是如何将 .txt 大文件发送到 HTTP 服务器,可以通过 ESP8266 12F 将 SPIFFS 1MB 文件发送到上传 HTTP 服务器。我的要求是仅通过网站
    发表于 05-19 09:00

    IMX8MP gstreamer在流式传输时是否有其他方法可以在我想要的时间捕获?

    location=capture.jpg 最大文件数=1 但是文件不断被覆盖,CPU 负载也在上升。 在流式传输时是否有其他方法可以在我想要的时间捕获?
    发表于 05-19 08:37

    科技云报道:Serverless或许没有你想象中的安全

    Serverless安全性的最佳实践
    的头像 发表于 05-12 13:12 230次阅读