当前位置: 首页 > news >正文

存储更弹性,详解 Fluid “ECI 环境数据访问” 新功能

近期,Fluid 支持了阿里云 ECI 应用,并将 JuiceFS Runtime Controller 设置为默认安装;JuiceFS 也就此功能与 Fluid 完成了集成和测试工作。 用户可以在 ECI 环境中使用JuiceFS, 体验计算与存储的双重极致弹性。

(还不了解 JuiceFS Runtime Controller 的小伙伴,推荐先阅读:在 Kubernetes 集群玩转 Fluid + JuiceFS ,这个功能可以让用户更好地在 Kubernetes 环境中使用 JuiceFS 缓存管理能力)

ECI(Elastic Container Instance)阿里云弹性容器实例,是阿里云 Serverless 和容器化的弹性计算服务。用户无需购买和管理底层 ECS 服务器,只需要提供打包好的镜像,即可运行容器,用户仅需要为容器实际运行消耗的资源付费。

如果说云原生就是使资源池化,那么 Serverless 的演进才使得基础设施水电煤化成为可能。Serverless 的核心是快速交付、智能弹性、更低成本。**数据智能应用的 Serverless 化已经成为了一种趋势,尤其是对于计算密集型任务的 AI 训练场景来说,长期维护大量 ECS 服务器,成本相当高。**对于这类场景,ECI 是最理想的选择,用户只需要为任务运行时的资源付费,即用即停,不需要长期维护 ECS 服务器,是降本增效的最优选择。

目前,在ECI 环境,JuiceFS 用户可以借助 Fluid 来使用 JuiceFS,亦可借助 Fluid 的 Dataload 功能更方便地使用 JuiceFS 的缓存预热功能,进一步提升云上 AI 应用的数据访问效率。
Fluid 如何支持 ECI 应用

Fluid 通过自动识别用户应用中使用的 Fluid PVC(PersistentVolumeClaim),将不同缓存 Runtime 的 FUSE 客户端以 Sidecar 的形式注入到 Serverless Pod 中。JuiceFS 客户端以 Sidecar 容器的方式单独为应用容器提供挂载服务,且与应用容器同生命周期,用户只需要为应用运行时的资源付费即可。

同时,为了提高数据加速能力,独立缓存集群可以长时间运行,只需单独开几台 ECS 节点用以运行各 Runtime 的缓存集群,为 Sidecar 提供分布式缓存服务。

整体架构如下图。

Why JuiceFS in AI

AI 训练场景会产生大量的小文件,同时 AI 作业管线(Pipeline)纷繁复杂、流程长,ML/DL 框架、MPI 框架、科学计算库、大数据计算引擎等不同组件需要对接不同的数据访问接口;当在 Kubernetes 平台上,尤其是 Serverless 环境使用传统文件系统也面临可靠性、访问性能等一系列问题。

JuiceFS 是一款为云上环境设计的分布式存储引擎,采用「数据」与「元数据」分离存储的架构,元数据引擎可以横向扩展,轻松支持百亿小文件存储;并且 JuiceFS 云服务版具备分布式缓存能力,对于机器学习中需要对同一个数据集反复训练等场景,可以大幅提升数据访问的性能。

JuiceFS 如何在 Fluid 中工作

通过 Fluid 我们可以快速搭建 JuiceFS 的环境,构建出 JuiceFS 独立缓存集群,缓存集群以 StatefulSet 的形式运行在 ECS 节点中,提供分布式缓存服务,而 FUSE 客户端以 Sidecar 的方式运行在业务 Pod 中,业务 Pod 则运行在 ECI 节点上。

使用流程

具体操作可参考官网 JuiceFS 文档。

准备环境

目前 Fluid on ECI 还处于公测阶段,默认没有开启,但我们可以申请 AI 套件免费体验席位。

申请完毕后,我们需要创建一个 ACK 版集群,集群的 Kubernetes 版本不低于1.18。在 ACK 集群中可以直接通过云原生 AI 套件,安装 Fluid。

使用 JuiceFS

JuiceFS 采用元数据和数据分开存储的设计,元数据会被存储在元数据服务引擎中,数据会被存储在对象存储中,对象存储需要用户自己提供。由于目前只有云服务版 JuiceFS 提供分布式缓存服务,本文以云服务版 JuiceFS 为例。

1.创建 Secret 第一步在 ACK 集群中创建保密字典,填入需要密文存储的 token(JuiceFS 控制台管理的 volume token)和对象存储的 accesskey 和 secretkey。

2.创建 JuiceFSRuntime 和 Dataset 在 JuiceFSRuntime 中指定副本数及缓存地址等信息;在 Dataset 的 options 中填入对象存储的 bucket,在 encryptOptions 中填入引用 Secret 的值。

创建好后,可以在容器组页面看到有 Worker Pod 创建出来:

这 5 个 Worker 就组成了一个 JuiceFS 独立缓存集群,运行在 ECS 节点上,为客户端提供缓存服务。

3.缓存加速 缓存集群创建好后,我们可以先进行缓存预热,创建 Dataload,指定上一步创建的 Dataset。「任务」页面的 jfs-load-loader-job 显示完成,即代表缓存集群预热完成。
4.创建应用

最后我们可以创建应用了,在应用的数据卷中指定与 Dataset 同名的存储卷,这里我们创建一个 Job,启动命令为统计拷贝数据的时间。同时需要给 Pod 设置以下两个 Label:

alibabacloud.com/fluid-sidecar-target: eci
alibabacloud.com/eci: "true

应用创建好后,我们就可以看到 Pod 中有 Webhook 注入的 fluid-fuse 容器,且运行在虚拟节点上:

此时该 Pod 已经运行在 ECI 环境中了。该 Pod 运行完,日志中就会显示其拷贝数据的时间:

根据上面的步骤,可以看出,在有缓存加速的时候,拷贝数据的时间为 1m11.16s。为了与有缓存的情况做个对比,我们遵循上述过程,在不做缓存加速的情况下,测试拷贝数据的时间。过程为 创建 JuiceFSRuntime -> 创建 Dataset -> 创建应用。

可以看到,在没有分布式缓存的情况下,拷贝相同的数据时间为 19m 6.45s。对于有分布式缓存的时候,拷贝时间缩短到了 1m11.16s,速度提升了 19 倍。

总结

本文介绍了在ECI 环境中,用户如何借助 Fluid 使用 JuiceFS,并使用 JuiceFS 的分布式缓存能力,来提升云上应用的数据访问速率。未来,JuiceFS 亦会在 CSI 中通过 Sidecar 的方式支持 Serverless 场景,用户可以通过更加原生的方式在 ECI 中使用 JuiceFS。

如有帮助的话欢迎关注我们项目 Juicedata/JuiceFS 哟! (0ᴗ0✿)

相关文章:

  • 高精度随流检测技术助力金融行业实现智能运维
  • windows上Qt5.15+openssl1.1.1+msvs2022静态编译32位版本的笔记
  • CentOS系统下,配制nginx访问favicon.ico
  • 1-十四烷基-3-甲基咪唑六氟磷酸盐([C14MIm][PF6])修饰纳米SiO2二氧化硅(mg级瓶装)
  • stm32f4xx-定时器
  • (过滤器)Filter和(监听器)listener
  • Java 并发编程解析 | 如何正确理解Java领域中的锁机制,我们一般需要掌握哪些理论知识?
  • Vue项目流程7,交易页面,提交订单,支付页面,利用element UI 以及 QRCode 完成微信支付,弹出框按钮的相关工作,个人中心以及子路由我的订单
  • 在Java中使用SFTP传输文件
  • OC5860降压芯片,MPS2459脚位一样,节省肖特基规格书
  • 哈工大李治军老师操作系统笔记【4】:系统调用的实现(Learning OS Concepts By Coding Them !)
  • 【光学】基于matlab色散曲线拟合【含Matlab源码 2053期】
  • (多级缓存)多级缓存
  • 复习三:线性表
  • C/C++语言100题练习计划 87——火柴棒等式(枚举实现)
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • hadoop集群管理系统搭建规划说明
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • MySQL数据库运维之数据恢复
  • quasar-framework cnodejs社区
  • use Google search engine
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 测试开发系类之接口自动化测试
  • 初识 webpack
  • 翻译--Thinking in React
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 怎样选择前端框架
  • 转载:[译] 内容加速黑科技趣谈
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​低代码平台的核心价值与优势
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (1)(1.13) SiK无线电高级配置(五)
  • (C++)八皇后问题
  • (C语言)fgets与fputs函数详解
  • (Matlab)使用竞争神经网络实现数据聚类
  • (python)数据结构---字典
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)UDP基本编程步骤
  • (转)负载均衡,回话保持,cookie
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET/C# 使用反射注册事件
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理