Uso de volumes de armazenamento em bloco com serviços

O Snowflake oferece suporte a estes tipos de volume de armazenamento para seus aplicativos em contêineres: estágio interno do Snowflake, armazenamento local, volumes de armazenamento de memória e volumes de armazenamento em bloco.

Especificação do armazenamento em bloco na especificação de serviço

Para criar um serviço que usa armazenamento em bloco, forneça a configuração necessária na especificação do serviço da seguinte maneira:

  1. Especifique o campo spec.volumes para definir os volumes de armazenamento em bloco a serem criados.

    volumes:
      - name: <name>
        source: block
        size: <size in Gi>
        blockConfig:                             # optional
          initialContents:
            fromSnapshot: <snapshot name>
          iops: <number-of-operations>
          throughput: <MiB per second>
    
    Copy

    Os seguintes campos são obrigatórios:

    • name: nome do volume.

    • source: tipo do volume. Para volume de armazenamento em bloco, o valor é block.

    • size: capacidade de armazenamento do volume de armazenamento em bloco medida em bytes. O valor deve ser sempre um inteiro, especificado usando o sufixo da unidade Gi. Por exemplo, 5Gi significa 5*1024*1024*1024 bytes. O valor do tamanho pode variar de 1Gi a 16384Gi.

    Os seguintes são campos opcionais:

    • blockConfig.initialContents.fromSnapshot: Especifica o nome de um instantâneo (explicado nas seções a seguir) tirado de outro volume O instantâneo é usado para inicializar o volume do bloco.

      O nome do instantâneo pode ser um identificador de objeto totalmente qualificado, como TUTORIAL_DB.DATA_SCHEMA.MY_SNAPSHOT. Além disso, o nome do instantâneo é resolvido em relação ao banco de dados e ao esquema do serviço. Por exemplo, se você criou seu serviço em TUTORIAL_DB.DATA_SCHEMA, então fromSnapshot: MY_SNAPSHOT é equivalente a fromSnapshot: TUTORIAL_DB.DATA_SCHEMA.MY_SNAPSHOT.

    • blockConfig.iops: Especifica o número máximo permitido de operações de entrada/saída por segundo. Observe que o tamanho dos dados por operação é limitado a 256 KiB.

      • O intervalo permitido para AWS é de 3.000 a 16.000, com um padrão de 3.000.

      • O intervalo permitido para Azure é de 3.000 a 80.000, com um padrão de 3.000.

    • blockConfig.throughput: Especifica o pico da taxa de transferência, em MiB/segundo, a ser provisionado para o volume.

      • O intervalo permitido para AWS é de 125 a 1.000, com um padrão de 125.

      • O intervalo permitido para Azure é de 125 a 1.200, com um padrão de 125.

    Por exemplo:

    volumes:
      - name: vol-1
        source: block
        size: 200Gi
        blockConfig:
          initialContents:
            fromSnapshot: snapshot1
          iops: 3000
          throughput: 125
    
    Copy
  2. Especifique o campo spec.containers.volumeMount para descrever onde nos contêineres do seu aplicativo montar os volumes de armazenamento em bloco. As informações fornecidas neste campo são as mesmas para todos os volumes de armazenamento suportados.

Requisitos de controle de acesso

Se você quiser usar um instantâneo existente (fromSnapshot está na especificação) para inicializar o volume, a função de proprietário do serviço deve ter o privilégio USAGE no instantâneo.

A função de proprietário do serviço também deve ter o privilégio USAGE no banco de dados e no esquema que contêm o instantâneo.

Gerenciamento de instantâneos

Você pode tirar instantâneos do seu volume de armazenamento em bloco e depois usar o backup da seguinte maneira:

  • Use o backup de instantâneo para restaurar um volume de armazenamento em bloco existente.

  • Use o backup de instantâneo como dados iniciais para inicializar um novo volume de armazenamento em bloco ao criar um novo serviço.

Você deve garantir que todas as suas atualizações sejam liberadas para o disco antes de tirar o instantâneo.

O Snowflake fornece os seguintes comandos para criar e gerenciar instantâneos:

Além disso, para restaurar um instantâneo em um volume de armazenamento em bloco existente, você pode executar o comando ALTER SERVICE … RESTORE VOLUME. Observe que você precisa suspender o serviço antes de restaurar um snapshot. Após restaurar um volume, o serviço é retomado automaticamente.

Custos de armazenamento em bloco

Para obter mais informações, consulte a Tabela de consumo do serviço Snowflake.

Exemplo

Para obter um exemplo, consulte tutorial. O tutorial fornece instruções passo a passo para criar um serviço com um volume de armazenamento em bloco montado.

Diretrizes e limitações

As seguintes restrições se aplicam a serviços que usam volumes de armazenamento em bloco:

  • Limitações gerais. Se você encontrar algum problema com essas limitações, entre em contato com seu representante de conta.

    • O valor do tamanho do volume de armazenamento em bloco pode variar de 1 Gi a 16.384 Gi.

    • Cada serviço oferece suporte para até três volumes de bloco. Isso se refere a spec.volumes na especificação de serviço.

    • O número total de volumes de armazenamento em bloco por conta Snowflake é limitado a 10.

    • O número de instantâneos permitidos por conta Snowflake é 100.

  • O serviço que usa volumes de armazenamento em bloco deve ter o mesmo número mínimo e máximo de instâncias.

  • Após a criação do serviço, aplica-se o seguinte:

    • Não é possível alterar o número de instâncias de serviço usando o comando ALTER SERVICE … SET … quando um serviço estiver usando volumes de armazenamento em bloco.

    • Não é possível alterar os campos size, iops ou throughput dos volumes de armazenamento em bloco.

    • Nenhum novo volume de armazenamento em bloco pode ser adicionado, e nenhum volume de armazenamento em bloco existente pode ser removido.

    • Os volumes de armazenamento em bloco são preservados se um serviço for atualizado ou suspenso e retomado. Quando um serviço é suspenso, você continua pagando pelo volume porque ele é preservado. Depois de atualizar ou retomar um serviço, o Snowflake anexa cada volume de armazenamento em bloco ao mesmo ID da instância de serviço de antes.

    • Os volumes de armazenamento em bloco serão excluídos se o serviço for interrompido. Para preservar os dados nos volumes, tire instantâneos dos volumes. Você pode usar os instantâneos mais tarde para inicializar novos volumes.

    • Os volumes de armazenamento em bloco não oferecem suporte a Tri-Secret Secure e Periodic Rekeying. Isso significa que, se a sua conta tiver ativado o Tri-Secret Secure ou o Periodic Rekeying, embora todos os outros dados do Snowflake continuem a ter segurança adicional, as imagens armazenadas nos volumes de armazenamento em bloco do Snowpark Container Services não se beneficiarão dessa segurança adicional.

      Para criar um repositório de imagens em uma conta com Tri-Secret Secure ou Periodic Rekeying, você deve primeiro confirmar que entende e concorda em continuar sem o benefício dessa segurança adicional para seus volumes de armazenamento em bloco. Para confirmar o acordo, um administrador da conta (usuário com a função ACCOUNTADMIN) precisará definir o parâmetro no nível da conta ENABLE_TRI_SECRET_AND_REKEY_OPT_OUT_FOR_SPCS_BLOCK_STORAGE como TRUE.

  • IOPS e diretrizes relacionadas à taxa de transferência

    • Se o desempenho de IO do serviço não estiver atendendo às suas expectativas e o serviço for afetado pela IO do volume em bloco ou pela taxa de transferência, você pode considerar aumentar o valor de IOPS ou a taxa de transferência. Na implementação atual, quaisquer alterações desse tipo exigem que você recrie o serviço.

      É possível revisar essas métricas de plataforma disponíveis para identificar se seu serviço tem gargalos no armazenamento em bloco:

      • container.cpu.usage

      • volume.read.iops

      • volume.write.iops

      • volume.read.throughput

      • volume.write.throughput

    • Para AWS:

      • Os valore máximos de IOPS que podem ser configurados é de 500 IOPS por GiB de tamanho de volume, até um máximo de 16.000 IOPS. Por exemplo, o IOPS máximo de um volume de 10 GiB pode ser 500 * 10 = 5.000. Portanto, observe que o valor máximo de IOPS de 16.000 só pode ser configurado se seu volume for de 32 GiB ou maior.

      • O rendimento máximo que pode ser configurado é de 1 MiB/segundo para cada 4 IOPS, até um máximo de 1000 MiBs/segundo. Por exemplo, com o padrão de 3.000 IOPS, é possível configurar uma taxa de transferência de até 750 MiB/segundo (3.000/4=750).

    • Para Azure:

      • Após um tamanho de volume de 6GB, o número permitido de IOPS aumenta em 500 para cada GB além dos 6GB (tipos de discos). O valor máximo de IOPS de um volume de 10GB pode ser 500 * 4 + 3.000 = 5.000. Portanto, observe que o valor máximo de IOPS de 80.000 só pode ser configurado se o seu volume for 160 GiB ou maior.

      • Após 6 GB, a taxa de transferência máxima que pode ser configurada é de 0,25 MiB/segundo para cada valor de IOPS, até um máximo de 1.200 MiBs/segundo. Por exemplo, com o valor padrão de IOPS 3.000, é possível configurar uma taxa de transferência de até 750 MiB/segundo (3.000 * 0,25 = 750).