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:
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:
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.
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:
- Container.ReadThroughputAsync no SDK do .NET.
- CosmosContainer.readThroughput no SDK do Java.
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:
- ThroughputResponse.MinThroughput no SDK do .NET.
- ThroughputResponse.getMinThroughput() no SDK do Java.
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:
- Container.ReplaceThroughputAsync no SDK do .NET.
- CosmosContainer.replaceThroughput no SDK do Java.
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:
- ThroughputResponse.IsReplacePending no SDK do .NET.
- ThroughputResponse.isReplacePending() no SDK do Java.
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
- Saiba mais sobre partições lógicas.
- Saiba como provisionar a taxa de transferência padrão (manual) em um contêiner do Azure Cosmos DB.
- Saiba como provisionar a taxa de transferência padrão (manual) em um banco de dados do Azure Cosmos DB.
- Saiba como provisionar a taxa de transferência de dimensionamento automático em um banco de dados ou contêiner do Azure Cosmos DB.
- Tentando fazer o planejamento da capacidade para uma migração para o Azure Cosmos DB? Você pode usar informações sobre o cluster de banco de dados existente para fazer isso.
- Se você sabe apenas o número de vCores e servidores no cluster de banco de dados existente, leia sobre como estimar unidades de solicitação com vCores ou vCPUs
- Se souber as taxas de solicitação típicas da carga de trabalho do banco de dados atual, leia sobre como estimar unidades de solicitação usando o planejador de capacidade do Azure Cosmos DB