Fluid 0.6 版本发布:数据感知的Pod调度与数据集自动弹性扩缩容

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
简介: Fluid 是 CNCF 基金会旗下云原生环境中数据密集型应用的高效支撑平台,由南京大学、阿里云云原生团队以及 Alluxio 开源社区联合发起。项目自开源发布以来吸引了众多相关方向领域专家和工程师的关注,在大家的积极反馈下社区不断演进。近期 Fluid 0.6 版本正式发布,在该版本中,Fluid 主要新增改善三个方面的内容。

作者 | 顾荣  Fluid开源社区主席 南京大学PASALab


Fluid 是 CNCF 基金会旗下云原生环境中数据密集型应用的高效支撑平台,由南京大学、阿里云云原生团队以及 Alluxio 开源社区联合发起。项目自开源发布以来吸引了众多相关方向领域专家和工程师的关注,在大家的积极反馈下社区不断演进。近期 Fluid 0.6 版本正式发布,在该版本中,Fluid 主要新增改善以下三个方面内容:


  • 数据感知的Pod调度,支持数据与应用协同调度,加强生态融合, 适配更多开源调度器
  • 丰富数据集操作功能,支持数据集自动弹性扩缩容、挂载点动态更新
  • 缓存引擎新增与增强,支持缓存引擎高可用并新增公有云缓存引擎


Fluid 开源项目地址:https://github.com/fluid-cloudnative/fluid


Fluid 项目全新官网:https://fluid-cloudnative.github.io/


这三大主要功能的开发需求来自众多社区用户的实际生产反馈,此外 Fluid v0.6 还进行了一些 bug 修复和文档更新,欢迎使用体验 Fluid v0.6!

Fluid v0.6 下载链接:https://github.com/fluid-cloudnative/fluid/releases


下文是本次新版本发布功能的进一步介绍。



数据感知到 Pod 调度优化


Fluid 一直致力于利用云原生资源调度能力满足云上数据密集应用高效运行的需求。在上个版本 Fluid v0.5 中,我们已经针对数据集编排缺乏架构感知的问题,在数据集编排调度方面进行了一系列优化。在 Fluid v0.6 中,我们进一步针对容器编排缺乏数据感知的问题,设计实现了对 Pod 调度的优化。


我们目前考虑到的优化场景问题包括:


  • 使用非 K8s 原生调度器时,不能与 Fluid 很好的兼容
  • 使用数据集的 Pod 调度时,缺少考虑缓存分布考虑
  • 不使用数据集的 Pod,可能调度到有缓存的节点,影响其它 Pod 使用缓存


我们根据数据集缓存位置信息制定 Pod 调度策略,通过 webhook 机制将生成的调度信息注入到 Pod,最终实现了以下功能:


  • 在默认 Fuse 模式(Fuse 和缓存引擎同节点部署)下,支持 K8s 原生调度器,以及 Volcano,Yunikorn 等第三方调度器,实现 Pod 数据亲和性调度
  • 在全局 Fuse 模式下,将 Pod 优先调度到有数据缓存能力的节点
  • 当 Pod 不使用数据集时,尽量避免将 Pod 调度到有缓存的节点


关于 Pod 调度优化功能的开启与配置方式,请参考 Github 上的示例文档



丰富数据集操作功能


1. 数据集在线弹性缓存扩缩容


Fluid v0.5 开启了在线弹性扩缩容之路,当时提供了在线手动扩缩容的能力。然而,在真实的生产环境中,手工操作扩缩具有较大的复杂度和延迟性。自动弹性伸缩是 Kubernetes 的核心能力之一,此前一直是围绕这无状态的应用负载展开。现在,有状态的数据密集型应用也可以利用 Fluid 提供的分布式缓存的弹性伸缩能力,从而实现灵活扩充和收缩数据缓存。Fluid 基于 Runtime 提供了缓存空间、现有缓存比例等性能指标, 结合自身对于 Runtime 资源的扩缩容能力,从而达到数据缓存按需伸缩能力。


进一步,我们发现根据数据缓存量比例触发自动的数据缓存能力弹性扩缩容具有非常多的优势,但也有一个缺陷,就是需要根据资源压力计算出合理的值后调整,这就存在一定的程度滞后性。因此 Fluid v0.6 通过结合 CronHPA 提供了定时扩缩容的能力,从而根据应用自身使用数据的时间特点,实现数据缓存的按时扩缩容,充分利用了集群计算和存储资源加速应用的数据访问性能。当前,使用自动扩容+定时缩容可以最大化的使 Fluid 平台在 K8s 集群内变成一种可控的弹性缓存资源。目前,Fluid 的 Alluxio Runtime 在这方面提供了完整的支持。


2. 数据集挂载点动态更新功能


在 Fluid 的每个数据集中,都声明了若干挂载点(mountPoint)。例如,如下名为 test 的数据集中,声明了 hbase 和 spark 两个挂载点:


apiVersion: data.fluid.io/v1alpha1kind: Datasetmetadata:name: testspec:mounts:    - mountPoint: https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/       name: hbase- mountPoint: https://mirrors.tuna.tsinghua.edu.cn/apache/spark/       name: spark


之前的版本中,只有数据集创建时,才会把数据集中声明的那些挂载点挂载到虚拟文件系统中。一旦数据集创建完成,即使再修改挂载点也不会生效,若要修改则只能删除重建,这在实际使用中具有很多不便。在 Fluid v0.6中,我们新增了数据集挂载点动态增减功能。一旦修改数据集的挂载点,数据集将暂时进入 Updating 状态。直到挂载/卸载完成,数据集才会重新回到 Bound 状态。



缓存引擎新增与增强


1. 新增数据缓存引擎实现


Fluid 默认使用的分布式缓存 Runtime 是 AlluxioRuntime,为了满足不同环境用户对缓存系统的需求,在之前的版本中 Fluid 已经将分布式缓存 Runtime 接入框架设计成了可插拔的架构。在 Fluid v0.6中,来自腾讯云的社区贡献者基于该框架开发了 GooseFSRuntime,新增了一种支撑 Fluid Dataset 数据管理和缓存的执行引擎实现。


2. 数据缓存引擎高可用运行时


Fluid 目前支持的缓存引擎 Alluxio、JindoFS、GooseFS 均为分布式文件系统,Alluxio、GooseFS 、JindoFS Cache 模式均为 Master-Worker 架构。在分布式文件系统中,高可用性包含两个方面:一是整个文件系统的可用性,二是数据的完整和一致性。Master 作为全局元数据管理组件,通过 Master High-Availability 保证文件系统的高可用;通过 Raft 算法实现选主、状态机同步等操作保证日志和元数据的完整和一致性。在 Fluid v0.6中,来自腾讯云的社区贡献者设计实现高可用运行时功能,用户只需要指定期望 master 个数,如果个数为大于1的奇数,将自动使用高可用模式。


总结


Fluid v0.6 主要解决和满足社区用户在实际生产环境中反馈的问题和需求。在调度方面,支持数据感知的Pod调度,从而满足多场景数据与应用协同调度的需求。在数据集操作方面,进一步丰富了相关功能,支持数据集自动弹性扩缩容、挂载点动态更新。在缓存引擎方面,进行新增缓存引擎新增并增强功能,支持了缓存引擎高可用并新增公有云缓存引擎。 


了解更多:

https://fluid-cloudnative.github.io/image.gif 



鸣谢


Fluid v0.6的开发得到了诸多单位的贡献,这里列出本版本提供的几个重要功能的开发者的名字,感谢他们的付出贡献!


● 杨丽(北京奇虎科技有限公司)数据集挂载点动态更新功能;

● 仇伶玮(中国电信)数据缓存感知的Pod调度优化;

● 谢远东(腾讯云)缓存引擎高可用性、GooseFSRuntime支持;


作者简介


顾荣 博士,南京大学计算机系副研究员,Fluid 开源社区主席、Alluxio 开源项目 PMC 成员,研究方向大数据处理系统,已在 TPDS、ICDE、JPDC、IPDPS、ICPP 等领域前沿期刊会议发表论文30余篇,主持国家自然科学基金面上项目/青年项目、中国博士后科学基金特别资助项目多项,研究成果落地应用于阿里巴巴、百度、字节跳动、中国石化、华泰证券等公司和开源项目 Apache Spark、Alluxio,获 2018 年度江苏省科学技术一等奖、2019 年度江苏省计算机学会青年科技奖、腾讯云最具价值专家奖项,担任中国计算机学会系统软件专委会委员/大数据专委会通讯委员、江苏省计算机学会大数据专委会秘书长。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
小程序 Java 数据安全/隐私保护
教学过程管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
教学过程管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
204 1
|
IDE API 开发工具
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之QRCode组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之QRCode组件
379 2
|
数据采集 JavaScript 前端开发
网页抓取进阶:如何提取复杂网页信息
在信息爆炸时代,从复杂网页中高效抓取数据对开发者和分析师至关重要。本文探讨如何利用 `webpage` 对象结合代理IP技术,轻松抓取如大众点评这类动态加载且具备反爬机制的网站数据。通过 Python 的 `requests`、`BeautifulSoup` 和 `Selenium`,结合代理IP,详细讲解了如何应对动态内容加载、反爬机制等问题,并提供了具体代码实现。通过这种方法,可以批量抓取商家信息,为数据分析提供支持。
1084 1
网页抓取进阶:如何提取复杂网页信息
|
12月前
|
人工智能 弹性计算 运维
触手可及:阿里云函数计算助力AI大模型的评测
阿里云推出的面向AI服务器的功能计算(Functional Computing, FC),专为AI应用提供弹性计算资源。该服务支持无服务器部署、自动资源管理和多语言支持,极大简化了AI应用的开发和维护。本文全面评测了FC for AI Server的功能特性、使用体验和成本效益,展示了其在高效部署、成本控制和安全性方面的优势,并通过具体应用案例和改进建议,展望了其未来发展方向。
455 4
|
存储 SQL 关系型数据库
MySQL数据库学习指南与学习资源推荐
MySQL数据库学习指南与学习资源推荐
|
11月前
|
负载均衡 Oracle 网络协议
Oracle中TAF与SCANIP全面解析
通过本文的解析,读者可以清晰地理解Oracle中TAF与SCAN IP的概念、工作原理及其在实际应用中的优势和局限性。TAF通过自动故障转移提升了会话的高可用性,而SCAN则通过简化客户端连接和负载均衡提升了集群的可管理性和扩展性。这两种技术在现代企业数据库架构中扮演着重要角色,能够显著提高系统的稳定性和可用性。
438 6
|
12月前
|
监控 网络协议 应用服务中间件
深入解析:如何确定网站使用的端口号
【10月更文挑战第21天】 在网络通信中,端口号是识别特定服务的关键。一个IP地址可以有多个端口,每个端口可能运行着不同的服务。当我们在浏览器地址栏输入一个网址时,实际上是通过特定的端口与服务器进行通信。本文将探讨如何确定一个网站使用的端口号,以及端口号在网络通信中的作用。
913 4
|
12月前
|
存储 前端开发 JavaScript
React useState 和 useRef 的区别
本文介绍了 React 中 `useState` 和 `useRef` 这两个重要 Hook 的区别和使用场景。`useState` 用于管理状态并在状态变化时重新渲染组件,适用于表单输入、显示/隐藏组件、动态样式等场景。`useRef` 则用于在渲染之间保持可变值而不触发重新渲染,适用于访问 DOM 元素、存储定时器 ID 等场景。文章还提供了具体的代码示例,帮助读者更好地理解和应用这两个 Hook。
359 0
|
Kubernetes 容器
Kubernetes(K8S) 镜像拉取策略 imagePullPolicy
Kubernetes(K8S) 镜像拉取策略 imagePullPolicy
254 0
|
Prometheus 监控 Cloud Native
Java一分钟之-Micrometer:应用指标库
【6月更文挑战第11天】Micrometer是Java应用的度量库,提供统一API与多监控系统集成,如Prometheus、InfluxDB。它有标准化接口、广泛后端支持、自动配置和多种度量类型。常见问题包括度量命名不规范、数据过载和忽略维度。解决办法包括遵循命名规范、选择重要指标和使用标签。了解API、设计度量策略和选好监控系统是关键。通过正确使用Micrometer,可建立高效监控体系,保障应用稳定性和性能。
295 1