基于 ACK Fluid 的混合云优化数据访问(三):加速第三方存储的读访问,降本增效并行

作者:车漾

前文回顾:

本系列将介绍如何基于 ACK Fluid 支持和优化混合云的数据访问场景,相关文章请参考:

基于 ACK Fluid 的混合云优化数据访问(一):场景与架构

基于 ACK Fluid 的混合云优化数据访问(二):搭建弹性计算实例与第三方存储的桥梁

在前一篇文章《搭建弹性计算实例与第三方存储的桥梁》中,介绍如何通过 ACK Fluid 接入第三方分布式存储,可以实现弹性计算实例 ECI 和 ECS 与云下存储系统之间的访问和数据传输,这实际上解决上云的第一阶段问题:连通性。

而对于生产环境来说,如果云上计算访问云下存储系统变成一种常态,就需要考虑性能、成本和稳定性。比如每年的云上访问线下数据的专线成本是多少?云上计算任务耗时和原有 IDC 计算任务相比是否有明显的落差?以及一旦专线出了问题,如何降低云上计算任务的损失?

在本文中将重点介绍如何加速第三方存储访问,实现更好的性能,更低的成本以及降低对专线稳定性的依赖。

图片

概述

即便云上计算能够以 Kubernetes 的标准化协议 PV 存储卷访问企业的线下存储,也无法避免在性能,成本上的挑战和需求:

  • 数据访问带宽有限和高延时: 云上计算访问云下存储带来的数据访问延时和带宽有限,导致高性能计算耗时长,计算资源利用率低
  • 数据冗余读取,网络费用昂贵: 深度学习模型的超参调优、自动调参深度学习任务等运行期间会不断重复访问同一数据。但是由于 Kubernetes 原生调度器无法感知数据缓存状态,导致应用调度的结果不佳,缓存无法重用,导致数据重复拉取引入更多外网和专线费用。
  • 线下分布式存储是数据并发访问的瓶颈,而且面临着性能和稳定性方面的挑战:当大规模算力并发访问线下存储且深度学习训练的 IO 压力增大,线下分布式存储很容易成为性能瓶颈。这会对计算任务造成影响,甚至会导致整个计算集群失效。
  • 受网络稳定性影响严重: 一旦公共云和数据中心之间网络不够稳定,会导致数据同步出错,应用处于不可用的状态。
  • 数据安全需求: 元数据和数据需要保护,不允许够持久化到云盘上。

ACK Fluid 提供了基于 JindoRuntime 的 PV 存储卷通用加速能力,可以支持满足 PVC 的第三方存储简单,快速,安全的获得通过分布式缓存实现数据访问加速能力,可以带来如下好处:

1. 零适配成本: 只需要实现 CSI 协议中 PVC 的第三方存储即可以立即使用,无需额外开发。

2. 数据访问性能大幅提升,提升工程效率: a. 通过基于访问和策略数据预热等手段实现访问云下数据性能等同于数据位于云上计算集群b. 弹性数据访问带宽应对高并发,数据访问吞吐提升到数百 Gbps,也可以缩容到 0,实现低成本和高吞吐的动态平衡。

c. 数据缓存亲和感知调度避免跨网络数据访问降低延迟

3. 避免热点数据的反复读取,节约网络成本: 通过分布式缓存将热点数据持久到云上,减少数据读取,降低网络流量。

4. 以数据为中心的自动化运维实现高效的数据访问,提升运维效率: 包括自动化和定时的数据缓存预热,避免反复拉取数据数据。还支持数据缓存扩容,缩容和清理,实现数据缓存的自动化管理。

5. 通过分布式内存缓存避免元数据和数据落盘,更加安全: 对于数据安全敏感用户,ACK-Fluid 提供分布式内存缓存一方面性能好,另一方面也避免用户对于数据落盘的担忧。

总结: *ACK Fluid 为云上计算访问第三方存储 PVC 提供了开箱即用,高性能,低成本,自动化和无数据落盘*的收益。

演示

1. 前提条件

  • 已创建 ACK Pro 版集群,且集群版本为 1.18 及以上。具体操作,请参见创建 ACK Pro 版集群 [ 1]
  • 已安装云原生 AI 套件并部署 ack-fluid 组件。重要:若您已安装开源 Fluid,请卸载后再部署 ack-fluid 组件。
  • 未安装云原生 AI 套件:安装时开启 Fluid 数据加速。具体操作,请参见安装云原生 AI 套件 [ 2]
  • 已安装云原生 AI 套件:在容器服务管理控制台的云原生 AI 套件页面部署 ack-fluid。
  • 已通过 kubectl 连接 ACK 集群。具体操作,请参见通过 kubectl 工具连接集群 [ 3]
  • 已创建需要访问存储系统对应的 PV 存储卷和 PVC 存储卷声明。在 Kubernetes 环境中,不同的存储系统有不同的存储卷创建方式,为保证存储系统与 Kubernetes 集群的连接稳定,请根据对应存储系统的官方文档进行准备。注意: 对于混合云场景,为了数据的安全性和性能,建议您将数据访问模式配置为只读。

2. 查询 PV 存储卷和 PVC 存储卷声明的信息

执行如下命令,查询 Kubernetes 中 PV 存储卷和 PVC 存储卷声明的信息。

$ kubectl get pvc,pv

预期输出:

NAME                                          STATUS   VOLUME                          CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/demo-pvc                Bound    demo-pv                         5Gi        ROX                           19hNAME                                             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                           STORAGECLASS   REASON   AGE
persistentvolume/demo-pv                         30Gi       ROX            Retain           Bound    default/demo-pvc                                        19h

PV存储卷 demo-pv 的容量为 30GB,支持 RWX 访问模式,已被绑定到 PVC 名称为 demo-pvc 的存储卷声明上,均可正常使用。

3. 创建 Dataset 和 JindoRuntime

1)创建 dataset.yaml 文件,以下 Yaml 文件中包含两个待创建的 Fluid 资源对象,分别是 Dataset 和 JindoRuntime

  • Dataset: 所需挂载的 PVC 存储卷声明信息。
  • JindoRuntime: 待启动的 JindoFS 分布式缓存系统配置,包括缓存系统 Worker 组件副本数,以及每个 Worker 组件最大可用的缓存容量等。
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:name: pv-demo-dataset
spec:mounts:- mountPoint: pvc://demo-pvcname: datapath: /accessModes:- ReadOnlyMany
---
apiVersion: data.fluid.io/v1alpha1
kind: JindoRuntime
metadata:name: pv-demo-dataset
spec:replicas: 2tieredstore:levels:- mediumtype: MEMpath: /dev/shmquota: 10Gihigh: "0.9"low: "0.8"

配置文件中资源对象的详细参数说明如下。

图片

2)执行如下命令,创建 Dataset 和 JindoRuntime 资源对象

$ kubectl create -f dataset.yaml

3)执行如下命令,查看 Dataset 的部署情况

$ kubectl get dataset pv-demo-dataset

预期输出:说明初次启动 JindoFS 缓存系统时涉及镜像拉取过程,因为网络环境等因素的影响,可能需要耗时 2~3 分钟。Dataset 处于 Bound 状态,表明 JindoFS 缓存系统已在集群内正常启动,应用 Pod 可正常访问 Dataset 中定义的数据。

4. 创建 DataLoad 执行缓存预热

由于首次访问无法命中数据缓存,应用 Pod 的数据访问效率可能较低,Fluid 提供了 DataLoad 缓存预热操作提升首次数据访问的效率。

1)创建 dataload.yaml 文件,代码示例如下

apiVersion: data.fluid.io/v1alpha1
kind: DataLoad
metadata:name: dataset-warmup
spec:dataset:name: pv-demo-datasetnamespace: defaultloadMetadata: truetarget:- path: /replicas: 1

上述资源对象的详细参数说明如下所示。

图片

2)执行如下命令,创建 DataLoad 对象

$ kubectl create -f dataload.yaml

3)执行如下命令,查看 DataLoad 状态

$ kubectl get dataload dataset-warmup

预期输出:

NAME             DATASET           PHASE      AGE   DURATION
dataset-warmup   pv-demo-dataset   Complete   62s   12s

4)执行如下命令,查看数据缓存状态

$ kubectl get dataset

预期输出:

NAME              UFS TOTAL SIZE   CACHED     CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
pv-demo-dataset   10.96GiB         10.96GiB   20.00GiB         100.0%              Bound   3m13s

DataLoad 缓存预热操作完成后,数据集的已缓存数据量(CACHED)已更新为整个数据集的大小,代表整个数据集已被缓存,缓存百分比(CACHED PERCENTAGE)为 100.0%。

5. 创建应用容器,访问 PV 存储卷中的数据

1)使用如下 YAML,创建 pod.yaml 文件,并修改 YAML 文件中的 claimName 名称与步骤二创建的 Dataset 名称相同

apiVersion: v1
kind: Pod
metadata:name: nginx
spec:containers:- name: nginximage: nginxcommand:- "bash"- "-c"- "sleep inf"volumeMounts:- mountPath: /dataname: data-volvolumes:- name: data-volpersistentVolumeClaim:claimName: pv-demo-dataset # 名称需要与Dataset相同。

2)执行如下命令,创建应用 Pod

$ kubectl create -f pod.yaml

3)执行如下命令,登录 Pod 访问数据

$ kubectl exec -it nginx bash

预期输出:

# Nginx Pod中,/data目录下有一个名为demofile的文件,大小为11 GB。
$ ls -lh /data
total 11G
-rw-r----- 1 root root 11G Jul 28  2023 demofile# 执行cat /data/demofile > /dev/null命令,将demofile文件中的内容读取并写入/dev/null设备中,用时11.004秒。
$ time cat /data/demofile > /dev/null
real    0m11.004s
user    0m0.065s
sys     0m3.089s

由于数据集中的数据已经全部缓存在了分布式缓存系统中,读取数据时将会从缓存中读取,而不是从远程存储系统中读取,从而减少了网络传输,提升了数据访问效率。

相关链接:

[1] 创建 ACK Pro 版集群https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/create-an-ack-managed-cluster-2#task-skz-qwk-qfb

[2] 安装云原生 AI 套件https://help.aliyun.com/zh/ack/cloud-native-ai-suite/user-guide/deploy-the-cloud-native-ai-suite#task-2038811

[3] 通过 kubectl 工具连接集群*

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/obtain-the-kubeconfig-file-of-a-cluster-and-use-kubectl-to-connect-to-the-cluster#task-ubf-lhg-vdb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/154859.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java-Atomic原子操作类详解及源码分析,Java原子操作类进阶,LongAdder源码分析

文章目录 一、Java原子操作类概述1、什么是原子操作类2、为什么要用原子操作类3、CAS入门 二、基本类型原子类1、概述2、代码实例 三、数组类型原子类1、概述2、代码实例 四、引用类型原子类1、概述2、AtomicReference3、ABA问题与AtomicStampedReference4、一次性修改&#xf…

功率半导体器件静态参数测试都测哪些内容?

功率半导体器件如今已成为不可或缺的元件,在通信、电力电子等领域得到广泛应用。而对其性能参数的测试也是必不可少的,是对半导体性能、质量的保障。半导体测试参数包含静态测试参数和动态测试参数,本文将介绍半导体分立器件静态测试参数的相…

【网络安全 ---- 靶场搭建】凡诺企业网站管理系统靶场详细搭建过程(asp网站,练习Access数据库的 sql注入)

一,资源下载 百度网盘资源下载链接:百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com…

Android Studio Flutter真机调试错误

错误:Could not locate aapt. Please ensure you have the Android buildtools installed. No application found for TargetPlatform.android_arm64. Is your project missing an android/app/src/main/AndroidManifest.xml? Consider running "flutter crea…

京东运营数据分析:2023年8月京东饮料行业品牌销售排行榜

鲸参谋监测的京东平台8月份饮料市场销售数据已出炉! 8月份,饮料市场整体销售下滑。根据鲸参谋电商数据分析平台的相关数据显示,今年8月,京东平台饮料市场的总销量将近820万,环比下滑约8%,同比下滑约20%&am…

Docker与Serverless计算的集成: Docker容器如何与Serverless计算结合。

文章目录 1. Docker容器的可移植性2. Serverless计算的自动伸缩性3. 使用Serverless与Docker容器a. 自托管Serverless平台b. 使用容器服务 4. 使用案例:图像处理服务5. 结论 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉…

flex布局在多层嵌套时,内层设置了justify-content: space-between;不生效问题

内层的地址和时间这一行&#xff0c;设置了justify-content: space-between;但并不生效&#xff0c;原因是要在上一层.center 设置 flex:1;&#xff08; 重点&#xff09; 经常忘记&#xff0c;特在此记录一下&#xff0c;以下是代码 <view class"index-card" c…

3D 人体研究

SynBody: Synthetic Dataset with Layered Human Models for 3D Human Perception and Modeling SynBody 是一个新的合成数据集&#xff0c;旨在推动 3D 人体研究的多样性和标注质量。它具有以下三个吸引人的特点&#xff1a; 服装参数化人体模型&#xff1a;可以生成各种不同…

数学建模、统计建模、计量建模整体框架的理解以及建模的步骤

数学建模、统计建模、计量建模整体框架的理解以及建模的步骤 引言正文模型的设定模型的估计建模中可能遇到的四种数据类型 模型的检验模型的应用 最后 引言 这篇博客主要写给统计或者数学专业的小白&#xff0c;以供快速上手建模比赛&#xff1b;本人将在这里整合参加建模比赛…

c语言:通讯录管理系统(文件版本)

前言&#xff1a;在大多数高校内&#xff0c;都是通过设计一个通讯录管理系统来作为c语言课程设计&#xff0c;通过一个具体的系统设计将我们学习过的结构体和函数等知识糅合起来&#xff0c;可以很好的锻炼学生的编程思维&#xff0c;本文旨在为通讯录管理系统的设计提供思路和…

SpringBoot配置输出的日志文件

SpringBoot配置输出的日志文件 1、无需导入依赖&#xff0c;因为我们创建springboot时&#xff0c;导入的关于springboot的依赖中已经包含了。 2、我们在项目的resources 资源文件下创建logback.xml文件&#xff0c;文件内容如下 作用&#xff1a; 如果是开发时启动的项目&a…

Python自动化测试框架pytest的详解安装与运行

这篇文章主要为大家介绍了Python自动化测试框架pytest的简介以及安装与运行&#xff0c;有需要的朋友可以借鉴参考下希望能够有所帮助&#xff0c;祝大家多多进步 1. pytest的介绍 pytest是一个非常成熟的全功能的python测试工具&#xff0c;它主要有以下特征&#xff1a; 简…

Java List 中存不同的数据类型

在最近的实践中&#xff0c;有人突然问了一个问题&#xff1a; 在 Java 的 List 中可以存不同的数据类型吗&#xff1f; 这个问题突然给问到了&#xff0c;我们都知道 Java 中的 List 中存的是对象&#xff0c;通常我们定义都会这样的定义&#xff1a; List<String> t…

大端字节序存储 | 小端字节序存储介绍

为什么存储的顺序有些变动呢&#xff1f; 大小端的介绍 我们在创建变量时&#xff0c;操作系统就会给你分配空间&#xff0c;比如你创建了【short/int/double/float】的变量&#xff0c;这些变量的类型都是大于1个字节的&#xff0c;操作系统会根据你这个变量的类型&#xff…

Java基础面试-JDK JRE JVM

详细解释 JDK&#xff08;Java Devalpment Kit&#xff09;java 开发工具 JDK是Java开发工具包&#xff0c;它是Java开发者用于编写、编译、调试和运行Java程序的核心组件。JDK包含了Java编程语言的开发工具和工具集&#xff0c;以及Java标准库和其他一些必要的文件。JDK中的…

SpringBoot 如何使用 Grafana 进行可视化监控

使用Spring Boot Sleuth进行分布式跟踪 在现代分布式应用程序中&#xff0c;跟踪请求和了解应用程序的性能是至关重要的。Spring Boot Sleuth是一个分布式跟踪解决方案&#xff0c;它可以帮助您在分布式系统中跟踪请求并分析性能问题。本文将介绍如何在Spring Boot应用程序中使…

HomeView/主页 的实现

1. 创建数据模型 1.1 创建货币模型 CoinModel.swift import Foundation// GoinGecko API info /*URL:https://api.coingecko.com/api/v3/coins/markets?vs_currencyusd&ordermarket_cap_desc&per_page250&page1&sparklinetrue&price_change_percentage24…

手动抄表和自动抄表优缺点对比

随着科技的发展&#xff0c;自动抄表技术已经越来越成熟&#xff0c;被广泛应用于各个领域。然而&#xff0c;手动抄表在一些特定场景下仍然具有一定的优势。本文将从手动抄表和自动抄表的优缺点入手&#xff0c;对比分析它们的应用场景和使用价值。 1.成本低&#xff1a;手动抄…

Android Studio: unrecognized Attribute name MODULE

错误完整代码&#xff1a; &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd; (1.8.0_291) &#xfffd;г&#xfffd;&#xfffd;&#xfffd;&#xfffd;쳣&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xff…

web安全漏洞

1.什么是Web漏洞   WEB漏洞通常是指网站程序上的漏洞&#xff0c;可能是由于代码编写者在编写代码时考虑不周全等原因而造成的漏洞。如果网站存在WEB漏洞并被黑客攻击者利用&#xff0c;攻击者可以轻易控制整个网站&#xff0c;并可进一步提前获取网站服务器权限&#xff0c;…