近期,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✿)

存储更弹性,详解 Fluid “ECI 环境数据访问” 新功能的更多相关文章

  1. 超全详解Java开发环境搭建

    摘自:https://www.cnblogs.com/wangjiming/p/11278577.html 超全详解Java开发环境搭建   在项目产品开发中,开发环境搭建是软件开发的首要阶段,也是必 ...

  2. 大杂烩 -- Java内存布局【图】以及java各种存储区【详解】

    基础大杂烩 -- 目录 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 一.Java内存布局浅谈 1. 总述 我们知道,线 ...

  3. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

  4. Android开发数据存储之ContentProvider详解

    转载:十二.ContentProvider和Uri详解 一.使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可 ...

  5. 详解基于linux环境MySQL搭建与卸载

    本篇文章将从实际操作的层面,讲解基于linux环境的mysql的搭建和卸载. 1  搭建mysql 1.1  官网下载mysql压缩包 下载压缩包时,可以先把安装包下载到本地,再上传到服务器,也可以在 ...

  6. --系统编程-网络-tcp客户端服务器编程模型、socket、htons、inet_ntop等各API详解、使用telnet测试基本服务器功能

    PART1 基础知识 1. 字节序 网络字节序是大端字节序(低地址存放更高位的字节), 所以,对于字节序为小端的机器需要收发网络数据的场景,要对这些数据进行字节序转换. 字节序转换函数,常用的有四个: ...

  7. Keepalived详解(三):Keepalived基础功能应用实例【转】

    Keepalived基础功能应用实例: 1.Keepalived基础HA功能演示: 在默认情况下,Keepalived可以实现对系统死机.网络异常及Keepalived本身进行监控,也就是说当系统出现 ...

  8. Java基础进阶:多态与接口重点摘要,类和接口,接口特点,接口详解,多态详解,多态中的成员访问特点,多态的好处和弊端,多态的转型,多态存在的问题,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    多态与接口重点摘要 接口特点: 接口用interface修饰 interface 接口名{} 类实现接口用implements表示 class 类名 implements接口名{} 接口不能实例化,可 ...

  9. Nginx安装及配置详解包括windows环境

    nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...

随机推荐

  1. 关于Vue Element组件el-checkbox与el-select默认选中值的几点注意事项

    el-select 示例: 代码: <el-select v-model="doc.zhic" placeholder="请选择"> <el- ...

  2. java+mybatis实现一个简单的银行系统,实现存取款与账户查询

    先创建数据库和表,使用的是MySQL数据库. create database mybatis; use mybatis; CREATE TABLE `accountdo` ( `id` varchar ...

  3. Kali2019渗透环境配置

    一.系统安装 二.基础配置 # 配置源 vim /etc/apt/sources.list # kali官方源 deb http://http.kali.org/ kali-rolling main ...

  4. go int64传到前端导致溢出问题排查

    简介 ​ 开周会的时候一位同事分享了一个踩坑经验,说在go里面还好好的int64类型,到前端就变得奇奇怪怪了,和原来不一样了.正好我对前端javascript有一点点了解,然后连夜写了点代码探索了一下 ...

  5. Android高仿网易云音乐-启动界面实现和动态权限处理

    效果 实现分析 基本上没有什么难点,就是布局,然后显示用户协议对话框,动态处理权限,判断是否显示引导界面,是否显示广告界面等. 布局 <?xml version="1.0" ...

  6. Linux操作系统(7):rpm包管理和yum软件包在线管理

    一.rpm 包的管理 介绍:一种用于互联网下载包的打包及安装工具,它包含在某些 Linux 分发版中.它生成具有.RPM 扩展名的文件.RPM 是 RedHat Package Manager(Red ...

  7. 【docker专栏2】CentOS操作系统安装DockerCE

    目录 一.前置要求 二.更新软件源信息 三.安装 Docker-CE 四.卸载Docker CE 为大家介绍在CentOS操作系统中安装docker的过程,linux其他发行版本安装docker方法可 ...

  8. 没错,请求DNS服务器还可以使用UDP协议

    目录 简介 搭建netty客户端 在netty中发送DNS查询请求 DNS消息的处理 总结 简介 之前我们讲到了如何在netty中构建client向DNS服务器进行域名解析请求.使用的是最常见的TCP ...

  9. python 操作xml、html文件

    简介 在一些项目中可能会使用到解析html文件,尤其是爬虫相关的,需要解析获取到的html内容,通常我们会使用lxml模块去进行html文件的解析. html文件 当前存在一个简单的html < ...

  10. Python 支付宝红包二维码制作步骤分享

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! 支付宝红包二维码制作步骤分享 2022. ...