全部产品
Search
文档中心

:Gunakan EFC untuk mempercepat akses ke sistem file NAS atau CPFS

更新时间:Jul 06, 2025

Fluid adalah orchestrator dan akselerator dataset terdistribusi berbasis Kubernetes yang bersifat open source untuk aplikasi intensif data dalam skenario cloud-native. Fluid mendukung observabilitas, skalabilitas, dan akselerasi akses ke dataset dengan mengelola serta menjadwalkan EFCRuntimes. Topik ini menjelaskan cara menggunakan Fluid EFCRuntime untuk mempercepat akses ke File Storage NAS (NAS).

Prasyarat

  • Alibaba Cloud Linux 2 digunakan sebagai sistem operasi Instance ECS, dengan versi kernel minimal 4.19.91-23.

  • Kluster ACK Pro yang menjalankan Kubernetes 1.18 atau lebih baru telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ACK Pro.

  • NAS telah diaktifkan, dan node dalam kluster ACK Pro dapat memasang serta mengakses sistem file Capacity NAS atau Sistem File NAS Performa Standar.

    Catatan

    Dalam skenario Pelatihan AI, kami merekomendasikan Anda memilih jenis sistem file NAS berdasarkan throughput yang diperlukan oleh pekerjaan pelatihan. Untuk informasi lebih lanjut, lihat Pilih Sistem File.

  • Klien kubectl terhubung ke kluster ACK Pro. Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig Kluster dan Gunakan kubectl untuk Terhubung ke Kluster.

Ikhtisar EFC

Elastic File Client (EFC) adalah klien POSIX berbasis FUSE yang dikembangkan oleh tim teknis NAS. EFC dapat menggantikan klien NFS mode-kernel. Dengan EFC, Anda dapat mengakses data melalui beberapa koneksi, menyimpan metadata dalam cache, serta menyimpan data secara terdistribusi untuk meningkatkan kecepatan baca. EFC juga mendukung pemantauan kinerja menggunakan Managed Service for Prometheus. Dibandingkan dengan klien NFS mode-kernel V3 dan V4.x serta klien lain berbasis FUSE, EFC memiliki keunggulan berikut:

  • Konsistensi semantik kuat: EFC menggunakan mekanisme kunci terdistribusi untuk memastikan konsistensi kuat pada file dan direktori. Setelah menulis data ke file, data tersebut langsung dapat dibaca oleh klien lain. Setelah membuat file, file tersebut segera dapat diakses oleh klien lain. Keunggulan ini memungkinkan sinkronisasi data antara beberapa node.

  • Membaca dan menulis cache pada server individual: EFC mengoptimalkan logika caching FUSE dan menggunakan sedikit memori pada node untuk mempercepat pembacaan dan penulisan file kecil. Dibandingkan dengan klien NFS tradisional, EFC meningkatkan performa membaca dan menulis cache lebih dari 50%.

  • Cache baca saja terdistribusi: EFC mendukung cache baca saja terdistribusi dan menggunakan memori dari beberapa node untuk membuat pool cache yang dapat diskalakan otomatis guna memenuhi permintaan komputasi yang terus meningkat.

  • Pra-pemuatan file kecil: EFC melakukan pra-pemuatan data panas di direktori yang sering diakses untuk mengurangi overhead terkait pengambilan data.

  • Kemampuan pembaruan panas dan failover: EFC dapat melakukan failover dalam hitungan detik dan melakukan pembaruan panas tanpa mengganggu layanan Anda.

Gunakan Fluid EFCRuntime untuk mempercepat akses ke NAS sistem file

Fluid menggunakan sumber daya Kubernetes kustom terkait Fluid EFCRuntime untuk terhubung ke EFC. Ini membantu menerapkan observabilitas dan skalabilitas dataset.

Batasan

Berikut adalah batasan yang berlaku untuk Fluid EFCRuntime:

  • Fluid EFCRuntime tidak mendukung pra-pemuatan cache DataLoad. Fluid EFCRuntime hanya menyimpan data dalam cache saat data diakses untuk pertama kalinya.

  • Fluid EFCRuntime tidak menampilkan status caching dataset.

  • Fluid EFCRuntime hanya didukung di wilayah berikut: Cina (Zhangjiakou), Cina (Beijing), Cina (Guangzhou), Cina (Shenzhen), dan Cina (Shanghai).

Cara Kerja Fluid EFCRuntime

Gambar berikut menunjukkan cara Fluid EFCRuntime menyimpan data dari NAS ke penyimpanan lokal untuk mempercepat akses data. Bagian berikut menjelaskan cara kerja Fluid EFCRuntime:

  1. Anda dapat membuat definisi sumber daya kustom (CRD) dataset dan EFCRuntimes untuk menentukan informasi tentang sistem file NAS sumber.

  2. Kontroler Fluid menerapkan komponen EFC Cache Worker dan EFC FUSE berdasarkan informasi tentang sistem file sumber.

  3. Saat membuat pod, Anda dapat menggunakan klaim volume persisten (PVC) untuk memasang target pemasangan sistem file yang diekspos oleh klien EFC FUSE ke pod.

  4. Saat mengakses data dalam sistem file NAS yang dipasang, klien EFC FUSE meneruskan permintaan ke EFC Cache Worker. EFC Cache Worker memeriksa apakah data disimpan dalam cache di penyimpanan lokal. Jika data tersedia dalam cache, Anda dapat langsung mengaksesnya. Jika tidak, EFC Cache Worker membaca data dari sistem file NAS dan menyimpannya ke penyimpanan lokal. Kemudian, Anda dapat mengakses cache di penyimpanan lokal.

  • Dataset: CRD yang didefinisikan oleh Fluid. Dataset adalah kumpulan data yang saling terkait secara logis dan digunakan oleh mesin komputasi lapisan atas.

  • EFCRuntime: runtime yang mempercepat akses ke dataset. EFCRuntimes menggunakan EFC sebagai mesin caching. Mesin caching EFC mencakup komponen EFC Cache Worker dan EFC FUSE.

    • EFC Cache Worker: komponen sisi server yang memungkinkan caching berdasarkan hashing konsisten. Anda dapat menonaktifkan komponen ini sesuai kebutuhan. Saat dinonaktifkan, cache baca saja terdistribusi akan dinonaktifkan, tetapi fitur lainnya tidak terpengaruh.

    • EFC FUSE: komponen sisi klien EFC yang mengekspos antarmuka akses data melalui protokol POSIX.

Prosedur

Langkah 1: Instal ack-fluid

Instal suite AI cloud-native dan ack-fluid versi 0.9.10 atau lebih baru.

Penting

Jika Anda telah menginstal Fluid open source, Anda harus menghapus instalasi Fluid sebelum menginstal komponen ack-fluid.

Instal ack-fluid saat suite AI cloud-native belum diinstal

Anda dapat mengaktifkan Fluid data acceleration saat menginstal suite AI cloud-native. Untuk informasi lebih lanjut, lihat Deploy Suite AI Cloud-Native.

Instal ack-fluid saat suite AI cloud-native telah diinstal

  1. Masuk ke Konsol ACK. Di bilah navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di bilah navigasi kiri, pilih Applications > Cloud-native AI Suite.

  3. Di halaman Cloud-native AI Suite, temukan ack-fluid dan klik Deploy di kolom Actions.

  4. Di pesan Install Component, klik Confirm.

Perbarui ack-fluid ke 0.9.10 atau lebih baru

  1. Masuk ke Konsol ACK. Di bilah navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di bilah navigasi kiri, pilih Applications > Cloud-native AI Suite.

  3. Di halaman Cloud-native AI Suite, temukan ack-fluid dan klik Upgrade di kolom Actions.

  4. Di pesan Upgrade Component, klik Confirm.

Langkah 2: Tulis data ke sistem file NAS

Catatan

Jika data sudah tersimpan di sistem file NAS, Anda dapat melewati langkah ini.

  1. Pasang sistem file NAS ke instance ECS. Untuk informasi lebih lanjut, lihat Pasang Sistem File NFS di Konsol NAS.

  2. Jalankan perintah berikut untuk memeriksa titik pemasangan sistem file CPFS:

    findmnt /mnt

    Output yang diharapkan:

    TARGET   SOURCE                                         FSTYPE OPTIONS
    /mnt/nfs xxxxxxxxxxx-xxxxx.cn-beijing.nas.aliyuncs.com:/ nfs    rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,no
  3. Jalankan perintah berikut untuk membuat file berukuran 10 GB di direktori pemasangan sistem file NAS:

    dd if=/dev/zero of=/mnt/nfs/allzero-demo count=1024 bs=10M

    Output yang diharapkan:

    1024+0 records in
    1024+0 records out
    10737418240 bytes (11 GB) copied, 50.9437 s, 211 MB/s

Langkah 3: Buat dataset dan EFCRuntime

  1. Buat file bernama dataset.yaml dan salin konten berikut ke file tersebut:

    Template contoh sistem file NAS

    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: efc-demo
    spec:
      mounts:
        - mountPoint: "nfs://<nas_url>:<nas_dir>"
          name: efc
          path: "/"
    ---
    apiVersion: data.fluid.io/v1alpha1
    kind: EFCRuntime
    metadata:
      name: efc-demo
    spec:
      replicas: 3
      master:
        networkMode: ContainerNetwork
      worker:
        networkMode: ContainerNetwork
      fuse:
        networkMode: ContainerNetwork
      tieredstore:
        levels:
          - mediumtype: MEM
            path: /dev/shm
            quota: 15Gi

    File dataset.yaml digunakan untuk membuat dataset dan EFCRuntime.

    • Dataset menentukan informasi tentang sistem file NAS, seperti URL sistem file NAS dan direktori yang ingin dipasang.

    • EFCRuntime memulai sistem caching EFC untuk menyediakan layanan caching. Anda dapat menentukan jumlah pod replika untuk komponen worker sistem caching EFC dan kapasitas cache setiap komponen worker.

    Parameter

    Deskripsi

    mountPoint

    Jika Anda menggunakan sistem file NAS, atur nilai dalam format nfs://<nas_url>:<nas_dir>.

    • nas_url: URL sistem file NAS.

      Untuk mendapatkan URL sistem file NAS, lakukan operasi berikut: Masuk ke Konsol NAS. Di bilah navigasi kiri, pilih File System > File System List. Di halaman File System List, temukan sistem file NAS yang ingin Anda pasang dan klik Manage di kolom Tindakan. Di halaman yang muncul, klik Mount Targets. Untuk informasi lebih lanjut, lihat Kelola titik pemasangan.

    • nas_dir: subdirektori yang ingin Anda pasang. Dalam banyak kasus, Anda dapat mengatur nilainya ke direktori root. Misalnya, nilai efc://xxxxxxxxxxx-xxxxx.cn-beijing.nas.aliyuncs.com:/ menentukan direktori root dari sistem file NAS.

    replicas

    Jumlah pod replika yang dibuat untuk komponen worker sistem caching EFC. Anda dapat mengatur nilainya berdasarkan ukuran memori node komputasi dan ukuran dataset. Kami merekomendasikan agar Anda memastikan bahwa hasil kali nilai quota dan nilai replicas lebih besar dari ukuran dataset.

    networkMode

    Nilai valid: ContainerNetwork dan HostNetwork. Dalam lingkungan ACK, kami merekomendasikan agar Anda mengatur nilainya menjadi ContainerNetwork. Mode jaringan ini tidak mengorbankan kinerja jaringan.

    mediumtype

    Tipe cache. Nilai valid: HDD, SSD, dan MEM. Nilai MEM menunjukkan memori. Dalam skenario Pelatihan AI, kami merekomendasikan agar Anda mengatur parameter ini ke MEM. Jika Anda mengatur parameter ini ke MEM, Anda harus mengatur parameter path ke sistem file memori, seperti tmpfs.

    path

    Direktori cache dalam pod komponen worker sistem caching EFC. Kami merekomendasikan agar Anda mengatur nilai parameter ini ke /dev/shm.

    quota

    Kapasitas cache setiap komponen worker. Anda dapat mengatur nilainya berdasarkan ukuran memori node komputasi dan ukuran dataset. Kami merekomendasikan agar Anda memastikan bahwa hasil kali nilai quota dan nilai replicas lebih besar dari ukuran dataset.

  2. Jalankan perintah berikut untuk membuat EFCRuntime dan dataset:

    kubectl create -f dataset.yaml
  3. Jalankan perintah berikut untuk memeriksa apakah Dataset telah diterapkan:

    kubectl get dataset efc-demo

    Output yang diharapkan:

    NAME       UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    efc-demo                                                                  Bound   24m

    Dataset berada dalam status Bound, menunjukkan bahwa sistem caching EFC berjalan sesuai harapan di kluster dan pod aplikasi dapat mengakses data yang disediakan oleh dataset.

  4. Jalankan perintah berikut untuk memeriksa apakah EFCRuntime telah diterapkan:

    kubectl get efcruntime

    Output yang diharapkan:

    NAME       MASTER PHASE   WORKER PHASE   FUSE PHASE   AGE
    efc-demo   Ready          Ready          Ready        27m

    Hasil menunjukkan bahwa komponen master, worker, dan FUSE berada dalam status Ready.

  5. Jalankan perintah berikut untuk memeriksa apakah volume persisten (PV) dan PVC telah dibuat:

    Setelah dataset dan sistem caching EFC siap, Fluid secara otomatis membuat PVC dan PV.

    kubectl get pv,pvc

    Output yang diharapkan:

    NAME                                CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS   REASON   AGE
    persistentvolume/default-efc-demo   100Gi      ROX            Retain           Bound    default/efc-demo         fluid                   94m
    
    NAME                                   STATUS   VOLUME             CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    persistentvolumeclaim/efc-demo         Bound    default-efc-demo   100Gi      ROX            fluid          94m

Langkah 4: Buat aplikasi untuk mengakses data

Buat aplikasi untuk memeriksa apakah akses ke data dipercepat. Dalam contoh ini, sebuah aplikasi dengan dua pod dibuat dan digunakan untuk mengakses sistem file NAS beberapa kali dari dua node. Anda dapat mengevaluasi kinerja akselerasi Fluid EFCRuntime berdasarkan waktu yang diperlukan untuk mengakses data.

  1. Buat file bernama app.yaml dan salin konten berikut ke file tersebut.

    Konten berikut mendefinisikan StatefulSet bernama efc-app. StatefulSet berisi dua pod. Setiap pod memiliki PVC efc-demo yang dipasang ke direktori /data.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: efc-app
      labels:
        app: nginx
    spec:
      serviceName: nginx
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6
            command: ["/bin/bash"]
            args: ["-c", "sleep inf"]
            volumeMounts:
            - mountPath: "/data"
              name: data-vol
          volumes:
            - name: data-vol
              persistentVolumeClaim:
                claimName: efc-demo
  2. Jalankan perintah berikut untuk membuat StatefulSet bernama efc-app:

    kubectl create -f app.yaml
  3. Jalankan perintah berikut untuk memeriksa ukuran file yang ditentukan:

    kubectl exec -it efc-app-0 -- du -h /data/allzero-demo

    Output yang diharapkan:

    10G     /data/allzero-demo
  4. Periksa waktu yang diperlukan untuk membaca file yang ditentukan dari aplikasi.

    Catatan

    Waktu dan throughput dapat bervariasi berdasarkan lingkungan runtime dan metode pengukuran. Dalam topik ini, kluster memiliki tiga instance ECS tipe ecs.g7ne.8xlarge. EFCRuntime efc-demo memiliki tiga pod worker yang berjalan pada instance ECS yang sama. StatefulSet efc-app memiliki dua pod yang masing-masing berjalan pada dua instance ECS lainnya. Waktu akses data tidak terpengaruh oleh cache kernel node tempat klien EFC FUSE berjalan.

    1. Jalankan perintah berikut untuk memeriksa waktu yang diperlukan membaca file yang ditentukan dari pod efc-app-0 StatefulSet:

      Catatan

      Jika ingin membaca file lain, ganti /data/allzero-demo dengan jalur file tersebut.

      kubectl exec -it efc-app-0 -- bash -c "time cat /data/allzero-demo > /dev/null"

      Output yang diharapkan:

      real    0m15.792s
      user    0m0.023s
      sys     0m2.404s

      Hasil menunjukkan bahwa 15.792 detik diperlukan untuk membaca file berukuran 10 GB dengan kecepatan baca 648 MiB/s.

    2. Jalankan perintah berikut untuk memeriksa waktu yang diperlukan membaca file yang sama berukuran 10 GB dari pod lain StatefulSet:

      Catatan

      Jika ingin membaca file lain, ganti /data/allzero-demo dengan jalur file tersebut.

      kubectl exec -it efc-app-1 -- bash -c "time cat /data/allzero-demo > /dev/null"

      Output yang diharapkan:

      real    0m9.970s
      user    0m0.012s
      sys     0m2.283s

      Hasil menunjukkan bahwa 9.970 detik diperlukan untuk membaca file berukuran 10 GB dengan kecepatan baca 1,034.3 MiB/s.

    Setelah menggunakan Fluid EFCRuntime, kecepatan baca meningkat dari 648 MiB/s menjadi 1,034.3 MiB/s. Untuk file yang sama, Fluid EFCRuntime meningkatkan kecepatan baca sekitar 100%.