Todos os produtos
Search
Central de documentação

:Use EFC to accelerate access to NAS or CPFS file systems

Última atualização: Jul 04, 2026

O Fluid é um orquestrador e acelerador de conjuntos de dados distribuídos, nativo do Kubernetes e de código aberto, projetado para aplicações com uso intensivo de dados em cenários cloud-native. O Fluid proporciona observabilidade, escalabilidade e aceleração de acesso aos conjuntos de dados por meio do gerenciamento e agendamento de EFCRuntimes. Este tópico descreve como usar o Fluid EFCRuntime para acelerar o acesso a sistemas de arquivos File Storage NAS (NAS) ou CPFS.

ou CPFS

Pré-requisitos

  • A instância do Elastic Compute Service (ECS) usa o Alibaba Cloud Linux 2 como sistema operacional, com versão de kernel 4.19.91-23 ou superior.

  • Crie um cluster Container Service for Kubernetes (ACK) Pro com Kubernetes 1.18 ou posterior. Para mais informações, consulte Criar um cluster ACK Pro.

  • Ative o serviço NAS e garanta que os nós do cluster ACK Pro possam montar e acessar um sistema de arquivos NAS Capacity, NAS Performance .

    Nota

    Em cenários de treinamento de IA, selecione o tipo de sistema de arquivos NAS com base no throughput exigido pelos jobs de treinamento. Para mais detalhes, consulte o Guia de seleção.

  • Conecte um cliente kubectl ao cluster ACK Pro. Consulte Conectar-se a um cluster ACK usando kubectl para obter instruções.

Visão geral do EFC

O Elastic File Client (EFC) é um cliente POSIX baseado em FUSE desenvolvido pela equipe técnica do NAS. Ele substitui o cliente NFS em modo kernel e permite acesso a dados via múltiplas conexões, cache de metadados e cache de dados distribuído para aumentar a velocidade de leitura. Além disso, o EFC oferece suporte a monitoramento de desempenho pelo Managed Service for Prometheus. Em comparação com os clientes NFS V3 e V4.x em modo kernel e outros clientes baseados em FUSE, o EFC apresenta as seguintes vantagens:

  • Consistência semântica forte: o mecanismo de bloqueio distribuído do EFC garante consistência rigorosa para arquivos e diretórios. Dados gravados em um arquivo tornam-se imediatamente legíveis por outros clientes, e arquivos recém-criados ficam acessíveis instantaneamente. Esse recurso facilita a sincronização de dados entre múltiplos nós.

  • Cache de leitura e escrita em servidores individuais: o EFC otimiza a lógica de cache do FUSE e utiliza uma pequena quantidade de memória no nó para acelerar operações em arquivos pequenos. Comparado aos clientes NFS tradicionais, o desempenho de leitura e escrita em cache melhora em mais de 50%.

  • Caches distribuídos somente leitura: o EFC usa a memória de vários nós para criar um pool de cache que escala horizontalmente de forma automática e atende à demanda crescente de computação.

  • Pré-busca de arquivos pequenos: o EFC pré-carrega dados frequentes em diretórios muito acessados para reduzir a sobrecarga associada à busca de dados.

  • Atualizações dinâmicas e capacidades de failover: o EFC executa failover em segundos e realiza atualizações dinâmicas nos clientes sem interromper seus serviços.

Use o Fluid EFCRuntime para acelerar o acesso a sistemas de arquivos NAS

O Fluid usa recursos personalizados do Kubernetes relacionados ao Fluid EFCRuntime para se conectar ao EFC e facilitar a implementação de observabilidade e escalabilidade para conjuntos de dados.

Limitações

O Fluid EFCRuntime apresenta as seguintes limitações:

  • O Fluid EFCRuntime não oferece suporte a pré-busca de cache via DataLoad. O armazenamento em cache ocorre apenas no primeiro acesso aos dados.

  • O Fluid EFCRuntime não expõe o status de cache dos conjuntos de dados.

  • O Fluid EFCRuntime está disponível apenas nas seguintes regiões: China (Zhangjiakou), China (Pequim), China (Guangzhou), China (Shenzhen) e China (Xangai).

Funcionamento do Fluid EFCRuntime

A figura abaixo ilustra como o Fluid EFCRuntime armazena em cache dados do NAS no armazenamento local para acelerar o acesso. O processo funciona da seguinte maneira:

  1. Crie definições de recursos personalizados (CRDs) de datasets e EFCRuntimes para especificar informações sobre os sistemas de arquivos NAS de origem.

  2. Os controladores do Fluid implantam os componentes EFC Cache Worker e EFC FUSE com base nas informações dos sistemas de arquivos de origem.

  3. Ao criar um pod, use uma persistent volume claim (PVC) para montar o destino de montagem do sistema de arquivos, exposto pelo cliente EFC FUSE, no pod.

  4. Ao acessar dados em um sistema de arquivos NAS montado, o cliente EFC FUSE encaminha a solicitação ao EFC Cache Worker. Esse componente verifica se os dados já existem no armazenamento local. Se estiverem em cache, o acesso é direto. Caso contrário, o EFC Cache Worker lê os dados do sistema de arquivos NAS , armazena-os localmente e permite o acesso ao cache.

image
  • Dataset: CRD definido pelo Fluid que representa uma coleção de dados logicamente relacionados, usados pelos mecanismos de computação das camadas superiores.

  • EFCRuntime: runtime responsável por acelerar o acesso aos conjuntos de dados, usando o EFC como mecanismo de cache. Os mecanismos de cache do EFC incluem os componentes EFC Cache Worker e EFC FUSE.

    • EFC Cache Worker: componente do lado do servidor que habilita o cache baseado em hash consistente. Você pode desativá-lo conforme necessário; porém, isso desabilita os caches distribuídos somente leitura, sem afetar outras funcionalidades.

    • EFC FUSE: componente do lado do cliente do EFC que expõe interfaces de acesso a dados via protocolo POSIX.

Procedimento

Etapa 1: Instalar o ack-fluid

Instale o pacote de IA cloud-native e o ack-fluid versão 0.9.10 ou posterior.

Importante

Se você instalou o Fluid open source, desinstale-o antes de instalar o componente ack-fluid.

Instalar ack-fluid sem o pacote de IA cloud-native

Ative a opção Fluid data acceleration durante a instalação do pacote de IA cloud-native. Para mais detalhes, consulte Implantar o pacote de IA cloud-native.

Instalar ack-fluid com o pacote de IA cloud-native já instalado

  1. Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Applications > Cloud-native AI Suite.

  3. Na página Cloud-native AI Suite, localize o ack-fluid e clique em Deploy na coluna Actions.

  4. Na mensagem Install Component, clique em Confirm.

Atualizar ack-fluid para 0.9.10 ou posterior

  1. Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Applications > Cloud-native AI Suite.

  3. Na página Cloud-native AI Suite, localize o ack-fluid e clique em Upgrade na coluna Actions.

  4. Na mensagem Upgrade Component, clique em Confirm.

Etapa 2: Gravar dados no sistema de arquivos NAS

Nota

Se o sistema de arquivos NAS já contiver dados armazenados, pule esta etapa.

  1. Monte o sistema de arquivos NAS em uma instância ECS. Para mais informações, consulte Montar sistema de arquivos NFS com um clique.

  2. Execute o comando a seguir para consultar o destino de montagem do sistema de arquivos CPFS:

    findmnt /mnt

    Saída esperada:

    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. Execute o comando abaixo para criar um arquivo de 10 GB no diretório de montagem do sistema de arquivos NAS:

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

    Saída esperada:

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

Etapa 3: Criar um dataset e um EFCRuntime

  1. Crie um arquivo chamado dataset.yaml e copie o conteúdo abaixo para ele:

    Exemplo de código 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

    Exemplo de código CPFS

    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: efc-demo
    spec:
      mounts:
        - mountPoint: "cpfs://file-system-id.region.cpfs.aliyuncs.com:/share/path"
          name: efc
          path: "/mnt"
    ---
    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

    Modelo de exemplo para sistema de arquivos 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

    O arquivo dataset.yaml serve para criar um dataset e um EFCRuntime.

    • O dataset especifica informações sobre o sistema de arquivos NAS , incluindo a URL do sistema NAS e o diretório desejado para montagem.

    • O EFCRuntime inicia um sistema de cache EFC para fornecer serviços de cache. Defina o número de pods replicados para o componente worker do sistema de cache EFC e a capacidade de cache de cada componente worker.

    Parâmetro

    Descrição

    mountPoint

    Para sistemas de arquivos NAS, defina o valor no formato nfs://<nas_url>:<nas_dir>.

    • nas_url: URL do sistema de arquivos NAS.

      Para obter a URL do sistema de arquivos NAS, realize as seguintes operações: Faça login no console do NAS. No painel de navegação à esquerda, escolha File System > File System List. Na página File System List, localize o sistema de arquivos NAS que deseja montar e clique em Manage na coluna Actions. Na página exibida, clique em Mount Targets. Para mais informações, veja Gerenciar destinos de montagem.

    • nas_dir: Subdiretório que você deseja montar. Geralmente, defina o valor como o diretório raiz. Por exemplo, o valor efc://xxxxxxxxxxx-xxxxx.cn-beijing.nas.aliyuncs.com:/ especifica o diretório raiz de um sistema de arquivos NAS.

    replicas

    Quantidade de pods replicados criados para o componente worker do sistema de cache EFC. Defina o valor considerando o tamanho da memória do nó de computação e o tamanho do conjunto de dados. Recomenda-se garantir que o produto do valor de quota pelo valor de replicas seja maior que o tamanho do conjunto de dados.

    networkMode

    Valores válidos: ContainerNetwork e HostNetwork. Em ambientes ACK, configure como ContainerNetwork. Este modo de rede não compromete o desempenho da rede.

    mediumtype

    Tipo de cache. Valores válidos: HDD, SSD e MEM. O valor MEM indica memória. Para cenários de treinamento de IA, defina este parâmetro como MEM. Ao escolher MEM, configure o parâmetro path para um sistema de arquivos em memória, como tmpfs.

    path

    Diretório de cache nos pods dos componentes worker do sistema de cache EFC. Defina este parâmetro como /dev/shm.

    quota

    Capacidade de cache de cada componente worker. Configure o valor baseando-se no tamanho da memória do nó de computação e no tamanho do conjunto de dados. Garanta que o produto do valor de quota pelo valor de replicas exceda o tamanho do conjunto de dados.

  2. Execute o comando a seguir para criar um EFCRuntime e um dataset:

    kubectl create -f dataset.yaml
  3. Execute o comando abaixo para verificar se o Dataset foi implantado:

    kubectl get dataset efc-demo

    Saída esperada:

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

    O estado Bound do dataset indica que o sistema de cache EFC opera corretamente no cluster e que os pods da aplicação podem acessar os dados fornecidos pelo dataset.

  4. Execute o seguinte comando para confirmar a implantação do EFCRuntime:

    kubectl get efcruntime

    Saída esperada:

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

    Os resultados mostram que os componentes master, worker e FUSE encontram-se no estado Ready.

  5. Execute os comandos abaixo para verificar a criação do persistent volume (PV) e da PVC:

    Após o dataset e o sistema de cache EFC estarem prontos, o Fluid cria automaticamente uma PVC e um PV.

    kubectl get pv,pvc

    Saída esperada:

    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

Etapa 4: Criar uma aplicação para acessar dados

Crie uma aplicação para validar a aceleração no acesso aos dados. Neste exemplo, cria-se uma aplicação com dois pods para acessar o sistema de arquivos NAS múltiplas vezes a partir de dois nós diferentes. Avalie o desempenho de aceleração do Fluid EFCRuntime medindo o tempo necessário para acessar os dados.

  1. Crie um arquivo chamado app.yaml e copie o conteúdo a seguir para ele.

    O conteúdo abaixo define um StatefulSet chamado efc-app, contendo dois pods. Cada pod possui a PVC efc-demo montada no diretório /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. Execute o comando a seguir para criar um StatefulSet denominado efc-app:

    kubectl create -f app.yaml
  3. Execute o comando abaixo para consultar o tamanho do arquivo especificado:

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

    Saída esperada:

    10G     /data/allzero-demo
  4. Consulte o tempo necessário para ler o arquivo especificado a partir da aplicação.

    Nota

    O tempo e o throughput podem variar dependendo do ambiente de execução e do método de medição. Neste tópico, o cluster possui três instâncias ECS do tipo ecs.g7ne.8xlarge. O EFCRuntime efc-demo tem três pods worker rodando na mesma instância ECS. Já o StatefulSet efc-app possui dois pods executando separadamente nas outras duas instâncias ECS. O tempo de acesso aos dados não sofre influência do cache do kernel no nó onde o cliente EFC FUSE está em execução.

    1. Execute o comando a seguir para verificar o tempo necessário para ler o arquivo especificado a partir do pod efc-app-0 do StatefulSet:

      Nota

      Para ler outro arquivo, substitua /data/allzero-demo pelo caminho do arquivo desejado.

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

      Saída esperada:

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

      Os resultados indicam que foram necessários 15.792 segundos para ler um arquivo de 10 GB, resultando em uma velocidade de leitura de 648 MiB/s.

    2. Execute o comando abaixo para verificar o tempo necessário para ler o mesmo arquivo de 10 GB a partir do outro pod do StatefulSet:

      Nota

      Caso deseje ler outro arquivo, substitua /data/allzero-demo pelo caminho correspondente.

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

      Saída esperada:

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

      Os resultados mostram que foram gastos 9.970 segundos para ler um arquivo de 10 GB, atingindo uma velocidade de leitura de 1.034,3 MiB/s.

    Com o uso do Fluid EFCRuntime, a velocidade de leitura aumentou de 648 MiB/s para 1.034,3 MiB/s. Para o mesmo arquivo, o Fluid EFCRuntime elevou a velocidade de leitura em aproximadamente 100%.