乐趣区

关于云计算:Serverless-在大规模数据处理的实践

作者 | 西流 阿里云技术专家

前言

当您第一次接触 Serverless 的时候,有一个不那么显著的新应用形式:与传统的基于服务器的办法相比,Serverless 服务平台能够使您的利用疾速程度扩大,并行处理的工作更加无效。这次要是因为 Serverless 能够不用为闲置的资源付费,不必放心预留的资源不够。而在传统的应用范式中,用户必须预留成千盈百的服务器来做一些高度并行化但执行时长较短的工作,而且必须为每一台服务器买单,即便有的服务器曾经不再工作了。

以阿里云 Serverless 产品——函数计算为例,便能够完满解决您上述所有顾虑:

  • 如果您的工作自身计算量不是很大,然而有大量的并发工作申请须要并行处理,比方多媒体文件解决、文档转换等;
  • 一个工作自身计算量很大,要求单个工作很快解决完,并且还能反对并行处理多个工作。

在这种场景下,用户惟一关注的就是:您的工作是能够分治拆解并且子工作是能够并行处理的,一个须要一个小时能力解决完的长工作,能够分解成 360 个独立的 10 秒长的子工作并行处理,这样,以前您要花一个小时能力解决完的工作,当初只须要 10 秒就能够搞定。因为采纳的是按量计费的模型,实现的计算量和老本是大抵相当的,而传统模型则因为预留资源必定会存在节约,节约的费用也是须要您去承当的。

接下来,将具体论述 Serverless 在大规模数据处理上的实际。

极致弹性扩缩容应答计算稳定

在介绍相干的大规模数据处理示例之前,这里先简略介绍一下函数计算。

1. 函数计算简介

  • 开发者应用编程语言编写利用和服务,函数计算反对的开发语言请参见开发语言列表;
  • 开发者上传利用到函数计算;
  • 触发函数执行:触发形式包含 OSS、API 网关、日志服务、表格存储以及函数计算 API、SDK 等;
  • 动静扩容以响应申请:函数计算能够依据用户申请量主动扩容,该过程对您和您的用户均通明无感知;
  • 依据函数的理论执行工夫按量计费:函数执行完结后,能够通过账单来查看执行费用,免费粒度准确到 100 毫秒。

详情:函数计算官网

至此,您大概能够简略了解到函数计算是怎么运作的,接下来以大量视频并行转码的案例来论述:假如一家在家教育或娱乐相干的企业,老师授课视频或者新的片源个别是集中式产生,而您心愿这些视频被疾速转码解决完以便能让客户疾速看到视频回放。比方在当下疫情中,在线教育产生的课程激增,而出课顶峰个别是 10 点、12 点、16 点、18 点等显著的峰值段,特定的工夫内(比方半个小时)解决完所有新上传的视频是一个通用而且广泛的需要。

2. 弹性高可用的音视频解决零碎

  • OSS 触发器

如上图所示,用户上传一个视频到 OSS,OSS 触发器主动触发函数执行,函数计算主动扩容,执行环境内的函数逻辑调用 FFmpeg 进行视频转码,并且将转码后的视频保留回 OSS。

  • 音讯触发器

如上图所示,利用只须要发一个音讯,主动触发函数执行音视频解决的工作即可,函数计算主动扩容,执行环境内的函数逻辑调用 FFmpeg 进行视频转码,并且将转码后的视频保留回 OSS。

  • 间接手动调用 SDK 执行音视频解决工作

以 python 为例,大抵如下:

python # –– coding: utf-8 –– import fc2 import json client = fc2.Client(endpoint=”http://123456.cn-hangzhou.fc.aliyuncs.com”,accessKeyID=”xxxxxxxx”,accessKeySecret=”yyyyyy”) # 可抉择同步 / 异步调用 resp = client.invoke_function(“FcOssFFmpeg”, “transcode”, payload=json.dumps( { “bucket_name” : “test-bucket”, “object_key” : “video/inputs/a.flv”, “output_dir” : “video/output/a_out.mp4”})).data print(resp)

从下面咱们也能够看出,触发函数执行的形式也很多,同时简略配置下 SLS 日志,就能够很快实现一个弹性高可用、按量付费的音视频解决零碎,同时能提供免运维、具体业务数据可视化、弱小自定义监控报警等超强性能的 dashboard。

目前曾经落地的音视频案例有 UC、语雀、躺平设计之家、虎扑以及几家在线教育的头部客户等,其中有些客户顶峰期间,弹性应用到了万核以上 CPU 计算资源,并行处理的视频达到 1700+,同时提供了极高的性价比。

详情能够参考:

  • simple-video-processing
  • fc-oss-ffmpeg

工作分治,并行减速

这种将工作分而治之的思维利用在函数计算上是一件乏味的事件,在这里举一个例子,比方您有一个超大的 20G 的 1080P 高清视频须要转码,即便您应用一台高配机器,须要的工夫可能还是要按小时计,如果中途出问题中断转码,您只能从新开始再反复一遍转码的过程,如果您应用分治的思维 + 函数计算,转码的过程衍变为 分片 -> 并行转码分片 -> 合并分片 ,这样就能够解决您上述的两个痛点:

  • 分片和合成分片是内存级别的拷贝,须要的计算量极小,真正耗费计算量的转码,拆分成了很多子工作并行处理,在这个模型中,分片转码的最大工夫根本等同于整个大视频的转码工夫;
  • 即便中途某个分片转码出现异常,只须要重试这个分片的转码即可,不须要整个大工作推倒重来。

通过将大工作正当的合成,配合应用函数计算,编写一点 code,就能够疾速实现一个弹性高可用、并行减速、按量付费的大型数据处理系统。

在介绍这个计划之前,咱们先简略介绍一下 Serverless 工作流,Serverless 工作流能够很好地将函数和其余云服务和自建服务有组织地编排起来。

1. Serverless 工作流简介

Serverless 工作流(Serverless Workflow)是一个用来协调多个分布式工作执行的全托管云服务。在 Serverless 工作流中,您能够用程序、分支、并行等形式来编排分布式工作,Serverless 工作流会依照设定好的步骤牢靠地协调工作执行,跟踪每个工作的状态转换,并在必要时执行用户定义的重试逻辑,以确保工作流顺利完成。Serverless 工作流简化了开发和运行业务流程所须要的工作协调、状态治理以及错误处理等繁琐工作,让您聚焦业务逻辑开发。

详情:Serverless 工作流官网

接下来以一个大视频疾速转码的案例来论述 Serverless 工作编排函数,实现大计算工作的合成,并行处理子工作,最终达到疾速实现单个大工作的目标。

2. 大视频的疾速多指标格局转码

如下图所示,假如用户上传一个 mov 格局的视频到 OSS,OSS 触发器主动触发函数执行,函数调用 FnF 执行,FnF 同时进行 1 种或者多种格局的转码(由 template.yml 中的 DST_FORMATS 参数管制),假如配置的是同时进行 mp4 和 flv 格局的转码。

  • 一个视频文件能够同时被转码成各种格局以及其余各种自定义解决,比方减少水印解决或者在 after-process 更新信息到数据库等;
  • 当有多个文件同时上传到 OSS,函数计算会主动伸缩,并行处理多个文件,同时每次文件转码成多种格局也是并行;
  • 联合 NAS + 视频切片,能够解决超大视频的转码,对于每一个视频,先进行切片解决,而后并行转码切片,最初合成,通过设置正当的切片工夫,能够大大放慢较大视频的转码速度;
  • fnf 能够跟踪每一步执行状况,并且能够自定义每一个步骤的重试,进步工作零碎的鲁棒性,如:retry-example

详情能够参考:fc-fnf-video-processing

在工作分治,并行减速具体的案例中,下面分享的是 CPU 密集型工作合成,但也能够进行 IO 密集型工作合成,比方这个需要:上海的 region 的 OSS bucket 中的一个 20G 大文件,秒级转存回杭州的 OSS Bucket 中。这里也能够采纳分治的思路,Master 函数在接到转存工作之后,将超大文件进行分片的 range 调配给每个 Worker 子函数,Worker 子函数并行转存属于本人那局部的分片,Master 函数待所有子 Worker 运行结束之后,提交合并分片申请,实现整个转存工作。

详情能够参考:利用函数计算多实例并发实现秒级转存超大文件

总结

本文探讨了 Serverless 服务平台能够使您的利用疾速程度扩大,并行处理的工作更加无效,并给出了具体的实际案例,无论在 CPU 密集型还是 IO 密集型场景,函数计算 + Serverless 都能完满解决您以下顾虑:

  • 不用为闲置的资源付费
  • 不必放心计算资源预留不够
  • 大计算量的工作须要疾速处理完毕
  • 更好的工作流程跟踪
  • 欠缺的监控报警、免运维、业务数据可视化等
  • ….

本文中对于 Serverless 音视频解决只是一个示例,它展现的是函数计算配合 Serverless 工作流在离线计算场景中的能力和举世无双的劣势。咱们能够用发散的形式去拓展 Serverless 在大规模数据处理实际的边界,比方 AI、基因计算、迷信仿真等。心愿本篇文章能吸引您,开启您的 Serverless 微妙之旅。

退出移动版