Fluid是一个开源的云原生的分布式数据集编排和加速引擎,为AI和大数据云原生应用提供服务。
它旨在通过透明的数据管理和优化调度,帮助AI和大数据应用高效利用任何存储的数据,而无需修改现有应用。Fluid支持自动化的数据调度、缓存加速和弹性扩展,提升数据访问效率,确保在大规模分布式环境中实现高效的存储和计算协同。
Fluid功能介绍
作为一款开源的云原生基础架构,Fluid为AI与大数据云原生应用提供一层高效便捷的数据抽象,将数据从存储抽象出来,以便实现以下功能:
数据集抽象原生支持:将数据密集型应用所需基础支撑能力功能化,实现数据高效访问并降低多维管理成本。
可扩展的数据引擎插件:提供统一的访问接口,方便接入第三方存储,通过不同的Runtime实现数据操作。
数据弹性和调度:将数据缓存技术和弹性扩缩容 、数据亲和性调度能力相结合,提高数据访问性能。
应用编排:结合Kubernetes调度器,将计算任务优先调度至已缓存数据的节点,减少网络传输开销,提升计算效率。
Fluid基础概念
Dataset:数据集,抽象成逻辑上相关的一组数据的集合,被运算引擎使用。它允许用户定义数据集的位置、格式、版本、数据访问权限等信息。Dataset可以与不同的存储引擎(如Alluxio、JuiceFS等)结合使用,确保数据的统一管理和高效访问。
Dataset Operation:对Dataset执行的数据操作任务,例如数据预热、数据迁移、数据缓存清理等。这些操作通过Fluid的CRD进行定义和管理,帮助用户优化数据访问性能或维护数据生命周期。
Runtime:实现数据集安全性、版本管理和数据加速等能力的执行引擎,定义了一系列生命周期的接口。可以通过实现这些接口,支持数据集的管理和加速。
AlluxioRuntime:作为 Cache Engine Pods 的一种实现,基于开源数据编排框架 Alluxio构建,用于在 Kubernetes 集群中提供高性能的数据缓存与访问加速能力,支持PVC、Hostpath、ZOS加速。
Fluid系统架构
Fluid的整体架构如下所示:
各组件说明如下:
| 组件 | 说明 |
|---|---|
| Dataset CRD | 用于定义数据集的来源、访问模式及缓存策略。通过Dataset CRD,用户可以在Kubernetes中创建、更新、删除和监控数据集,便于高效的数据管理。 |
| Runtime CRD | 用于管理底层缓存引擎的生命周期(创建、扩缩容、预热),支持多种分布式缓存系统。 |
| Dataset/Runtime Manager | 负责数据集和支持数据集的运行时在Kubernetes中的调度和编排。负责数据集的调度,迁移和缓存运行时的弹性扩缩容;同时支持数据集的自动化运维操作,比如控制细粒度的数据预热,比如可以指定预热某个指定文件夹;控制元数据备份和恢复,提升对于海量小文件场景的数据访问性能;设置缓存数据的pin策略,避免数据驱逐导致的性能震荡。 |
| Application Manager | 负责使用数据集的应用Pod的调度和运行,分为两个核心组件:Scheduler和Webhook.
|
| CSI Plugin | 以容器的方式的方式启动存储客户端,与存储客户端完全解耦,做CSI Plugin升级不会影响到业务容器,同时支持多版本存储客户端部署在同一个Kubernetes集群中;将客户端独立在 pod 中运行也就使其在 Kubernetes 体系中,提供可观测性;设置客户端的计算资源配额。 |
| Runtime Plugin | 作为一种扩展性强的插件,能够支持多种数据访问引擎。Fluid通过抽象出一些通用的特征,如缓存的使用介质、配额、目录等,与不同的分布式缓存引擎实现技术具有可扩展性。比如AlluxioRuntime使用Master-Slave架构,而JuiceFSRuntime使用Worker P2P架构,都可以在Runtime的CRD中进行配置。该插件不仅支持Alluxio、JuiceFS等特定的Runtime,也支持通用的ThinRuntime,使用者无需开发即可实现对通用存储的访问。 |