Cloud Storage FUSE

O Cloud Storage FUSE é um adaptador FUSE de código aberto que permite ativar intervalos do Cloud Storage como sistemas de arquivos em sistemas Linux ou macOS. Ele também permite que aplicativos façam o upload e o download de objetos do Cloud Storage usando a semântica padrão de sistemas de arquivos. O Cloud Storage FUSE pode ser executado em qualquer local que tenha conectividade com o Cloud Storage, incluindo VMs do Google Compute Engine ou sistemas no local1.

O Cloud Storage FUSE é uma ferramenta de código aberto desenvolvida pelo Google e mantida pela comunidade, escrita em Go e hospedada no GitHub. O Cloud Storage FUSE é regido exclusivamente pela Licença Apache, sem outros termos ou condições. Ele é distribuído como está, sem qualquer tipo de garantia. O suporte é feito pela comunidade e está disponível no Server Fault com as tags google-cloud-platform e gcsfuse. Verifique as perguntas e respostas anteriores para ver se seu problema já foi respondido.

Visão geral técnica

O Cloud Storage FUSE transforma nomes de armazenamento de objetos em um sistema de arquivos e diretórios, interpretando o caractere “/” nos nomes de objetos como um separador de diretório, de maneira que objetos com o mesmo prefixo comum sejam tratados como arquivos do mesmo diretório. Os aplicativos podem interagir com o intervalo ativado como se fosse um sistema de arquivos simples, permitindo o armazenamento praticamente ilimitado de arquivos em na nuvem.

Embora o Cloud Storage FUSE tenha uma interface de sistema de arquivos, ele não é como um sistema de arquivos NFS ou CIFS no back-end. O Cloud Storage FUSE mantém as mesmas características fundamentais do Cloud Storage, preservando a escalabilidade do Cloud Storage em termos de tamanho e desempenho agregado, além de manter a mesma latência e desempenho de objeto único. Como acontece com os outros métodos de acesso, o Cloud Storage não é compatível com simultaneidade e bloqueio. Por exemplo, se vários clientes do Cloud Storage FUSE estiverem gravando no mesmo arquivo, o último flush vence.

Para mais informações sobre como usar o Cloud Storage FUSE ou para reportar um problema, acesse o repositório GitHub do Google Cloud Platform. No repositório, recomendamos que você revise README, semântica, instalação e montagem.

Como usar o Cloud Storage FUSE

Todos os detalhes sobre como instalar e trabalhar com o Cloud Storage FUSE estão descritos no repositório GoogleCloudPlatform/gcsfuse do GitHub. Nas etapas a seguir, apresentamos uma visão geral rápida de como trabalhar com o Cloud Storage FUSE de maneira interativa, ou seja, como ativar um intervalo manualmente.

  1. Siga as instruções para instalar o Cloud Storage FUSE e suas dependências.

  2. Configure as credenciais para o Cloud Storage FUSE.

    O Cloud Storage FUSE detecta automaticamente as credenciais com base nas credenciais padrão do aplicativo:

    1. Se você estiver executando em uma instância do Google Compute Engine com o escopo storage-full configurado, o Cloud Storage FUSE pode usar a conta de serviço integrada ao Compute Engine. Para mais informações, consulte Como usar contas de serviço com aplicativos.

    2. Se você instalou o SDK do Google Cloud e executou gcloud auth application-default login, o Cloud Storage FUSE poderá usar essas credenciais.

    3. Se você definir a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS como o caminho do arquivo de chave JSON de uma conta de serviço, o Cloud Storage FUSE usará essa credencial. Para mais informações sobre como criar um arquivo de chave JSON para uma conta de serviço usando o Console do Google Cloud Platform, consulte Como criar chaves de conta de serviço.

    Se for especificado mais de um tipo de credencial, consulte Como funciona o Application Default Credentials para saber a ordem em que as credenciais são usadas.

  3. Crie um diretório.

    $ mkdir /path/to/mount
    
  4. Caso ainda não exista, crie o intervalo que você quer ativar usando o Console do Google Cloud Platform.

  5. Use o Cloud Storage FUSE para montar o intervalo (por exemplo, example-bucket).

    $ gcsfuse example-bucket /path/to/mount
    
  6. Comece a trabalhar com o intervalo ativado.

    $ ls /path/to/mount
    

Principais diferenças em relação a um sistema de arquivos POSIX

O Cloud Storage FUSE ajuda a usar o Cloud Storage de maneira mais rápida e melhor, permitindo que aplicativos baseados em arquivos usem o Cloud Storage sem precisar regravar o código de E/S. Ele é ideal para casos de uso em que o Cloud Storage tem as características certas de desempenho e escalabilidade para um aplicativo, mas não há semântica de sistemas de arquivos. Para decidir se o Cloud Storage FUSE é uma solução adequada, você precisa considerar algumas diferenças em comparação com sistemas de arquivos locais:

Preço: o acesso ao Cloud Storage FUSE é basicamente o acesso ao Cloud Storage. Todas as operações e transferências de dados realizadas pelo Cloud Storage FUSE são mapeadas e cobradas como operações e transferências do Cloud Storage. Consulte a seção de preços abaixo para saber mais antes de usar o Cloud Storage FUSE.

Desempenho: o Cloud Storage FUSE tem uma latência muito maior do que um sistema de arquivos local. Por isso, ler ou gravar um arquivo pequeno por vez pode reduzir a capacidade. Usar arquivos maiores e/ou transferir vários arquivos por vez ajuda a aumentar a capacidade.

  • Os fluxos individuais de E/S são executados quase na mesma velocidade que no gsutil.
  • O comando gsutil rsync pode ser particularmente afetado por latência, porque ele lê e grava um arquivo por vez. Normalmente, é mais rápido usar a sinalização de nível superior -m com o comando.
  • Pequenas leituras aleatórias são lentas devido à latência de primeiro byte. Não execute um banco de dados sobre o Cloud Storage FUSE.
  • As gravações aleatórias são feitas lendo todo o blob, editando-o localmente e gravando todo o blob modificado de volta no Cloud Storage. Pequenas gravações em arquivos grandes funcionam como previsto, mas são lentas e caras.

Metadados: o Cloud Storage FUSE não transfere metadados com o arquivo no momento do upload para o Cloud Storage. Isso significa que, para usar o Cloud Storage FUSE como ferramenta de upload, não é possível definir metadados como o tipo de conteúdo e acls, como seria feito com outros métodos de upload. Se as propriedades dos metadados forem essenciais, considere usar o gsutil, a API JSON ou o Console do Google Cloud Platform

  • A exceção é que o Cloud Storage FUSE armazena destinos mtime e symlink.

Simultaneidade: não há controle de simultaneidade quando há vários editores trabalhando em um único arquivo. Quando vários editores tentam substituir um arquivo, a última gravação ganha e todas as gravações anteriores são perdidas. Não há mesclagem, controle de versão ou notificação do usuário sobre a substituição subsequente.

Vinculação: o Cloud Storage FUSE não é compatível com links físicos.

Semântica: algumas semânticas não são exatamente como seriam em um sistema de arquivos tradicional. A lista de exceções está aqui. Por exemplo, metadados não são compatíveis, como o último horário de acesso, e algumas operações de metadados não são atômicas, como a renomeação de diretórios.

Acesso: a autorização para arquivos é definida pelas permissões do Cloud Storage. O controle de acesso no estilo POSIX não funciona.

Disponibilidade: sistemas distribuídos como o Cloud Storage sofrem erros temporários que fazem com que a disponibilidade fique abaixo dos 100%. A recomendação é realizar novas tentativas seguindo as diretrizes de retirada exponencial truncada.

Armazenamento local: objetos novos ou modificados são armazenados em sua totalidade em um arquivo temporário local até serem fechados ou sincronizados. Quando estiver trabalhando com arquivos grandes, verifique se a capacidade de armazenamento local para cópias temporárias de arquivos é suficiente, principalmente se estiver trabalhando com instâncias do Google Compute Engine. Para saber mais, consulte a documentação readme.

Diretórios: por padrão, aparecerão no sistema de arquivos somente os diretórios definidos explicitamente (ou seja, aqueles são seus próprios objetos no Cloud Storage). Não aparecerão diretórios implícitos (ou seja, aqueles que são apenas parte do nome do caminho de outros arquivos ou diretórios). Se algum arquivo tiver um diretório implícito em seu nome de caminho, ele não aparecerá na árvore de diretórios geral (porque o diretório implícito em que ele está não aparecerá). Há uma sinalização disponível para alterar esse comportamento. Para saber mais, consulte a documentação sobre semântica.

Custos com o Cloud Storage FUSE

O Cloud Storage FUSE está disponível gratuitamente, mas o armazenamento, os metadados e a E/S de rede gerados para e a partir do Cloud Storage são cobrados como qualquer outra interface do Cloud Storage. Para evitar surpresas, estime quanto o uso do Cloud Storage FUSE afetará os custos do Cloud Storage. Por exemplo, se estiver usando o Cloud Storage FUSE para armazenar arquivos de registro e os registros forem eliminados agressivamente em centenas ou milhares de máquinas ao mesmo tempo, os custos podem aumentar rapidamente.

Você precisa estar ciente das seguintes categorias de cobranças relacionadas ao uso do Cloud Storage FUSE:

  • As operações de objetos normais (criar, excluir e listar) são cobradas conforme descrito na seção Operações da página de preços do Cloud Storage.

  • Os objetos Nearline Storage e Coldline Storage têm custos associados à recuperação e exclusão antecipada. Consulte a seção Recuperação e exclusão antecipada na página de preços do Cloud Storage.

  • As taxas de saída de rede e de transferência de dados entre locais regionais e multirregionais também são cobradas. Veja a seção Rede na página de preços do Cloud Storage.

Exemplo de detalhamento de custos

Para ter uma ideia de quanto o uso do Cloud Storage FUSE afetará os custos do Cloud Storage, considere a seguinte sequência de comandos e suas operações associadas da API JSON. Você pode exibir informações sobre operações usando a sinalização --debug_gcs.

Comando Operações da API JSON
gcsfuse --debug_gcs example-bucket mp Objects.list (para verificar credenciais)
cd mp n/a
ls mp Objects.list ("")
mkdir subdir Objects.get("subdir")
Objects.get("subdir/") Objects.insert("subdir/")
cp ~/local.txt subdir/ Objects.get("subdir/local.txt")
Objects.get("subdir/local.txt/")Objects.insert("subdir/local.txt"), para criar um objeto vazioObjects.insert("subdir/local.txt") quando fechar, depois de terminar de gravar
rm -rf subdir Objects.list("subdir/")
Objects.list("subdir/") Objects.delete("subdir/local.txt") Objects.list("subdir/") Objects.delete("subdir/")

Usando as taxas de operação da API JSON, podemos calcular que, dentre as 14 operações, há oito operações de Classe A, quatro operações de Classe B e duas operações gratuitas. Também há uma cobrança incorrida pelo armazenamento do arquivo local.txt. Se o arquivo for excluído logo após ter sido criado, essa cobrança será insignificante. Somente para as 12 operações cobradas, o custo dessa sequência de comandos será de US$ 0,000084.

1 O Cloud Storage FUSE é compatível com o kernel Linux versão 3.10 e mais recentes. Para verificar a versão do seu kernel, você pode usar uname -a.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.