写点什么

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:205564

评论

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

快速掌握Kubernetes中的核心概念

穿过生命散发芬芳

k8s 6 月 优质更文活动

OpenHarmony工程模板和开发语言

坚果

OpenHarmony 6 月 优质更文活动

STM32+DHT11监测环境的温湿度

DS小龙哥

6 月 优质更文活动

直播回顾|走进元服务,携手小强停车探索鸿蒙新流量阵地

HarmonyOS SDK

HMS Core

BeautifulPrompt:PAI推出自研Prompt美化器,赋能AIGC一键出美图

阿里云大数据AI技术

人工智能 AIGC Prompt 企业号 6 月 PK 榜

this 之谜揭底:从浅入深理解 JavaScript 中的 this 关键字(二)

沉浸式趣谈

聊聊数科公司如何与现有数智平台厂商协同作战

用友BIP

数科公司 数智平台 数智平台白皮书

系统重构实施,百亿级核心交易如何保证准确性?

鲸品堂

计费模式 对账系统 企业号 6 月 PK 榜

架构成长之路 | 图解分布式共识算法Paxos教会协议

阿里技术

paxos协议 分布式算法

安全问题我们需要重视,立刻升级fastjson2

源字节1号

开源 软件开发 后端开发 小程序开发

中企出海,海外商旅费控的关键点是什么?

用友BIP

中企出海

智能人才发现,帮助企业精准找人,快速识人

用友BIP

数智人力

使用华为云开发者插件一键部署应用到ECS

华为云PaaS服务小智

ide 云计算 插件 华为云

2023 PlatformCon 平台工程大会回顾

杨振涛

平台工程 内部开发者平台 内部开发者门户 平台工程大会 平台团队

原点安全携“金融机构消费者个人信息保护解决方案”亮相 2023 中国金融数字化转型发展大会

原点安全

数据安全 金融机构 个人信息保护

成败关键!一对一直播源码平台搭建需要的条件

山东布谷科技

软件开发 源码搭建 一对一直播源码 直播源码

openEuler 开源汇智赢未来|2023开放原子全球开源峰会 openEuler 论坛成功召开

openEuler

开源 操作系统 openEuler 资讯

低代码开发平台为数智赋能,让开发变得更简单

引迈信息

前端 低代码 JNPF

测试左移

BY林子

软件测试 敏捷测试

理解 与 计算 物联网产品的电池使用寿命

矜辰所致

物联网 低功耗计算 电量计算 6 月 优质更文活动

Abaqus有限元分析技术应用于卫星强度校核

思茂信息

abaqus abaqus软件 abaqus有限元仿真 有限元仿真技术

【有奖体验】叮!你有一张 3D 卡通头像请查收

Serverless Devs

Serverless 函数计算FC

中盐集团:以财务共享为基础,引领盐行业数智化转型

用友BIP

财务共享

里氏替换原则究竟如何理解?

磐远

Java 设计模式 设计原则 里氏替换

libpq SDK 发送 SQL 和解析结果

KaiwuDB

sql KaiwuDB

蚂蚁集团云原生智能容量技术 KapacityStack 正式开源

TRaaS

GitHub 开源 蚂蚁集团

2023开放原子全球开源峰会高峰论坛成功举办

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子 高峰论坛

瓴羊Quick BI:企业数据分析的利器

夜雨微澜

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