随着 IT 基础设施从物理机到虚拟机,再到以 Kubernetes 为代表的容器环境,甚至到 Serverless 的逐渐演进,今天的计算和应用的形态以一日千里的速度发展。尤其是 AI 和数据分析等数据智能应用的 Serverless 化已经成为了一种趋势。 Gartner 曾预测,到 2023 年 70% 的 AI 应用将基于容器和 Serverless 技术开发。这是大家相信的未来,但应用 Serverless 化之路充满艰辛,比如现有应用迁移门槛高,供应商锁定,基础设施响应能力不足,可观测性欠缺,存储接入繁琐等。
这些都是用户对于 Serverless 基础平台提供商的刚性需求,谁能更加开放,谁能更好提供 Serverless 应用所运行的基础设施和生态系统,谁才能成为客户的最终选择,而不仅仅是谁提供的计算资源弹性能力更强或者成本更低,这实际是云计算巨头的内功较量。
(图片来源于网络)
本文首先聚焦到 AI 和大数据等应用 Serverless 化的最大挑战:计算和存储分离架构带来的数据访问延迟和远程拉取数据带宽巨大的挑战。尤其在 GPU 深度学习训练场景中,迭代式的远程读取大量训练数据方法会严重拖慢 GPU 计算效率。
Serverless 云平台对用户提供的核心能力就是极致弹性,但是这里讨论的弹性并不只是资源弹性,而是站在用户视角的应用弹性或者说业务弹性,即从用户决定扩容开始到应用真正就绪提供服务的端到端时间。资源弹性时间是其中很重要的部分,计算资源能够实现秒级,甚至毫秒级扩容,相关基础设施就很快会面临巨大的压力,其中最常见的基础设施就是存储。如果存储系统的 IO 吞吐能力跟不上实例变化的速度,例如对于业务来说,容器实例 2 秒就完成了扩容,但还需要花几十秒钟甚至几分钟等待从存储下载数据,那么极致弹性也就无从谈起。
应该说 Serverless 容器化的技术体系对于传统的存储系统提出了新的挑战:
计算资源无存储能力,数据完全下沉到存储系统,导致并发数据访问压力陡增。这一方面影响存储系统的稳定性,另一方面也会打满存储系统服务带宽。
计算存储分离架构拉长了存储访问链路,跨网络通信数据和元数据访问的额外延迟。
传统分布式存储带宽与吞吐仅和数据使用容量成正比,而 Serverless 平台会创建大量的容器并发的访问存储系统的数据,会触发存储系统访问限流。这就造成计算资源极致弹性与存储系统有限带宽之间的矛盾。
换而言之,Serverless 的大数据和 AI 场景需要数据分流(Data Offloading),缩短数据读取链路和提供弹性的 IO 吞吐能力。但是考虑到现有云存储系统的稳定性,成本和通用性,这个架构演进会是一个任重道远的工作。
Fluid 是云原生计算基金会(CNCF)旗下的官方沙箱开源项目。该开源项目定位于面向云原生场景下的数据密集型应用加速和编排,社区主要开发者和维护者来自阿里巴巴、南京大学等多家知名企业和高校。Fluid 的思路是将存储系统的能力进行分层,分解为数据存储和数据访问能力,并且将一部分的数据访问能力向上平移到计算集群中;并且在大数据(AI)场景下,对“计算任务使用数据的过程”进行抽象,提出了弹性数据集 Dataset 的概念,并将数据分布式缓存技术与云原生自动弹性(Autoscaling),可迁移(Portablity),可调度(Scheduling)能力相结合。
Fluid 项目地址: https://github.com/fluid-cloudnative/fluid
数据访问能力向上平移的好处是可以利用计算集群中闲置的资源,通过分布式数据缓存能力一方面提供数据分流降低中心存储压力,另一方面利用数据本地性,VPC 网络性能优势和数据访问复用的特性,缩短数据访问路径,提升性能;通过 Dataset 的抽象,在特定语境下,根据应用的需求定义数据访问的范围,特征以及弹性,并且根据这些特性进行特定性能优化。
All problems in computer science can be solved by another level of indirection
实际上 Fluid 还是遵循计算科学中的所有问题都可以通过增加