Introdução à taxa de transferência provisionada no Azure Cosmos DB
APLICA-SE A: NoSQL MongoDB Cassandra Gremlin Tabela
O Azure Cosmos DB permite que você defina a taxa de transferência provisionada em seus bancos de dados e contêineres. Existem dois tipos de taxa de transferência provisionada, padrão (manual) ou dimensionamento automático. Este artigo fornece uma visão geral de como a taxa de transferência provisionada funciona.
Um banco de dados do Azure Cosmos DB é uma unidade de gerenciamento para um conjunto de contêineres. Uma base de dados é constituída por um conjunto de contentores independentes de esquemas. 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 dentro de uma região do Azure e é distribuído em todas as regiões do Azure associadas à sua conta do Azure Cosmos DB.
Com o 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 é exclusivamente reservada 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 é apoiada 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 usada com mais frequência. Você pode dimensionar elasticamente a taxa de transferência para um contêiner provisionando qualquer quantidade de taxa de transferência usando Unidades de Solicitação (RUs).
A taxa de transferência provisionada para um contêiner é distribuída uniformemente entre suas partições físicas e, supondo uma boa chave de partição que distribua 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 suportam a 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 uma partição quente ocorre quando uma partição lógica tem desproporcionalmente mais solicitações do que outros valores de chave de partição.
Quando ocorre limitação de taxa, você pode aumentar a taxa de transferência provisionada para todo o contêiner ou repetir as operações. Você também deve garantir que você escolha uma chave de partição que distribua uniformemente o armazenamento e o volume de solicitação. Para obter mais informações sobre particionamento, consulte Particionamento e dimensionamento horizontal no Azure Cosmos DB.
Recomendamos que você configure a taxa de transferência na granularidade do contêiner quando quiser um 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 o débito numa base de dados
Quando você provisiona a taxa de transferência em um banco de dados do Azure Cosmos DB, a taxa de transferência é compartilhada entre todos os contêineres (chamados contêineres de banco de dados compartilhados) no banco de dados. A única exceção ocorre se tiver especificado um débito aprovisionado em contentores específicos na base de dados. Compartilhar a taxa de transferência provisionada no nível de banco de dados entre seus contêineres é análogo à hospedagem de um banco de dados em um cluster de máquinas. Como todos os contêineres em um banco de dados compartilham os recursos disponíveis em uma máquina, você naturalmente não obtém 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 a 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 dentro 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 de:
- O número de contentores.
- A escolha de chaves de partição para vários contêineres.
- A distribuição da carga de trabalho em várias partições lógicas dos contêineres.
Recomendamos 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 quiser 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 distinto do Azure Cosmos DB.
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 em seu banco de dados do Azure Cosmos DB como um equivalente lógico, mas mais econômico e elástico, à capacidade de computação do cluster MongoDB ou Cassandra.
Todos os contêineres criados dentro de um banco de dados com taxa de transferência provisionada devem ser criados com uma chave de partição. Em qualquer momento, a taxa de transferência alocada para um contêiner dentro de um banco de dados é distribuída por todas as partições lógicas desse contêiner. Quando você tem contêineres que compartilham a taxa de transferência provisionada configurada em um banco de dados, não pode 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 à taxa. Quando a limitação de taxa ocorre, você pode aumentar a taxa de transferência para todo o banco de dados ou repetir as operações. Para obter mais informações sobre particionamento, consulte Partições lógicas.
Os contentores numa base de dados de débito partilhado partilham o débito (RU/s) alocado a essa base 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 escala automática mínima de 1000 RU/s (escala entre 100 e 1000 RU/s).
Nota
Em fevereiro de 2020, introduzimos uma alteração que lhe permite ter um máximo de 25 contentores numa base de dados de débito partilhado, o que permite ativar melhor a partilha do débito entre os contentores. Após os primeiros 25 contêineres, você pode adicionar mais contêineres ao banco de dados somente se eles forem provisionados com taxa de transferência dedicada, que é separada da taxa de transferência compartilhada do banco de dados.
Se sua conta do Azure Cosmos DB já contiver um banco de dados de taxa de transferência compartilhado com >contêineres =25, a conta e todas as outras contas na mesma assinatura do Azure estarão isentas dessa alteração. Entre em contato com o suporte ao produto se tiver comentários ou perguntas.
Se suas cargas de trabalho envolverem excluir e recriar todas as coleções em um banco de dados, é recomendável que você solte o banco de dados vazio e recrie 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 diferentes contêineres dentro de um banco de dados:
Definir taxa de transferência em um banco de dados e um contêiner
Você pode combinar os dois modelos. A taxa de transferência de provisionamento no banco de dados e no contêiner é permitida. 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 chamado Z com 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, certifique-se de habilitar a opção Provisionar taxa de transferência dedicada para essa opção de contêiner e configurar explicitamente as RUs "P" da taxa de transferência provisionada nesse 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 "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, D ou E varia. Não há SLAs para a 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. É apoiado por SLAs.
Nota
Um contêiner com taxa de transferência provisionada não pode ser convertido em 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. (Trabalhos de cópia de contêiner para APIs NoSQL, MongoDB e Cassandra ajudam nesse processo.)
Taxa de transferência de atualização em um banco de dados ou contêiner
Depois de criar um contêiner do Azure Cosmos DB ou um banco de dados, 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 Java SDK.
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 Java SDK.
O mínimo real de RU/s pode variar dependendo da configuração da sua conta. Para obter mais informações, consulte as Perguntas frequentes sobre dimensionamento automático.
Alterando a taxa de transferência provisionada
Você pode dimensionar a taxa de transferência provisionada de um contêiner ou banco de dados por meio do portal do Azure ou usando os SDKs:
- Container.ReplaceThroughputAsync no SDK do .NET.
- CosmosContainer.replaceThroughput no Java SDK.
Se você estiver reduzindo a taxa de transferência provisionada, poderá fazê-lo ao 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 está em andamento produz uma resposta HTTP 423 com uma mensagem de erro explicando que outra operação de dimensionamento está em andamento.
Saiba mais no artigo Práticas recomendadas para dimensionamento de taxa de transferência provisionada (RU/s).
Nota
Se você estiver planejando uma carga de trabalho de ingestão muito grande que exigirá um grande aumento na taxa de transferência provisionada, lembre-se de que a operação de dimensionamento não tem SLA e, como mencionado no parágrafo anterior, pode levar muito tempo quando o aumento for grande. Talvez você queira planejar com antecedência e iniciar o dimensionamento antes do início da carga de trabalho e usar os métodos abaixo para verificar o progresso.
Você pode verificar programaticamente o progresso do dimensionamento lendo a taxa de transferência provisionada atual e usando:
- ThroughputResponse.IsReplacePending no SDK do .NET.
- ThroughputResponse.isReplacePending() no Java SDK.
Você pode usar as métricas do Azure Monitor para exibir o histórico de taxa de transferência provisionada (RU/s) e armazenamento em um recurso.
Comparação de modelos
Esta tabela mostra uma comparação entre a taxa de transferência padrão (manual) de provisionamento em um banco de dados versus em um contêiner.
Parâmetro | Taxa de transferência padrão (manual) em um banco de dados | Rendimento 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 RU/s) | 400 RU/s. Pode ter até 25 contêineres sem mínimo de RU/s por contêiner. | 400 | Dimensionamento automático entre 100 - 1000 RU/s. Pode ter até 25 contêineres sem mínimo de RU/s por contêiner. | Dimensionamento automático entre 100 - 1000 RU/s. |
Mínimo de RU/s por contentor | -- | 400 | -- | Dimensionamento automático entre 100 - 1000 RU/s |
Máximo de RUs | Unlimited, na base de dados. | Sem limites, no contentor. | Unlimited, na base de dados. | Sem limites, no contentor. |
RUs atribuídas ou disponíveis para um contêiner específico | Sem garantias. As 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 exclusivamente reservadas para o contêiner. | Sem garantias. As 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 exclusivamente reservadas para o contêiner. |
Armazenamento máximo para um recipiente | Sem limites. | Ilimitado | Ilimitado | Ilimitado |
Taxa de transferência máxima por partição lógica de um contêiner | 10K RU/s | 10K RU/s | 10K RU/s | 10K RU/s |
Armazenamento máximo (dados + índice) por partição lógica de um contêiner | 20 GB | 20 GB | 20 GB | 20 GB |
Próximos passos
- Saiba mais sobre partições lógicas.
- Saiba como provisionar 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 de capacidade para uma migração para o Azure Cosmos DB? Você pode usar informações sobre seu cluster de banco de dados existente para planejamento de capacidade.
- Se tudo o que você sabe é o número de vcores e servidores em seu cluster de banco de dados existente, leia sobre como estimar unidades de solicitação usando vCores ou vCPUs
- Se você souber as taxas de solicitação típicas para sua carga de trabalho de banco de dados atual, leia sobre como estimar unidades de solicitação usando o planejador de capacidade do Azure Cosmos DB