Escalar de maneira elástica uma conta do Azure Cosmos DB for Apache Cassandra

APLICA-SE A: Cassandra

Há uma variedade de opções para explorar a natureza elástica do Azure Cosmos DB for Apache Cassandra. Para entender como dimensionar de forma eficaz no Azure Cosmos DB, é importante entender como provisionar a quantidade certa de unidades de solicitação (RU/s) para considerar as demandas de desempenho em seu sistema. Para saber mais sobre unidades de solicitação, consulte o artigo Unidades de solicitação.

Para a API for Cassandra, você pode recuperar o custo da Unidade de Solicitação para consultas individuais usando os SDKs do .NET e do Java. Isso é útil para determinar a quantidade de RU/s que você precisará provisionar no serviço.

Operações do banco de dados consomem Unidades de Solicitação

Limitação da taxa de manipulação (erros 429)

O Azure Cosmos DB retornará erros de taxa limitada (429) se os clientes consumirem mais recursos (RU/s) do que o valor que você provisionou. A API for Cassandra no Azure Cosmos DB converte essas exceções em erros de sobrecarga no protocolo nativo do Cassandra.

Se o sistema não for sensível à latência, poderá ser suficiente lidar com a limitação da taxa de transferência usando repetições. Consulte os exemplos de código Java para a versão 3 e a versão 4 dos drivers Java do Apache Cassandra para saber como tratar a limitação de taxa de forma transparente. Esses exemplos implementam uma versão personalizada da política de repetição do Cassandra padrão em Java. Você também pode usar a extensão do Spark para lidar com a limitação de taxa. Ao usar o Spark, siga nossas diretrizes sobre como Otimizar as configuração de taxa de transferência do conector do Spark.

Gerencie o dimensionamento

Se você precisar minimizar a latência, há um espectro de opções para gerenciar a escala e a taxa de transferência de provisionamento (RUs) na API for Cassandra:

As seções a seguir explicam as vantagens e desvantagens de cada abordagem. Em seguida, você pode decidir sobre a melhor estratégia para equilibrar as necessidades de dimensionamento do seu sistema, o custo geral e as necessidades de eficiência para a sua solução.

Use o Portal do Azure

Você pode escalar os recursos na conta do Azure Cosmos DB for Apache Cassandra usando o portal do Azure. Para saber mais, consulte o artigo sobre Taxa de transferência de provisionamento em contêineres e bancos de dados. Este artigo explica os benefícios relativos de definir a taxa de transferência em banco de dados ou contêineres no portal do Azure. Os termos "banco de dados" e "contêiner" mencionados nesses artigos correspondem, respectivamente, a "keyspace" e "tabela" na API for Cassandra.

A vantagem desse método é que ele é uma maneira simples e completa de gerenciar a capacidade de taxa de transferência no banco de dados. No entanto, a desvantagem é que, em muitos casos, sua abordagem de dimensionamento pode exigir que determinados níveis de automação sejam econômicos e de alto desempenho. As próximas seções explicam os cenários e os métodos relevantes.

Use o painel de controle

A API do Azure Cosmos DB para Cassandra permite ajustar a taxa de transferência de forma programática usando nossos vários recursos de painel de controle. Consulte os artigos do Azure Resource Manager, PowerShell e Azure CLI para obter orientações e exemplos.

A vantagem desse método é que você pode automatizar a expansão ou redução dos recursos com base em um temporizador para considerar a atividade de pico ou períodos de baixa atividade. Dê uma olhada em nosso exemplo aqui para saber como fazer isso usando o Azure Functions e o PowerShell.

Uma desvantagem dessa abordagem é que talvez você não possa responder a necessidades de alteração de escala imprevisíveis em tempo real. Em vez disso, talvez seja necessário aproveitar o contexto do aplicativo em seu sistema, no nível do cliente/SDK ou usando o dimensionamento automático.

Use consultas CQL com um SDK específico

Você pode dimensionar o sistema dinamicamente com código executando os comandos CQL ALTER para o banco de dados ou contêiner fornecido.

A vantagem dessa abordagem é que ela permite que você responda às necessidades de dimensionamento dinamicamente e de uma maneira personalizada adequada ao seu aplicativo. Com essa abordagem, você ainda pode aproveitar os encargos e as tarifas de RU/s padrão. Se as necessidades de dimensionamento do seu sistema forem principalmente previsíveis (cerca de 70% ou mais), usar o SDK com CQL pode ser um método mais econômico de dimensionamento automático do que o uso do recurso de dimensionamento automático. A desvantagem dessa abordagem é que ela pode ser bastante complexa para implementar repetições, enquanto a limitação de taxa pode aumentar a latência.

Use a taxa de transferência provisionada de dimensionamento automático

Além da maneira padrão (manual) ou programática de provisionar a taxa de transferência, você também pode configurar contêineres do Azure Cosmos DB na taxa de transferência provisionada de dimensionamento automático. O dimensionamento automático será escalado de forma automática e instantânea para suas necessidades de consumo dentro dos intervalos de RU especificados sem comprometer os SLAs. Para saber mais, confira o artigo Criar contêineres e bancos de dados do Azure Cosmos DB no dimensionamento automático.

A vantagem dessa abordagem é que ela é a maneira mais fácil de gerenciar as necessidades de dimensionamento em seu sistema. Ela não aplicará a limitação de taxa dentro dos intervalos de RU configurados. A desvantagem é que, se as necessidades de dimensionamento em seu sistema forem previsíveis, o dimensionamento automático poderá ser uma maneira menos econômica de lidar com suas necessidades de dimensionamento do que usar as abordagens de nível personalizadas do painel de controle ou do SDK mencionadas acima.

Para definir ou alterar a taxa de transferência máxima (RUs) para dimensionamento automático usando CQL, use o seguinte (substituindo adequadamente o nome de keyspace/tabela):

# to set max throughput (RUs) for autoscale at keyspace level:
create keyspace <keyspace name> WITH cosmosdb_autoscale_max_throughput=5000;

# to alter max throughput (RUs) for autoscale at keyspace level:
alter keyspace <keyspace name> WITH cosmosdb_autoscale_max_throughput=4000;

# to set max throughput (RUs) for autoscale at table level:
create table <keyspace name>.<table name> (pk int PRIMARY KEY, ck int) WITH cosmosdb_autoscale_max_throughput=5000;

# to alter max throughput (RUs) for autoscale at table level:
alter table <keyspace name>.<table name> WITH cosmosdb_autoscale_max_throughput=4000;

Próximas etapas