Práticas recomendadas para o armazenamento na nuvem

Esta página contém um índice de práticas recomendadas para o Cloud Storage. Pode usar as informações recolhidas aqui como referência rápida do que deve ter em atenção ao criar uma aplicação que usa o Cloud Storage.

Se está a começar a usar o Cloud Storage, esta página pode não ser o melhor ponto de partida, porque não lhe ensina os princípios básicos de como usar o Cloud Storage. Se for um novo utilizador, sugerimos que comece por Descobrir o armazenamento de objetos com a Google Cloud consola ou Descobrir o armazenamento de objetos com a ferramenta gcloud.

Para ver as práticas recomendadas para cargas de trabalho de multimédia, consulte o artigo Práticas recomendadas para cargas de trabalho de multimédia.

Atribuição de nomes

Consulte Nomenclatura de contentores e Nomenclatura de objetos para ver os requisitos e as considerações de nomenclatura.

Trânsito

  • Faça uma estimativa rápida da quantidade de tráfego que vai ser enviada para o Cloud Storage. Em concreto, pense no seguinte:

    • Operações por segundo. Quantas operações por segundo espera para contentores e objetos, bem como para operações de criação, atualização e eliminação.

    • Largura de banda. Que quantidade de dados é enviada e durante que intervalo de tempo? Pondere usar uma ferramenta como o Wolfram Alpha para evitar erros nos seus cálculos.

    • Controlo de cache. A especificação dos metadados Cache-Control em objetos acessíveis publicamente vai beneficiar a latência de leitura em objetos usados com frequência ou acessados com frequência. Consulte o artigo Ver e editar metadados para ver instruções sobre como definir metadados de objetos, como Cache-Control.

  • Crie a sua aplicação para minimizar os picos de tráfego. Se existirem clientes da sua aplicação a fazer atualizações, distribua-as ao longo do dia.

  • Ao criar aplicações para taxas de pedidos elevadas, tenha em atenção os limites de taxa para determinadas operações. Conheça os limites de largura de banda para determinados tipos de saída e siga as diretrizes de taxa de pedidos e distribuição de acesso. Tenha especial atenção à dimensionamento automático e à necessidade de aumentar gradualmente as taxas de pedidos para obter o melhor desempenho.

  • Ao processar erros:

    • Certifique-se de que a sua aplicação usa uma estratégia de repetição para evitar problemas devido a picos de tráfego elevados.

    • Tente novamente com uma nova ligação e, possivelmente, resolva novamente o nome do domínio. Isto ajuda a evitar a "persistência do servidor", em que uma nova tentativa tenta seguir o mesmo caminho e atinge o mesmo componente não saudável que a solicitação inicial atingiu.

  • Se a sua aplicação for sensível à latência, use pedidos protegidos. Os pedidos protegidos permitem-lhe repetir mais rapidamente e reduzir a latência final. Esta ação não reduz o prazo do seu pedido, o que pode fazer com que os pedidos expirem prematuramente. Para mais informações, consulte o artigo A cauda à escala.

  • Compreenda o nível de desempenho que os clientes esperam da sua aplicação. Estas informações ajudam a escolher uma opção de armazenamento e uma região quando cria novos contentores. Por exemplo, considere colocar os seus recursos de computação juntamente com os contentores do Cloud Storage para aplicações de estatísticas.

Localizações e opções de armazenamento de dados

Consulte os tópicos Classe de armazenamento e Localização do contentor para receber orientações sobre a melhor forma de armazenar os seus dados.

ACLs e controlo de acesso

  • Os pedidos do Cloud Storage referem-se a contentores e objetos pelos respetivos nomes. Como resultado, embora as ACLs impeçam que terceiros não autorizados operem em contentores ou objetos, um terceiro pode tentar pedidos com nomes de contentores ou objetos e determinar a respetiva existência observando as respostas de erro. Em seguida, pode ser possível que as informações nos nomes de contentores ou objetos sejam divulgadas. Se tiver preocupações acerca da privacidade dos nomes dos seus contentores ou objetos, deve tomar precauções adequadas, como:

    • Escolher nomes de contentores e objetos que sejam difíceis de adivinhar. Por exemplo, um contentor com o nome mybucket-gtbytul3 é suficientemente aleatório para que terceiros não autorizados não consigam adivinhar nem enumerar outros nomes de contentores a partir dele.

    • Evitar a utilização de informações confidenciais como parte dos nomes de contentores ou objetos. Por exemplo, em vez de dar o nome mysecretproject-prodbucket ao seu contentor, dê-lhe o nome somemeaninglesscodename-prod. Em algumas aplicações, pode querer manter metadados confidenciais em cabeçalhos personalizados do Cloud Storage, como x-goog-meta, em vez de codificar os metadados nos nomes dos objetos.

  • A utilização de grupos é preferível à indicação explícita de um grande número de utilizadores. Além de ser mais escalável, também oferece uma forma muito eficiente de atualizar o controlo de acesso para um grande número de objetos de uma só vez. Por último, é mais barato, uma vez que não precisa de fazer um pedido por objeto para alterar as ACLs.

  • Reveja e siga as práticas recomendadas de controlo de acesso.

  • O sistema de controlo de acesso do Cloud Storage inclui a capacidade de especificar que os objetos são legíveis publicamente. Certifique-se de que pretende que todos os objetos que escrever com esta autorização sejam públicos. Depois de "publicados", os dados na Internet podem ser copiados para muitos locais, pelo que é praticamente impossível recuperar o controlo de leitura de um objeto escrito com esta autorização.

  • O sistema de controlo de acesso do Cloud Storage inclui a capacidade de especificar que os contentores são graváveis publicamente. Embora a configuração de um contentor desta forma possa ser conveniente para vários fins, recomendamos que não use esta autorização. Esta pode ser usada indevidamente para distribuir conteúdo ilegal, vírus e outro software malicioso, e o proprietário do contentor é legal e financeiramente responsável pelo conteúdo armazenado nos respetivos contentores.

    Se precisar de disponibilizar conteúdo de forma segura a utilizadores que não tenham contas de utilizador, recomendamos que use URLs assinados. Por exemplo, com URLs assinados, pode fornecer um link para um objeto, e os clientes da sua aplicação não precisam de autenticar com o Cloud Storage para aceder ao objeto. Quando cria um URL assinado, controla o tipo (leitura, escrita, eliminação) e a duração do acesso.

Carregamentos de dados

  • Se usar callbacks XMLHttpRequest (XHR) para receber atualizações de progresso, não feche nem reabra a ligação se detetar que o progresso está parado. Ao fazê-lo, cria um ciclo de feedback positivo negativo durante períodos de congestionamento da rede. Quando a rede está congestionada, os callbacks XHR podem ficar em atraso atrás da atividade de confirmação (ACK/NACK) do fluxo de carregamento e fechar e reabrir a ligação quando isto acontece usa mais capacidade de rede exatamente no momento em que menos o pode fazer.

  • Para o tráfego de carregamento, recomendamos que defina tempos limite razoavelmente longos. Para uma boa experiência do utilizador final, pode definir um temporizador do lado do cliente que atualize a janela de estado do cliente com uma mensagem (por exemplo, "congestionamento da rede") quando a sua aplicação não recebe uma resposta XHR durante muito tempo. Não feche apenas a ligação e tente novamente quando isto acontecer.

  • Uma forma fácil e conveniente de reduzir a largura de banda necessária para cada pedido é ativar a compressão gzip. Embora isto exija tempo adicional da CPU para descomprimir os resultados, a compensação com os custos de rede torna-o geralmente muito vantajoso.

    Geralmente, um objeto carregado no formato gzip também pode ser publicado no formato gzip. No entanto, evite carregar conteúdo com content-encoding: gzip e um content-type comprimido, uma vez que tal pode levar a um comportamento inesperado.

  • Recomendamos que use carregamentos retomáveis, que lhe permitem retomar a transferência de dados mesmo quando uma falha de comunicação interrompeu o fluxo de dados. Também pode usar carregamentos multipartes da API XML para carregar partes de um ficheiro em paralelo, o que pode reduzir o tempo necessário para concluir o carregamento geral.

Eliminação de dados

Consulte o artigo Eliminar objetos para ver diretrizes e considerações sobre a eliminação de dados. Também pode usar funcionalidades para controlar os ciclos de vida dos dados para ajudar a proteger os seus dados contra eliminação por engano pelo software da aplicação ou pelos utilizadores.