NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

治愈 Serverless 的“阿喀琉斯之踵” | Serverless Kubernetes 上数据应用的大航海时代(1)

  • 2022-03-08
  • 本文字数:4380 字

    阅读完需:约 14 分钟

治愈 Serverless 的“阿喀琉斯之踵” | Serverless Kubernetes上数据应用的大航海时代(1)

Serverless,全称 Serverless Computing,即无服务器计算,也有一些场景称之为函数即服务(Function-as-a-Service,缩写为 FaaS),是一种新型的云计算模型。

 

大约 10 年前,Serverless 作为一种未来的软件服务概念被正式提出[1x]。2014 年,AWS 率先用 Lambda 开启了 Serverless 的产品化,再到 2017 年云厂商纷纷布局 Serverless 领域。国内外比较出名的产品包括有 AWS Lambda、Microsoft Azure Functions、Google Cloud Run、Alibaba Function Compute 等。更进一步,Kubernetes 的蓬勃发展也催生了一系列 Serverless Kubernetes 形态的服务,得益于 Kubernetes 的标准化和 Serverless 的弹性和免运维,Serverless Kubernetes 得到了许多用户的垂青。

 

2019 年,UC Berkeley 研究人员在“Serverless Computing: One Step Forward, Two Steps Back”论文[2]中分析判断道:“Serverless 将引领云计算的下一个十年”。时至 2021 年,Forrester 发布报告[3x]称,统计中 31%主流企业的核心应用,从原来的主机架构迁移到了 Serverless 架构,并且这个规模还在持续高速增长。

 

经过近 10 年的技术磨砺,Serverless 架构已经凭借着细粒度计算资源分配、无需预先分配资源、真正意义上的高度扩容和弹性等方面的功能优势,给很多基于云计算开发的业务和应用带来了丰富的技术红利,更是被广泛采纳,逐渐在越来越多的业务中发挥重要价值。这项当年概念性的 Serverless 技术,已经“飞入寻常百姓家”,也成为各大云厂商都落地支持的重要服务模式。

 

高延时,Serverless 的阿喀琉斯之踵

 

即便如此,Serverless 在带来很多发展新机遇的同时,在主流场景大规模实际落地方面也面临诸多挑战。

 

同样来自 UC Berkeley 的论文也分析了 Serverless 的局限性,文章称其为“进一退二(One Step Forward, Two Steps Back)”——无限弹性的计算平台愿景下面临着数据访问的掣肘和黑盒性阻碍数据一致性、leader 选举、分布式事务等分布式技术的发展。

 

  • One Step Forward:

 

通过提供自动缩放功能,如今的 Serverless 产品在云编程方面迈出了一大步,它提供了一种看似无限的计算平台。

 

原文:By providing autoscaling, today’s FaaS offerings take a big step forward for cloud programming, offering a practically manageable, seemingly unlimited compute platform. 

 

  • Two Steps Back:

 

但并非一切都已尽善尽美,将 Serverless 大规模推广到一些现有应用中还有些明确的障碍。

 

首先,Serverless 忽视了高效数据处理的重要性; 其次,它们给分布式系统的开发添加了阻碍。其中第二点不在本文的讨论范围内。

 

原文:First, they painfully ignore the importance of efficient data processing. Second, they stymie the development of distributed systems.

 

对于很多数据应用而言,迁移到 Serverless 面临的一大问题就是数据访问的高延时和并发访问造成的分布式存储 IO 瓶颈。归根结底这是由于:

 

  1. Serverless 是 Data-shipping 架构,其工作机制是将数据传输到代码所在处执行,而不是将代码传输到数据所在处执行,而数据往往比代码的传输量要大得多。同时,目前主流的 Serverless 平台都是『将数据传输到代码所在处执行』这种架构,这就导致数据的传输成为了运行效率的最大瓶颈。

  2. 与之相伴的是,每个 Serverless 的计算单元都是运行在独立的容器或者虚拟机当中,而且生命周期短且难以定位,这就限制了多次相同的请求对缓存的使用,会造成比较大的性能损耗。

  3. Serverless 的无限弹性给存储系统造成了巨大访问压力,甚至会触发存储系统访问限流。

 

比如在机器学习场景下,在初始化的时候加载机器学习模型,而有些模型的大小达到几 GB 甚至几十 GB,根据实测单个实例拉取模型的时间至少 60 秒以上,整个启动时间在 2 分钟左右,如果考虑扩容数量成百上千的场景,严重的 IO 竞争影响了 Serverless 的启动性能。

 

这就引起了数据科学家的担忧:大数据运算和 AI 负载在 Serverless 上是不是要以牺牲性能为代价换取成本上的收益?当启动速度慢到一定程度的时候,Serverless 所擅长的弹性优势不复存在;如果运行时间太长的话,Serverless 相比于包年包月的虚拟机租赁收费模式成本上孰优孰劣也不能清晰确定。

 

数据访问的高延时俨然成为了 Serverless 应用的阿喀琉斯之踵,阻碍其在数据密集型应用场景的规模化落地。


与近地缓存理念相结合的 Fluid

 

Serverless 数据访问延时的问题,本质上是由云上的计算存储分离架构导致的。如果能够将数据以分布式的方式加载到计算集群中,并充分发挥数据本地性和数据访问可复用的特性,则可以提升数据访问的性能。CNCF 旗下开源沙箱项目 Fluid 秉持着这个理念应运而生。

 

Fluid 是一个开源的 Kubernetes 原生的分布式数据集编排和加速引擎,主要服务于云原生场景下的数据密集型应用,例如大数据应用、AI 应用等。通过 Kubernetes 服务提供的数据层抽象,Fluid 可以让数据像流体一样在诸如 HDFS、OSS、Ceph 等存储源,并在 Kubernetes 上层云原生应用计算之间灵活高效地移动、复制、驱逐、转换和管理。

 

另外,具体数据操作对用户透明,用户不必再担心访问远端数据的效率、管理数据源的便捷性,以及如何帮助 Kuberntes 做出运维调度决策等问题,只需以最自然的 Kubernetes 原生数据卷方式直接访问抽象出来的数据即可,剩余任务和底层细节全部交给 Fluid 处理。

 

Fluid 项目当前主要关注数据集和使用应用编排这两个重要场景。数据集编排可以将指定数据集的数据缓存到指定特性的 Kubernetes 节点,而应用编排将使用该数据集的应用调度到可以或已经存储了指定数据集的节点上。这两者还可以组合形成协同编排场景,即协同考虑数据集和应用需求进行节点资源调度。


Fluid 设计之初是为了 Serverful 场景使用(Serverful 与 Serverless 相对,意思是应用对所运行的服务器有感知,并且在服务器为中心的前提下实现架构设计),通过计算任务与数据本地性和复用性调度相结合实现数据访问性能最大化。

 

然而,许多用户在实践中还是选用了缓存和计算节点分离的架构,就是将计算集群中的部分节点专门用作缓存,另外一部分节点用来作为计算。由于缓存节点和计算在同样的网络环境下(VPC),并且分布式缓存可以实现 P2P 的数据访问,这样避免了存储服务限流和网络限流。这种模式被称为近地缓存。它虽然不能和本地缓存的性能相比,但是一方面缩短了计算与存储的物理距离,从漂洋过海变成了同一个数据中心甚至同一个机柜,有效缩减了访问延时,另一方面通过 P2P 的数据传输突破了存储服务器端的网络带宽的限制。

 

在此基础上,Fluid 支持数据弹性和可操作性,能够根据计算吞吐需求实现:

 

  1. 数据集合的可伸缩性——Fluid 是一套可复制,易扩展的模式,这样才能面对数据集合的伸缩、集群规模的伸缩具备良好的应对能力。

  2. 数据集合的可操作性——Fluid 支持通过 Dataload CRD 来进行多种模式的预热,包括指定文件列表、文件夹的元数据进行预热。

 

因此,如果用户能够了解(有很多自动化的方式做到)自己的数据使用模式和对吞吐性能的需求,就能实现性能提升的有的放矢。通过使用更多节点 SSD 的缓存节点,将数据缓存设置更多的备份,设置分布式缓存访问的随机性,都可以有效地避免热点数据成为访问瓶颈。

 

面向 Serverless 场景的数据应用支持

 

Fluid 0.7 之前的版本是不支持 Serverless 的,实际上多数流行的开源软件都不能大规模地部署在 Serverless 平台上,毕竟目前很多开源软件(尤其是数据系统)并不是针对 Serverless 执行环境的而设计的。这背后主要有两个问题:

 

  1. Serverless 平台是黑盒系统,运行时支持都是由平台提供商开发的,对于 Kubernetes 生态的支持并不完善。比如多数 Serverless 不支持社区广泛支持的 CSI Plugin、Device Plugin 机制等。因此,如何对接 Fluid 就变成了问题。

  2. Serverless 假设执行的是简单的、独立的任务,相互间不通信,同时计算任务完全无状态。 然而,Fluid 本身是要通过分布式缓存系统实现提速的。这里涉及到的分布式(网络通信)和有状态(缓存),又是一个矛盾点。

 

为了支持 Serverless 场景,Fluid 解决问题的基本思路是对不同的问题分而治之,具体来说:

 

  1. Sidecar 注入实现数据访问对接。自动识别用户提交应用中使用的 Fluid Persistent Volume Claim,并通过 Sidecar 模式将不同缓存 Runtime 的 Fuse 客户端注入到 Serverless Pod 中,并且在确保 Fuse 容器正常启动后再启动应用读取数据。在此基础上,该 Fuse 容器还接管了用户应用的数据读写操作,同时配合 Fluid Controller 的控制平面管理数据访问权限,数据吞吐控制以及数据弹性等功能。

 

  1. 将分布式缓存编排管理委托 ServerFull 组件代理。将单纯的 Serverless Kubernetes 模式变成混合节点模式,一部分是真实的虚拟机节点用来作为数据缓存池,另一部分是由Virtual Kubelet(https://github.com/virtual-kubelet/virtual-kubelet) 负责调度和管理 Serverless Pod。由于 Virtual Kubelet 已经成了云厂商实现 Serverless Kubernetes 的实施标准,比如 AWS Fargate、Azure ACI 和阿里云 ECI 等 Serverless 平台都已经提供完整支持。将数据访问的能力放置在 Serverless 应用中,但是其依赖的数据缓存编排和弹性能力则由 ServerFull 部分提供。

 

以下为 Fluid 在 Serverless 场景的架构,可以分为数据平面(Data Plane)和控制平面(Control Plane):

 

  • 数据平面由不同 Runtime 对应的 Fuse container 组成,而 Fuse container 以 sidecar 的形式和应用一起部署。而 sidecar 负责接管应用访问数据的功能。

  • 管理平面分为三部分:

  1. Injector:负责将不同数据访问、runtime 实现信息转换为 sidecar 可以识别的信息,注入到读取数据的应用中,同时控制应用中容器的启动顺序。该应用不限于 Pod,还包括类似 Spark、TFJob、MPIJob 等大数据 AI 场景下常见的工作负载。

  2. Cache Runtime Controller: 结合 Fuse Sidecar 中的数据吞吐效果控制数据缓存弹性,同时管理数据访问权限。

  3. Application Controller:对于类似 BatchJob、TFJob、SparkJob 等任务类型负载,当其中的用户任务退出后,需要 Fuse container 也可以主动退出。


由于 Serverless 的架构也在不断升级换代,相信未来 Serverful 的部分会不断被云厂商以服务化方式提供,从而演变成一个可以弹性并且按需付费的加速服务。

 

总结

 

本文介绍了 Fluid 完成了对 Serverless 场景的第一步支持,后续我们会通过一系列的文章介绍其设计方案以及在 Knaitve 等开源 Serverless 平台的实践。

 

作者简介:


车漾,阿里云高级技术专家

顾荣,南京大学副研究员


Reference:

 

[1] https://en.wikipedia.org/wiki/Serverless_computing

[2] Joseph M. Hellerstein, Jose Faleiro, Joseph E. Gonzalez, Johann Schleier-Smith, Vikram Sreekanti, Alexey Tumanov and Chenggang Wu. Serverless Computing: One Step Forward, Two Steps Back, CIDR 2019.

[3]https://www.mo4tech.com/serverless-year-end-technology-inventory-industry-academic-community-everywhere-domestic-manufacturers-quickly-block.html

 

2022-03-08 10:302159

评论

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

35K成功入职:蚂蚁金服面试Java后端经历!

爱好编程进阶

Java 程序员 后端开发

云VR的未来发展方向

3DCAT实时渲染

云VR

MOSN 1.0 发布,开启新架构演进

SOFAStack

开源 开发者 云原生 资讯 Go 语言

Curve 基于 Raft 的写时延优化

网易数帆

开源 分布式 云原生 raft 存储

中国科技人,在残酷春天里翘首等待

脑极体

“消息驱动、事件驱动、流 ”基础概念解析

阿里巴巴云原生

阿里云 云原生 事件总线 EventBridge

10个经典场景带你玩转SQL优化

爱好编程进阶

Java 程序员 后端开发

免费ETL批量调度,数据仓库运维工具TASKCTL 8.0 环境使用安装

TASKCTL

大数据 DevOps 敏捷开发 ETL 自动化运维

SIG 直播:如何使用 SMC-R 透明加速 TCP 应用? | 第15期

OpenAnolis小助手

TCP 龙蜥大讲堂 SMC-R SIG双周会

字节跳动Java后端岗,三轮面试,四个小时,灵魂拷问,结局我哭了但下次还敢

Java架构追梦

Java 程序员 后端开发 字节面试

Kruise Rollout: 让所有应用负载都能使用渐进式交付

阿里巴巴云原生

阿里云 开源 Kubernetes 云原生 OpenKruise

Java并发JUC(java.util.concurrent)线程池

芝士味的椒盐

Java SE Java多线程 Java 线程

从“打地鼠”到“造城池”,华为应用市场带来的安全隐私保护新范式

脑极体

20多年的岁月里一路走来满是辜负与遗憾,从双非到阿里SP,收到offer的那天我哭惨了

爱好编程进阶

程序员 后端开发

Laxcus 6.0正式发布,启航国产化分布式操作系统新征程

LAXCUS分布式操作系统

数据库 大数据 分布式 操作系统 集群

企评家帮你打造企业价值评估,全面展示企业实力地位完善企业管理

企评家

立足西安,昇腾AI为开发者留下了脚印一串

这不科技

火山引擎荣获中国信通院“2021边缘计算融合创新奖”

火山引擎边缘云

边缘计算 中国信通院

共建开源组件生态 2022 OpenHarmony组件大赛等你来

科技汇

linux之systemctl命令

入门小站

Linux

如何做好高并发系统设计,我总结了三点

架构精进之路

架构 高并发 4月日更 4月月更

DAYU200升级系统

坚果

4月月更

企评家帮助新三板企业进行投资价值评价分析

企评家

Next.js 在 Serverless 中从踩坑到破茧重生

CODING DevOps

Serverless 云开发 Cloud Studio 云端工作台

时序数据库在核电安全领域的应用

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

Java并发JUC(java.util.concurrent)集合不安全

芝士味的椒盐

Java java集合总结 java集合使用 Java集合框架

2021,你还在写“赤裸裸

爱好编程进阶

Java 程序员 后端开发

企评家|高升控股股份有限公司成长性报告简述

企评家

企业评价 企业成长性 评价分析报告

火山引擎联合中国信通院发布《边缘云总体技术与测试要求》

火山引擎边缘云

边缘计算 标准化

CI/CD概述,基于云效进行持续集成CI和持续部署CD(K8s)

阿里云云效

云计算 阿里云 持续集成 CI/CD 持续部署

一文简述:何为分布式应用服务平台

穿过生命散发芬芳

4月月更

治愈 Serverless 的“阿喀琉斯之踵” | Serverless Kubernetes上数据应用的大航海时代(1)_文化 & 方法_车漾_InfoQ精选文章