Usando volumes de estágio Snowflake com serviços

Nota

No momento, o uso de volumes do Snowflake em estágios com serviços não está disponível para contas no Google Cloud.

O Snowflake oferece suporte a vários tipos de volume de armazenamento para seus contêineres de aplicativo, incluindo volumes de estágio interno, armazenamento local, armazenamento de memória e armazenamento em bloco. Esta seção explica como configurar volumes e montagens de volume para estágios internos.

Os volumes de estágio fornecem ao seu serviço acesso a áreas de preparação interna usando APIs FileSystem, simplificando seu código em comparação ao uso de um driver Snowflake e comandos SQL GET e PUT.

Os volumes de estágio também podem ser mais eficientes para cenários com leituras ou gravações em streaming de grandes arquivos de dados. Os volumes de estágio funcionam melhor quando usados pelo aplicativo como uma API alternativa conveniente para estágios, em vez de esperar um sistema de arquivos totalmente capaz.

Atualmente, há duas implementações de volumes de estágio: a versão geralmente disponível e uma versão mais recente que está atualmente em versão preliminar.

Sobre a nova implementação de volume de estágio

A implementação do volume de estágio geralmente disponível usa um cache compartilhado para leituras e gravações. Embora isso funcione bem para alguns cenários, você não pode controlar se os dados são lidos a partir do cache ou diretamente do estágio, o que pode não ser adequado para todos os aplicativos. Além disso, ao usar o cache para leituras e gravações, você pode introduzir sobrecarga de desempenho.

A nova implementação do volume do estágio, atualmente em versão preliminar, usa apenas cache na memória limitado. Isso proporciona um comportamento mais previsível e uma taxa de transferência significativamente mais rápida. Essa versão substituirá eventualmente a implementação geralmente disponível. A Snowflake recomenda avaliar essa versão preliminar, a menos que sua carga de trabalho exija gravações aleatórias ou anexos de arquivo, atualmente sem suporte.

Tenha em mente as seguintes considerações adicionais ao usar a nova implementação de volume de estágio:

  • Ela é otimizada para leituras e gravações grandes e sequenciais, proporcionando um forte desempenho para esses padrões de acesso. Para obter melhores resultados, leia e grave os dados em partes grandes e contíguas.

  • O desempenho de leitura aleatória pode ser menor com a nova implementação devido à remoção do cache. Entretanto, sem um cache de disco local, a consistência entre os volumes é melhorada. As alterações de arquivo são gravadas diretamente no estágio de suporte quando o arquivo é fechado, sem buffer de disco local.

  • As leituras sempre retornam os dados mais recentes, tornando essa configuração melhor para o compartilhamento de dados entre serviços.

  • Não há suporte para gravações aleatórias ou anexos de arquivo. A tentativa dessas operações gera erro.

Especificação de um volume de estágio do Snowflake em uma especificação de serviço

Para criar um serviço em que os contêineres de serviço usam um volume de estágio do Snowflake, especifique as configurações necessárias na especificação do serviço, conforme mostrado nas etapas a seguir:

  1. Para especificar o volume do estágio, use o campo spec.volumes.

    • Use a versão geralmente disponível da implementação do volume de estágio, conforme mostrado no exemplo a seguir:

      volumes:
      - name: <name>
        source: <stage_name>
      
      Copy

      Os seguintes campos são obrigatórios:

      • name: nome do volume.

      • source: a área de preparação interna do Snowflake ou pasta no estágio a ser montado, por exemplo @my_stage, @my_stage/folder. Este valor deve estar entre aspas duplas.

    • Use a nova versão preliminar da implementação do volume de estágio, conforme mostrado no exemplo a seguir:

      volumes:
       - name: <name>
         source: stage
         stageConfig:
            name: <stage_name>
      
      Copy

      Os seguintes campos são obrigatórios:

      • name: nome do volume.

      • source: identifica o tipo do volume (stage).

      • stageConfig: identifica a área de preparação interna do Snowflake ou pasta em um estágio a ser montado, por exemplo @my_stage, @my_stage/folder ou @my_db.my_schema.my_stage/folder/nestedfolder. Este valor deve estar entre aspas duplas.

  2. Use o campo spec.containers.volumeMounts para descrever onde montar o volume do estágio nos contêineres de seu aplicativo, conforme mostrado no exemplo a seguir:

    volumeMounts:
    - name: <name>
      mountPath: <absolute_directory_path>
    
    Copy

    As informações fornecidas neste campo são consistentes em todos os tipos de volume de armazenamento com suporte e se aplicam a ambas as implementações dos volumes de estágio.

Exemplo

Este exemplo ilustra a diferença entre montar um estágio do Snowflake usando os volumes de estágio existentes e os novos. Na especificação de serviço de exemplo, o contêiner app monta uma área de preparação interna @model_stage usando tanto as implementações de volume de estágio existentes quanto as novas.

  • A configuração do volume de estágio @model-legacy direciona o Snowflake para usar a implementação geralmente disponível do volume do estágio.

  • A configuração do volume de estágio @model-new especifica o campo stageConfig que direciona o Snowflake para usar a implementação de versão preliminar do volume de estágio.

spec:
  containers:
  - name: app
    image: <image1-name>
    volumeMounts:
    - name: models-legacy
      mountPath: /opt/model-legacy
    - name: models-new
      mountPath: /opt/model-new
  volumes:
  - name: models-legacy
    source: "@model_stage"
  - name: models-new
    source: stage
    stageConfig:
      name: "@model_stage"
Copy

O campo volumeMounts especifica onde montar o volume do estágio dentro do contêiner. Essa especificação permanece a mesma para ambas as implementações de volume de estágio.

Requisitos de controle de acesso

A função de proprietário do serviço é a função usada para criar o serviço. É também a função que os serviços usam ao interagir com o Snowflake. Esta função de proprietário determina as permissões concedidas aos contêineres de aplicativo para acessar um estágio montado. O função de proprietário deve ter privilégio READ no estágio.

Se a função de proprietário não tiver o privilégio WRITE em um estágio, a montagem para esse estágio será somente leitura. Ou seja, os containers só podem ler os arquivos do estágio. A função de proprietário precisa do privilégio WRITE em um estágio para que a montagem do estágio ofereça suporte à leitura e gravação.

Diretrizes ao usar volumes de estágio

Esta seção fornece diretrizes a serem seguidas ao implementar o código do aplicativo no qual os contêineres usam volumes de estágio.

Diretrizes comuns para ambas as implementações de volumes de estágio

  • A montagem em estágio é otimizada para leituras e gravações sequenciais.

  • As operações de E/S de montagem em estágio podem ter latências maiores do que as operações de E/S no sistema de arquivo do contêiner e nos volumes de armazenamento em bloco. Você deve sempre verificar o código de status das operações de E/S para garantir que elas foram bem-sucedidas.

  • As montagens de estágio carregam atualizações de arquivo de forma assíncrona. As alterações em arquivos em uma montagem de estágio só são garantidas como persistentes no estágio após o descritor de arquivo ser fechado ou esvaziado com sucesso. Pode haver algum atraso antes que as alterações nos arquivos em uma montagem de estágio se tornem visíveis para outros contêineres e para o Snowflake.

  • Cada diretório em um estágio montado deve conter menos de 100 mil arquivos. Espere que a latência readdir aumente com o número de arquivos no diretório.

Diretrizes ao usar a versão geralmente disponível da implementação de volume de estágio

  • Evite gravar simultaneamente em vários arquivos dentro de uma montagem de estágio.

  • A montagem de estágio não é um sistema de arquivos de rede. Não utilize montagens de estágio para coordenação de vários clientes.

  • Não abra vários identificadores para o mesmo arquivo simultaneamente. Use identificadores de arquivo abertos para operações de leitura ou gravação, mas não uma mistura de ambas. Para ler um arquivo após gravar nele, feche o arquivo e abra-o novamente antes de ler.

Diretrizes ao usar a nova versão preliminar da implementação de volume de estágio

  • Gravações simultâneas no mesmo arquivo de várias montagens de estágio (mesmo volume de estágio montado em contêineres diferentes) não são recomendadas.

  • A ausência de um cache de disco local melhora a consistência entre as montagens. As alterações no arquivo são liberadas diretamente para o estágio de suporte ao fechar o arquivo, sem buffer de disco local. As leituras sempre retornam os dados mais recentes, tornando a nova montagem de estágio melhor para compartilhar dados entre serviços.

  • Leia e grave dados em partes grandes e contíguas visando um desempenho ideal. A cobrança de desempenho para leituras e gravações pequenas quando comparado à implementação de volume de estágio geralmente disponível pode mitigar os ganhos de desempenho da nova implementação.

Limitações ao usar volumes de estágio

Esta seção descreve as limitações que você deve conhecer ao implementar código de aplicativo em que os contêineres usam volumes de estágio. Se você tiver algum problema com esses limites, entre em contato com seu representante de conta.

Limitações comuns para ambas as implementações de volumes de estágio

  • É permitido montar apenas um estágio ou um subdiretório em um estágio; por exemplo, @my_stage, @my_stage/folder. Não é possível montar um único arquivo em um estágio, por exemplo, @my_stage/folder/file.

  • Áreas de preparação externa não são suportadas. Somente os estágios internos do Snowflake são compatíveis.

  • Um máximo de 5 volumes de estágio é permitido por serviço. Para obter mais informações, consulte spec.volumes.

  • Há suporte para um máximo de 8 volumes em estágio por nó do pool de computação. O Snowflake gerencia o limite de montagem de estágio por nó de forma semelhante à forma como gerencia a memória, CPU e GPU. Iniciar uma nova instância de serviço pode fazer com que o Snowflake inicie novos nós quando nenhum nó existente tiver capacidade para oferecer suporte às montagens de estágio solicitadas.

  • As montagens de estágio não são sistemas de arquivo totalmente compatíveis com POSIX. Por exemplo:

    • As renomeações de arquivo e diretório não são atômicas.

    • Links físicos não são permitidos.

  • O subsistema inode notify (inotify) do kernel Linux que monitora alterações nos sistemas de arquivos não funciona em montagens de estágio.

Limitações ao usar a versão geralmente disponível da implementação do volume do estágio

  • As capacidades de volume do estágio variam de acordo com a plataforma de nuvem de sua conta Snowflake:

    • Contas na AWS oferecem suporte a áreas de preparação interna com criptografia de estágio SNOWFLAKE_FULL e SNOWFLAKE_SSE. Para obter mais informações, consulte Parâmetros de área de preparação interna.

    • Atualmente, as contas no Azure oferecem suporte a áreas de preparação interna com criptografia SNOWFLAKE_SSE. Ao executar CREATE STAGE, use o parâmetro ENCRYPTION para especificar o tipo de criptografia: CREATE STAGE my_stage ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');

    • Contas no Google Cloud não têm suporte.

  • Gravações simultâneas no mesmo arquivo de várias montagens de estágio (mesmo volume de estágio montado em contêineres diferentes) não são compatíveis.

Limitações ao usar a nova versão preliminar da implementação do volume de estágio

  • As capacidades de volume do estágio variam de acordo com a plataforma de nuvem de sua conta Snowflake:

    • Contas na AWS oferecem suporte a áreas de preparação interna com criptografia de estágio SNOWFLAKE_FULL e SNOWFLAKE_SSE (consulte Parâmetros de área de preparação interna).

    • Atualmente, as contas no Azure e no Google Cloud oferecem suporte a áreas de preparação interna com criptografia SNOWFLAKE_SSE. Ao executar CREATE STAGE, use o parâmetro ENCRYPTION para especificar o tipo de criptografia: CREATE STAGE my_stage ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');

  • Gravações aleatórias e anexos de arquivo não são compatíveis.

  • Cada estágio montado requer 512 MB de memória por estágio. Isso significa que há uma limitação no número de volumes de estágio que podem ser usados com base no tamanho da instância. Montar o volume em vários contêineres não aumenta o consumo de memória.