Introdução à taxa de transferência provisionada do Azure Cosmos DB

APLICA-SE AO: NoSQL MongoDB Cassandra Gremlin Table

O Azure Cosmos DB permite que você defina a taxa de transferência nos seus banco de dados e contêineres. Há dois tipos de taxa de transferência provisionada, padrão (manual) ou dimensionamento automático. Este artigo mostra uma visão geral de como funciona a taxa de transferência provisionada.

Um banco de dados do Azure Cosmos DB é uma unidade de gerenciamento para um conjunto de contêineres. Um banco de dados é composto por um conjunto de contêineres independentes de esquema. Um contêiner do Azure Cosmos DB é a unidade de escalabilidade para taxa de transferência e armazenamento. Um contêiner é particionado horizontalmente em um conjunto de máquinas em uma região do Azure e é distribuído em todas as regiões do Azure associadas à sua conta do Azure Cosmos DB.

No Azure Cosmos DB, você pode provisionar a taxa de transferência em duas granularidades:

  • Contêineres do Azure Cosmos DB
  • Bancos de dados do Azure Cosmos DB

Definir taxa de transferência em um contêiner

A taxa de transferência provisionada em um contêiner do Azure Cosmos DB é reservada exclusivamente para esse contêiner. O contêiner recebe a taxa de transferência provisionada o tempo todo. A taxa de transferência provisionada em um contêiner é respaldada financeiramente por SLAs. Para saber como configurar a taxa de transferência padrão (manual) em um contêiner, consulte Provisionar taxa de transferência em um contêiner do Azure Cosmos DB. Para saber como configurar a taxa de transferência de dimensionamento automático em um contêiner, consulte Provisionar taxa de transferência de dimensionamento automático.

A configuração da taxa de transferência provisionada em um contêiner é a opção frequentemente utilizada. É possível dimensionar de forma elástica a taxa de transferência de um contêiner, provisionando qualquer quantidade de taxa de transferência usando RUs ( Unidades de Solicitação).

A taxa de transferência provisionada para um contêiner é distribuída uniformemente entre suas partições físicas e, pressupondo que haja uma boa chave de partição que distribui as partições lógicas uniformemente entre as partições físicas, a taxa de transferência também é distribuída uniformemente entre todas as partições lógicas do contêiner. Não é possível especificar seletivamente a taxa de transferência para partições lógicas. Como uma ou mais partições lógicas de um contêiner são hospedadas por uma partição física, as partições físicas pertencem exclusivamente ao contêiner e dão suporte à taxa de transferência provisionada no contêiner.

Se a carga de trabalho em execução em uma partição lógica consumir mais do que a taxa de transferência alocada para a partição física subjacente, é possível que suas operações sejam limitadas por taxa. O que é conhecido como partição ativa ocorre quando uma partição lógica tem desproporcionalmente mais solicitações do que outros valores de chave de partição.

Quando ocorrer uma limitação da taxa, você poderá aumentar a taxa de transferência provisionada de todo o contêiner ou tentar novamente as operações. Você também deve garantir a escolha de uma chave de partição que distribua o armazenamento e o volume de solicitação de maneira precisa. Para obter mais informações sobre particionamento, confira Partição e escala horizontal no Azure Cosmos DB.

É recomendável configurar a taxa de transferência na granularidade do contêiner quando você quiser desempenho previsível para o contêiner.

A imagem a seguir mostra como uma partição física hospeda uma ou mais partições lógicas de um contêiner:

Partição física que hospeda uma ou mais partições lógicas de um contêiner

Definir taxa de transferência em um banco de dados

Ao provisionar a taxa de transferência em um banco de dados do Azure Cosmos DB, a taxa de transferência será compartilhada entre todos os contêineres (denominados contêineres de banco de dados compartilhados) no banco de dados. Uma exceção é se você especificou uma taxa de transferência provisionada em contêineres específicos no banco de dados. O compartilhamento da taxa de transferência provisionada no banco de dados entre seus contêineres é análogo à hospedagem de um banco de dados em um cluster de computadores. Como todos os contêineres de um banco de dados compartilham os recursos disponíveis em um computador, é normal que você não tenha um desempenho previsível em nenhum contêiner específico. Para saber como configurar a taxa de transferência provisionada em um banco de dados, consulte Configurar taxa de transferência provisionada em um banco de dados do Azure Cosmos DB. Para saber como configurar a taxa de transferência de dimensionamento automático em um banco de dados, consulte Provisionar taxa de transferência de dimensionamento automático.

Como todos os contêineres do banco de dados compartilham a taxa de transferência provisionada, o Azure Cosmos DB não fornece nenhuma garantia de taxa de transferência previsível para um contêiner específico nesse banco de dados. A parte da taxa de transferência que um contêiner específico pode receber depende do seguinte:

  • Número de contêineres.
  • Escolha de chaves de partição para vários contêineres.
  • Da distribuição da carga de trabalho entre várias partições lógicas dos contêineres.

É recomendável que você configure a taxa de transferência em um banco de dados quando quiser compartilhar a taxa de transferência em vários contêineres, mas não quer dedicar a taxa de transferência a nenhum contêiner específico.

Os exemplos a seguir demonstram onde é preferível provisionar a taxa de transferência no nível do banco de dados:

  • Compartilhar a taxa de transferência provisionada de um banco de dados em um conjunto de contêineres é útil para um aplicativo multilocatário. Cada usuário pode ser representado por um contêiner do Azure Cosmos DB distinto.

  • Compartilhar a taxa de transferência provisionada de um banco de dados em um conjunto de contêineres é útil quando você migra um banco de dados NoSQL, como MongoDB ou Cassandra, hospedado em um cluster de VMs ou de servidores físicos locais para o Azure Cosmos DB. Pense na taxa de transferência provisionada configurada no banco de dados do Azure Cosmos DB como um equivalente lógico, porém mais econômico e elástico, à capacidade de computação do cluster do MongoDB ou do Cassandra.

Todos os contêineres criados em um banco de dados com taxa de transferência provisionada devem ser criados com uma chave de partição. A qualquer momento, a taxa de transferência alocada a um contêiner dentro de um banco de dados será distribuída entre todas as partições lógicas desse contêiner. Quando houver contêineres compartilhando a taxa de transferência provisionada configurada em um banco de dados, não será possível aplicar seletivamente a taxa de transferência a um contêiner específico ou a uma partição lógica.

Se a carga de trabalho em uma partição lógica consumir mais do que a taxa de transferência alocada para uma partição lógica específica, suas operações serão limitadas por taxa. Quando ocorrer uma limitação da taxa, você poderá aumentar a taxa de transferência de todo o banco de dados ou tentar novamente as operações. Para saber mais sobre particionamento, confira Partições lógicas.

Os contêineres em um banco de dados de produtividade compartilhado também compartilham a taxa de transferência (RU/s) alocada para esse banco de dados. Com a taxa de transferência provisionada padrão (manual), você pode ter até 25 contêineres com um mínimo de 400 RU/s no banco de dados. Com a taxa de transferência provisionada de dimensionamento automático, você pode ter até 25 contêineres em um banco de dados com dimensionamento automático de no mínimo 1.000 RU/s (dimensiona entre 100 e 1.000 RU/s).

Observação

Em fevereiro de 2020, apresentamos uma mudança que permite que você tenha um máximo de 25 contêineres em um banco de dados de taxa de transferência compartilhada, o que permite melhor o compartilhamento de taxa de transferência entre os contêineres. Após os 25 primeiros contêineres, você poderá adicionar mais contêineres ao banco de dados somente se eles estiverem provisionados com taxa de transferência dedicada, que é separada da produtividade compartilhada do banco de dados.
Se sua conta de Azure Cosmos DB já contiver um banco de dados de taxa de transferência compartilhado com >=25 contêineres, a conta e todas as outras contas na mesma assinatura do Azure serão isentas dessa alteração. Entre em contato com o suporte ao produto se você tiver comentários ou dúvidas.

Se as suas cargas de trabalho envolverem a exclusão e a recriação de todas as coleções em um banco de dados, é recomendável eliminar o banco de dados vazio e recriar um novo banco de dados antes da criação da coleção. A imagem a seguir mostra como uma partição física pode hospedar uma ou mais partições lógicas que pertencem a contêineres diferentes dentro de um banco de dados:

Partição física que hospeda uma ou mais partições lógicas que pertencem a contêineres diferentes

Definir taxa de transferência em um banco de dados e um contêiner

É possível combinar os dois modelos. É permitido provisionar a taxa de transferência tanto no banco de dados como no contêiner. O exemplo a seguir mostra como provisionar a taxa de transferência provisionada padrão (manual) em um banco de dados do Azure Cosmos DB e em um contêiner:

  • Você pode criar um banco de dados do Azure Cosmos DB chamadoZ com a taxa de transferência provisionada padrão (manual) de RUs "K".

  • Em seguida, crie cinco contêineres chamados A, B, C, D e E no banco de dados. Ao criar o contêiner B, habilite a opção Provisionar taxa de transferência dedicada para esse contêiner e configure explicitamente RUs "P" de taxa de transferência provisionada neste contêiner. Você pode configurar a taxa de transferência compartilhada e dedicada somente ao criar o banco de dados e o contêiner.

    Definir a taxa de transferência no nível do contêiner

  • A taxa de transferência de "K" RU/s é compartilhada entre os quatro contêineres A, C, D e E. A quantidade exata de taxa de transferência disponível para A, C, Dou E varia. Não há SLAs para taxa de transferência de cada contêiner individual.

  • O contêiner chamado B tem a garantia de obter a taxa de transferência "P" RU/s o tempo todo. É respaldado por SLAs.

Observação

Um contêiner com taxa de transferência provisionada não pode ser convertido para o contêiner de banco de dados compartilhado. Por outro lado, um contêiner de banco de dados compartilhado não pode ser convertido para ter uma taxa de transferência dedicada. Você precisará mover os dados para um contêiner com a configuração de taxa de transferência desejada. (Os trabalhos de cópia de contêiner para APIs NoSQL, MongoDB e Cassandra ajudam nesse processo.)

Atualizar a taxa de transferência em um banco de dados ou um contêiner

Depois de criar um contêiner ou banco de dados do Azure Cosmos DB, você pode atualizar a taxa de transferência provisionada. Não há limite para a taxa de transferência máxima provisionada que você pode configurar no banco de dados ou no contêiner.

Taxa de transferência provisionada atual

Você pode recuperar a taxa de transferência provisionada de um contêiner ou banco de dados no portal do Azure ou usando os SDKs:

A resposta desses métodos também contém a taxa de transferência mínima provisionada para o contêiner ou banco de dados:

A RU/s mínima real pode variar dependendo da configuração de sua conta. Para obter mais informações, consulte Perguntas frequentes sobre dimensionamento automático.

Mudar a taxa de transferência provisionada

Você pode escalar a taxa de transferência provisionada de um contêiner ou banco de dados no portal do Azure ou usando os SDKs:

Se você estiver reduzindo a taxa de transferência provisionada, poderá fazer isso até o mínimo.

Se você estiver aumentando a taxa de transferência provisionada, na maioria das vezes, a operação será instantânea. No entanto, há casos em que a operação pode levar mais tempo devido às tarefas do sistema para provisionar os recursos necessários. Nesse caso, uma tentativa de modificar a taxa de transferência provisionada enquanto essa operação estiver em andamento gera uma resposta HTTP 423 com uma mensagem de erro explicando que outra operação de escalonamento está em andamento.

Saiba mais no artigo Práticas recomendadas para dimensionar a taxa de transferência provisionada (RU/s).

Observação

Se você estiver planejando uma carga de trabalho de ingestão muito grande que exigirá um grande aumento na taxa de transferência provisionada, tenha em mente que a operação de dimensionamento não tem SLA e, como mencionado no parágrafo anterior, pode levar bastante tempo quando o aumento for grande. Talvez você queira planejar com antecedência e iniciar a colocação em escala antes que a carga de trabalho inicie, usando os métodos abaixo para verificar o progresso.

Você pode verificar o progresso da colocação em escala programaticamente lendo a taxa de transferência provisionada atual e usando:

Você pode usar as métricas do Azure Monitor para exibir o histórico de taxa de transferência provisionada (RU/S) e de armazenamento referente a um recurso.

Comparação de modelos

Esta tabela mostra uma comparação entre a taxa de transferência padrão de provisionamento (manual) em um banco de dados em relação a um contêiner.

Parâmetro Taxa de transferência padrão (manual) em um banco de dados Taxa de transferência padrão (manual) em um contêiner Taxa de transferência de dimensionamento automático em um banco de dados Taxa de transferência de dimensionamento automático em um contêiner
Ponto de entrada (mínimo de RU/s) 400 RU/s. Pode ter até 25 contêineres sem o mínimo de RU/s por contêiner. 400 Dimensionamento automático entre 100 e 1.000 RU/s Pode ter até 25 contêineres sem o mínimo de RU/s por contêiner. Dimensionamento automático entre 100 e 1.000 RU/s
Mínimo de RUs por contêiner -- 400 -- Dimensionamento automático entre 100 e 1.000 RU/s
Máximo de RUs Ilimitado, no banco de dados. Ilimitado, no contêiner. Ilimitado, no banco de dados. Ilimitado, no contêiner.
RUs atribuídas ou disponíveis para um contêiner específico Sem garantias. RUs atribuídas a um determinado contêiner dependem das propriedades. As propriedades podem ser a escolha de chaves de partição de contêineres que compartilham a taxa de transferência, a distribuição da carga de trabalho e o número de contêineres. Todas as RUs configuradas no contêiner são reservadas exclusivamente ao contêiner. Sem garantias. RUs atribuídas a um determinado contêiner dependem das propriedades. As propriedades podem ser a escolha de chaves de partição de contêineres que compartilham a taxa de transferência, a distribuição da carga de trabalho e o número de contêineres. Todas as RUs configuradas no contêiner são reservadas exclusivamente ao contêiner.
Armazenamento máximo para um contêiner Ilimitado. Ilimitado Ilimitado Ilimitado
Taxa de transferência máxima por partição lógica de um contêiner 10 K RU/s 10 K RU/s 10 K RU/s 10 K RU/s
Taxa de transferência máxima (dados + índice) por partição lógica de um contêiner 20 GB 20 GB 20 GB 20 GB

Próximas etapas