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

news2025/1/17 21:59:38

作者:车漾

前文回顾:

本系列将介绍如何基于 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                           19h

NAME                                             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-pvc
      name: data
      path: /
  accessModes:
    - ReadOnlyMany
---
apiVersion: data.fluid.io/v1alpha1
kind: JindoRuntime
metadata:
  name: pv-demo-dataset
spec:
  replicas: 2
  tieredstore:
    levels:
      - mediumtype: MEM
        path: /dev/shm
        quota: 10Gi
        high: "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-dataset
    namespace: default
  loadMetadata: true
  target:
    - 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: nginx
      image: nginx
      command:
      - "bash"
      - "-c"
      - "sleep inf"
      volumeMounts:
        - mountPath: /data
          name: data-vol
  volumes:
    - name: data-vol
      persistentVolumeClaim:
        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.coloradmin.cn/o/1081081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react antd table表格点击一行选中数据的方法

一、前言 antd的table,默认是点击左边的单选/复选按钮,才能选中一行数据; 现在想实现点击右边的部分,也可以触发操作选中这行数据。 可以使用onRow实现,样例如下。 二、代码 1.表格样式部分 //表格table样式部分{…

如何在手机上设置节日提醒和倒计时天数?

在平淡的生活和工作中,时不时有各种各样节日的点缀,为我们的日常增添了一些仪式感,例如春节、元宵节、情人节、端午节、七夕节等。此外还有一些特殊的日子也值得纪念,例如恋爱纪念日、结婚纪念日、亲朋好友生日等。面对这些节日&a…

provide,inject

通过provide和inject函数可以简便的实现跨级组件通讯 父组件提供 const count ref(0); provide(count, count);const updateCount (num) > {count.value num; }; provide(updateCount, updateCount);子组件或者孙子组件接受 const count inject(count); const upda…

快手新版本sig3参数算法还原

Frida Native层主动调用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81…

ViewModifier/视图修饰符, ButtonStyle/按钮样式 的使用

1. ViewModifier 视图修饰符 1.1 创建默认按钮视图修饰符 ViewModifierBootcamp.swift import SwiftUI/// 默认按钮修饰符 struct DefaultButtonViewModifier: ViewModifier{let bcakgroundColor: Colorfunc body(content: Content) -> some View {content.foregroundColor…

如何去图片水印?这些方法解决你的问题

当我们希望更新自己的头像时,经常会发现网上有许多精彩的图片,但它们通常带有水印,使我们无法轻松使用这些照片。这个情况大家应该都有遇到过吧?那么,如何去除图片上的水印呢?接下来,我们将分享…

选择适合变更管理的产品开发工具的要点和建议

什么是变更管理? 变更管理是指导组织改进的学科。由于可观察到的行为变化,它会导致永久性变化。它确保您的组织以彻底、有序和可持续的方式学习和改进。成功的改进项目需要个人和团队保持一致,他们有共同的愿景,他们知道如何定义…

大麦网回流票监控,sing参数分析

最近演唱会增多,总是抢不到票,所以想从回流票入手,做一个某麦网的演唱会回流票的监控。 最简单的方向就是从网页端入手。 在演唱会页面看到网页端不支持购买,不慌,咱只是看看有没有票不购买,直接抓包随便一…

营销科学中的边际ROI计量随笔记

主要是读这篇基于AB实验的边际ROI增长分析实践 的随笔记。 传统ROI计量 一些营销活动中的传统的ROI的计算方式是: 拉新ROI LTV / CAC 用户生命周期价值/平均获客成本 买量类拉新策略评估使用。 促活ROI GMV / RotalRecallCost 促销活动期间的总销售额/促销活…

#IIC 通信协议

IIC简介 I2C 通讯协议 (Inter - Integrated Circuit) 是由 Phiilps 公司开发的 物理层 它的物理层有如下特点: (1) 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个 I2C 通讯总线中,可连接多个 I2C 通讯设备,支…

草柴APP如何领取淘宝内部隐藏优惠券拿淘宝返利?

什么是草柴APP? 草柴APP是一款购物省钱工具。草柴APP现已支持淘宝、天猫、京东等知名电商平台,通过草柴APP查询领取内部隐藏大额优惠券,确认收货后拿购物返利;让您与别人购买相同的商品,不求比别人花的少,…

零样本异常分割SAA+

文章目录 一、测试效果展示二、相关链接三、优点总结四、SAA vs SAA4.1 SAA4.2 SAA 五、SAA结构5.1 专家领域知识(Domain Expert Knowledge)5.2 目标图片上下文信息(Target Image Context) 六、How to use 最近在做缺陷检测&#…

Qt打开ui文件经常报错

报错如下: 解决方法: 最后设置成默认值 即可

国标28181 开源WVP-PRO项目部署

感谢大牛的开源框架 https://doc.wvp-pro.cn/#/ 一.直接使用源码部署(在linux) -- 安装环境 yum install -y java-1.8.0-openjdk.x86_64 git maven nodejs npm -- 下载源码-wvp项目 git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git ---…

Linux系统编程:UDP协议和TCP协议

目录 一. 对于端口号的理解 1.1 网络通信五元组 1.2 端口号的划分策略 二. 网络通信中常用的指令 2.1 netstat指令 2.2 pidof指令 三. udp协议 3.1 udp的概念及特点 3.2 udp协议端格式 3.3 对于面向数据报及应用层发送与读取数据的理解 四. tcp协议的概念及特点 五.…

怎么把视频转换成mp4格式?

怎么把视频转换成mp4格式?如果你经常在网上下载视频的话,那么应该知道视频文件的格式种类非常的多,不同网站下载到的视频格式各不相同,除了最常见的mp4格式外,其它视频格式基本上都存在着兼容问题,如果格式…

Qt creator下载安装

版本问题: Qt4的开发环境包括3个基本部分:Qt Framework(Qt库)、QtCreator(IDE)和MinGW(编译调试),都要分别下载安装并配置,比较麻烦。 Qt5之后,…

Vuex->vuex获取值以及改变值,vuex异步请求

vuex获取值以及改变值vuex异步请求 1.vuex获取值以及改变值 Vuex分成五个部分: 1.State:单一状态树 2.Getters:状态获取 3.Mutations:触发同步事件 4.Actions:提交mutation,可以包含异步操作 5.Module&…

2023云栖大会即将开幕,速来免费预约!

2023云栖大会 500热点话题 1000行业实干家 现场实操 即学即用 40000平米科技展 3000前沿展品 72小时沉浸式科技体验 与数字人李白共吟盛唐诗歌 视频云边缘云云通信 深入3大Tech领域,覆盖20话题演讲 虚拟演播室、智能全景声 AIGC与数字人的一站式制作 “AI更…

重温mybatis之一篇带你入门Mybatis

一.前言 我是一个五年得java开发工程师,在印象里,从第一年我就会使用mybatis了,从最开始得xml配置,到spring整合,再到springboot。无非就是写个mapper抽象类,写个mapper.xml方法。就这么一直用着。期间也想…