Diretrizes de taxa de solicitação e distribuição de acesso

O Cloud Storage é um serviço altamente escalonável que usa a tecnologia de escalonamento automático para atingir taxas de solicitação muito altas. Veja nesta página as diretrizes para otimizar o escalonamento e o desempenho oferecidos pelo Cloud Storage.

Escalonamento automático

O Cloud Storage é um serviço multilocatário. Isso significa que os usuários compartilham o mesmo grupo de recursos subjacentes. Para aproveitar ao máximo esses recursos compartilhados, os intervalos têm uma capacidade de E/S inicial de cerca de 1.000 solicitações de gravação e 5.000 solicitações de leitura por segundo. Isso totaliza uma média de 2,5 PB de gravação e 13 PB de leitura por mês para objetos de 1 MB. À medida que a taxa de solicitação de um determinado intervalo cresce, o Cloud Storage aumenta automaticamente a capacidade de E/S desse intervalo, distribuindo a carga de solicitação por vários servidores.

Tempo de redistribuição da carga

À medida que um intervalo se aproxima do limite de capacidade de E/S, o Cloud Storage geralmente leva alguns minutos para detectar e redistribuir a carga entre mais servidores. Consequentemente, se a taxa de solicitação no intervalo aumentar mais rápido do que a capacidade do Cloud Storage de executar a redistribuição, você encontrará limites temporários, especificamente, maior latência e taxas de erro. Aumentar a taxa de solicitação nos intervalos gradualmente, conforme descrito abaixo, evita essa latência e esses erros.

Indexação de chaves de objetos

O Cloud Storage é compatível com a listagem consistente de objetos, o que permite aos usuários executar fluxos de trabalho de processamento de dados com facilidade. Para fornecer uma listagem consistente de objetos, o Cloud Storage mantém um índice de chaves de objetos de cada intervalo. Esse índice é armazenado em ordem lexicográfica e é atualizado sempre que os objetos são gravados ou excluídos em um intervalo. Se você adicionar e excluir objetos das chaves contidas em uma pequena faixa do índice, aumentará naturalmente as chances de contenção.

O Cloud Storage detecta essa contenção e redistribui automaticamente a carga da faixa do índice afetada. Essa redistribuição é feita por vários servidores. De modo semelhante ao escalonamento da capacidade de E/S de um intervalo, quando uma nova faixa do índice é acessada, como na gravação de objetos com um prefixo novo, é necessário aumentar gradualmente a taxa de solicitações, conforme descrito abaixo. Se você não fizer isso, o resultado poderá ser taxas de latência e erro temporariamente maiores.

Práticas recomendadas

Nas seções a seguir, descrevemos as práticas recomendadas para aumentar a taxa de solicitação, escolher chaves de objetos e distribuir solicitações, a fim de evitar limites temporários nos intervalos.

Aumentar gradualmente a taxa de solicitação

Para garantir que o escalonamento automático do Cloud Storage sempre ofereça o melhor desempenho, é necessário aumentar gradualmente a taxa de solicitação de um intervalo. Para isso, esse intervalo precisa de uma nova faixa de chaves de objetos ou não pode ter uma taxa de solicitação alta por várias semanas. Se a taxa de solicitação for menor que 1.000 solicitações de gravação ou 5.000 solicitações de leitura por segundo, não será necessário aumentá-la. Se a taxa de solicitação esperada ultrapassar esses limiares, será necessário começar com uma taxa de solicitação abaixo ou perto do limiar e, depois, dobrá-la em, no máximo, a cada 20 minutos.

Se você se deparar com problemas, como o aumento das taxas de latência ou erro, pause o aumento ou reduza a taxa de solicitação temporariamente, a fim de dar ao Cloud Storage mais tempo para escalonar o intervalo. Use a retirada exponencial para realizar as solicitações novamente após receber erros com os códigos de resposta 5xx ou 429 do Cloud Storage.

Usar uma convenção de nomenclatura que distribua a carga uniformemente pelas faixas de chaves

O escalonamento automático de uma faixa do índice pode ser desacelerado ao usar nomes sequenciais, como chaves de objeto baseadas em uma sequência de números ou carimbo de data/hora. Isso se deve à mudança constante das solicitações para novas faixas do índice, o que torna a redistribuição da carga mais difícil e menos eficaz.

Para manter uma taxa de solicitação alta, evite usar nomes sequenciais. O uso de nomes de objetos completamente aleatórios resultará em uma melhor distribuição da carga. Se você quiser usar números ou carimbos de data/hora sequenciais como parte dos nomes dos objetos, torne-os aleatórios adicionando um valor de hash antes do número ou carimbo de data/hora sequencial.

Por exemplo, se os nomes de objeto originais que você quer usar são:

my-bucket/2016-05-10-12-00-00/file1
my-bucket/2016-05-10-12-00-00/file2
my-bucket/2016-05-10-12-00-01/file3
...

Você pode calcular o hash MD5 do nome original do objeto e adicionar os primeiros seis caracteres do hash como prefixo. Os novos nomes de objeto serão:

my-bucket/2fa764-2016-05-10-12-00-00/file1
my-bucket/5ca42c-2016-05-10-12-00-00/file2
my-bucket/6e9b84-2016-05-10-12-00-01/file3
...

Aleatoriedade após um prefixo comum é eficaz sob o prefixo

A string aleatória não precisa necessariamente estar no início do nome do objeto. Adicionar a string aleatória após um prefixo comum também permitirá que o escalonamento automático funcione. No entanto, o efeito é limitado a esse prefixo, sem considerar o restante do intervalo.

Por exemplo:

my-bucket/images/animals/4ce4c6af-6d27-4fa3-8a91-5701a8552705/1.jpg
my-bucket/images/animals/9a495e72-1d85-4637-a243-cbf3e4a90ae7/2.jpg
...
my-bucket/images/landscape/585356ac-ce89-47a8-bdd2-78a86b58fee6/1.jpg
my-bucket/images/landscape/2550ae5b-395e-4243-a29b-bbf5aece60ef/2.jpg
...
my-bucket/images/clouds/1.jpg
my-bucket/images/clouds/2.jpg
...

A nomeação acima permite um escalonamento automático eficaz de objetos em images/animals e images/landscape, mas não em images/clouds.

Aleatoriedade após prefixos sequenciais não é tão eficaz

Como mencionado acima, o uso de uma string aleatória após um prefixo comum só ajuda no escalonamento automático sob esse prefixo. Quando as solicitações mudam para um novo prefixo, pode não ser mais possível se beneficiar dos efeitos anteriores do escalonamento automático. Isso é um problema principalmente quando os prefixos seguem um padrão sequencial.

Por exemplo, se você gravar arquivos sob um novo prefixo com base no carimbo de data/hora a cada hora:

my-bucket/2016-05-10-00/cf9a7b95-0d2e-4466-9596-840ff388ddbd
my-bucket/2016-05-10-00/f1e16a88-16b8-4c66-ba66-a225c87be80c
my-bucket/2016-05-10-00/646d8272-4a88-4dc2-b2d4-d537c778df41
...
my-bucket/2016-05-10-01/bdcba6de-ac25-4c27-8550-0d08f249e69d
my-bucket/2016-05-10-01/a32c867c-09a9-4d65-9668-ddd4ebe4138b
my-bucket/2016-05-10-01/d619485c-5243-4a4e-8ef3-0f7e1d26ce1d
...

Com o escalonamento automático, é possível aumentar a taxa de gravação sob um prefixo ao longo do tempo. No entanto, a taxa de gravação é redefinida no início de cada hora. Isso resulta em uma taxa de gravação abaixo do ideal e em aumentos periódicos na latência e na taxa de erro. Se você precisa gravar prefixos diferentes ao longo do tempo, verifique se os novos prefixos estão distribuídos uniformemente em toda a faixa de chaves para evitar esse problema.

Reordenar operações em massa para distribuir a carga uniformemente pelas faixas de chaves

Há situações em que o ideal é fazer um upload ou uma exclusão de dados em massa no Cloud Storage. Em ambos os casos, talvez você não tenha o controle dos nomes dos objetos. No entanto, é possível controlar a ordem em que os objetos são enviados ou excluídos para ter a maior taxa de gravação ou exclusão possível.

Para fazer isso, você precisa distribuir os uploads ou as exclusões por vários prefixos. Por exemplo, se você tiver muitas pastas e muitos arquivos em cada uma delas, uma boa estratégia é fazer o upload em paralelo de várias pastas e fazer o upload de arquivos e pastas escolhidos aleatoriamente. Assim, o sistema pode distribuir a carga de maneira mais uniforme em toda a faixa de chaves. Isso possibilita alcançar uma taxa de solicitação alta após o aumento inicial.

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

Enviar comentários sobre…

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