🚀 Experimente o Zilliz Cloud, o Milvus totalmente gerenciado, gratuitamente—experimente um desempenho 10x mais rápido! Experimente Agora>>

milvus-logo
LFAI

O que é o JuiceFS?

  • Engineering
June 15, 2021
Changjian Gao and Jingjing Jia

As colaborações entre comunidades de código aberto são uma coisa mágica. Voluntários apaixonados, inteligentes e criativos não apenas mantêm as soluções de código aberto inovadoras, mas também trabalham para reunir diferentes ferramentas de maneiras interessantes e úteis. O Milvus, a base de dados vetorial mais popular do mundo, e o JuiceFS, um sistema de ficheiros partilhado concebido para ambientes nativos da nuvem, foram unidos neste espírito pelas respectivas comunidades de código aberto. Este artigo explica o que é o JuiceFS, como criar um cluster Milvus baseado no armazenamento de ficheiros partilhados JuiceFS e o desempenho que os utilizadores podem esperar com esta solução.

O que é o JuiceFS?

O JuiceFS é um sistema de ficheiros POSIX distribuído de alto desempenho e de código aberto, que pode ser construído sobre o Redis e o S3. Ele foi projetado para ambientes nativos da nuvem e suporta o gerenciamento, a análise, o arquivamento e o backup de dados de qualquer tipo. O JuiceFS é normalmente utilizado para resolver desafios de grandes volumes de dados, criar aplicações de inteligência artificial (IA) e recolher registos. O sistema também suporta a partilha de dados entre vários clientes e pode ser utilizado diretamente como armazenamento partilhado no Milvus.

Depois de os dados e os metadados correspondentes serem persistidos no armazenamento de objectos e no Redis, respetivamente, o JuiceFS funciona como um middleware sem estado. A partilha de dados é realizada permitindo que diferentes aplicações se liguem umas às outras sem problemas através de uma interface de sistema de ficheiros padrão. O JuiceFS depende do Redis, um armazenamento de dados em memória de código aberto, para o armazenamento de metadados. O Redis é utilizado porque garante a atomicidade e fornece operações de metadados de elevado desempenho. Todos os dados são armazenados no armazenamento de objectos através do cliente JuiceFS. O diagrama de arquitetura é o seguinte:

juicefs-architecture.png juicefs-architecture.png

Construir um cluster Milvus baseado no JuiceFS

Um cluster Milvus construído com o JuiceFS (ver diagrama de arquitetura abaixo) funciona dividindo os pedidos a montante utilizando o Mishards, um middleware de fragmentação de clusters, para fazer descer os pedidos em cascata até aos seus sub-módulos. Ao inserir dados, o Mishards aloca solicitações upstream para o nó de gravação Milvus, que armazena os dados recém-inseridos no JuiceFS. Ao ler dados, o Mishards carrega os dados do JuiceFS através de um nó de leitura Milvus para a memória para processamento, depois recolhe e devolve os resultados dos sub-serviços a montante.

milvus-cluster-built-with-juicefs.png milvus-cluster-built-with-juicefs.png

Passo 1: Iniciar o serviço MySQL

Inicie o serviço MySQL em qualquer nó do cluster. Para obter detalhes, consulte Gerenciar metadados com o MySQL.

Etapa 2: criar um sistema de arquivos JuiceFS

Para fins de demonstração, é usado o programa JuiceFS binário pré-compilado. Baixe o pacote de instalação correto para seu sistema e siga o Guia de início rápido do JuiceFS para obter instruções detalhadas de instalação. Para criar um sistema de arquivos JuiceFS, primeiro configure um banco de dados Redis para armazenamento de metadados. Recomenda-se que, para implantações em nuvem pública, você hospede o serviço Redis na mesma nuvem que o aplicativo. Além disso, configure o armazenamento de objetos para o JuiceFS. Neste exemplo, o Armazenamento de Blobs do Azure é usado; no entanto, o JuiceFS dá suporte a quase todos os serviços de objeto. Selecione o serviço de armazenamento de objetos que melhor se adapta às demandas do seu cenário.

Depois de configurar o serviço Redis e o armazenamento de objetos, formate um novo sistema de arquivos e monte o JuiceFS no diretório local:

1 $  export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=XXX;EndpointSuffix=core.windows.net"
2 $ ./juicefs format \
3     --storage wasb \
4     --bucket https://<container> \
5     ... \
6     localhost test #format
7 $ ./juicefs mount -d localhost ~/jfs  #mount
8

Se o servidor Redis não estiver a ser executado localmente, substitua o localhost pelo seguinte endereço: redis://<user:password>@host:6379/1.

Quando a instalação for bem sucedida, o JuiceFS devolve a página de armazenamento partilhado /root/jfs.

installation-success.png installation-success.png

Passo 3: Iniciar o Milvus

Todos os nós do cluster devem ter o Milvus instalado, e cada nó do Milvus deve ser configurado com permissão de leitura ou gravação. Apenas um nó do Milvus pode ser configurado como nó de escrita, e os demais devem ser nós de leitura. Primeiro, defina os parâmetros das secções cluster e general no ficheiro de configuração do sistema Milvus server_config.yaml:

Secção cluster

ParâmetroDescriçãoConfiguration (Configuração)
enableAtivar ou não o modo de clustertrue
roleFunção de implantação do Milvusrw/ro

Secção general

# meta_uri is the URI for metadata storage, using MySQL (for Milvus Cluster). Format: mysql://<username:password>@host:port/database
general:
  timezone: UTC+8
  meta_uri: mysql://root:milvusroot@host:3306/milvus

Durante a instalação, o caminho de armazenamento partilhado JuiceFS configurado é definido como /root/jfs/milvus/db.

1 sudo docker run -d --name milvus_gpu_1.0.0 --gpus all \
2 -p 19530:19530 \
3 -p 19121:19121 \
4 -v /root/jfs/milvus/db:/var/lib/milvus/db \  #/root/jfs/milvus/db is the shared storage path
5 -v /home/$USER/milvus/conf:/var/lib/milvus/conf \
6 -v /home/$USER/milvus/logs:/var/lib/milvus/logs \
7 -v /home/$USER/milvus/wal:/var/lib/milvus/wal \
8 milvusdb/milvus:1.0.0-gpu-d030521-1ea92e
9

Após a conclusão da instalação, inicie o Milvus e confirme se ele foi iniciado corretamente. Por fim, inicie o serviço Mishards em qualquer um dos nós do cluster. A imagem abaixo mostra um lançamento bem-sucedido do Mishards. Para obter mais informações, consulte o tutorial do GitHub.

mishards-launch-success.png mishards-launch-success.png

Referências de desempenho

As soluções de armazenamento compartilhado geralmente são implementadas por sistemas de armazenamento conectado à rede (NAS). Os tipos de sistemas NAS normalmente usados incluem o Sistema de Arquivos de Rede (NFS) e o Bloco de Mensagens do Servidor (SMB). As plataformas de nuvem pública geralmente fornecem serviços de armazenamento gerenciado compatíveis com esses protocolos, como o Amazon Elastic File System (EFS).

Ao contrário dos sistemas NAS tradicionais, o JuiceFS é implementado com base no Filesystem in Userspace (FUSE), em que toda a leitura e escrita de dados ocorre diretamente no lado da aplicação, reduzindo ainda mais a latência de acesso. Existem também funcionalidades exclusivas do JuiceFS que não podem ser encontradas noutros sistemas NAS, como a compressão de dados e a colocação em cache.

Os testes de benchmark revelam que o JuiceFS oferece grandes vantagens em relação ao EFS. No benchmark de metadados (Figura 1), o JuiceFS regista operações de E/S por segundo (IOPS) até dez vezes superiores ao EFS. Além disso, o benchmark de taxa de transferência de E/S (Figura 2) mostra que o JuiceFS supera o EFS em cenários de trabalho único e múltiplo.

performance-benchmark-1.png performance-benchmark-1.png

performance-benchmark-2.png performance-benchmark-2.png

Além disso, o teste de benchmark mostra que o tempo de recuperação da primeira consulta, ou o tempo para carregar dados recém-inseridos do disco para a memória, para o cluster Milvus baseado no JuiceFS é de apenas 0,032 segundos em média, indicando que os dados são carregados do disco para a memória quase instantaneamente. Para este teste, o tempo de recuperação da primeira consulta é medido utilizando um milhão de linhas de dados vectoriais de 128 dimensões inseridos em lotes de 100k em intervalos de 1 a 8 segundos.

O JuiceFS é um sistema de armazenamento de ficheiros partilhado estável e fiável, e o cluster Milvus construído sobre o JuiceFS oferece um elevado desempenho e uma capacidade de armazenamento flexível.

Saiba mais sobre o Milvus

O Milvus é uma ferramenta poderosa capaz de alimentar uma vasta gama de aplicações de inteligência artificial e de pesquisa de semelhanças vectoriais. Para saber mais sobre o projeto, consulte os seguintes recursos:

  • Leia o nosso blogue.
  • Interagir com a nossa comunidade de código aberto no Slack.
  • Utilize ou contribua para a base de dados de vectores mais popular do mundo no GitHub.
  • Testar e implementar rapidamente aplicações de IA com o nosso novo bootcamp.

writer bio-changjian gao.png biografia do escritor-changjian gao.png writer bio-jingjing jia.pngbiografia do escritor-jingjing jia.png

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Continue Lendo