Leitura do feed de alterações do Azure Cosmos DB

APLICA-SE A: NoSQL

Pode trabalhar com o feed de alterações do Azure Cosmos DB com um modelo push ou um modelo pull. Com um modelo push, o processador de feed de alterações envia trabalho para um cliente que tem lógica de negócio para processar este trabalho. No entanto, a complexidade na verificação do trabalho e do estado de armazenamento do último trabalho processado é processada no processador do feed de alterações.

Com um modelo pull, o cliente tem de solicitar o trabalho do servidor. Neste caso, o cliente não só tem lógica de negócio para o processamento de trabalho, como também armazena o estado do último trabalho processado, processa o balanceamento de carga em vários clientes, o processamento de trabalhos em paralelo e o processamento de erros.

Ao ler a partir do feed de alterações do Azure Cosmos DB, normalmente recomendamos que utilize um modelo push porque não terá de se preocupar com:

  • Consultar o feed de alterações para futuras alterações.
  • Estado de armazenamento da última alteração processada. Se estiver a ler a partir do processador do feed de alterações, o estado é armazenado automaticamente num contentor de concessão.
  • Balanceamento de carga em vários clientes que consomem alterações. Por exemplo, se um cliente não conseguir acompanhar o processamento de alterações e outro tiver capacidade disponível.
  • A processar erros. Por exemplo, a repetição automática de alterações falhadas que não foram processadas corretamente após uma exceção não processada no código ou um problema de rede transitório.

A maioria dos cenários que utilizam o feed de alterações do Azure Cosmos DB utilizará uma das opções de modelo push. No entanto, existem alguns cenários em que poderá querer o controlo de baixo nível adicional do modelo Pull. Incluem-se:

  • Ler alterações a partir de uma chave de partição específica
  • Controlar o ritmo a que o cliente recebe alterações para processamento
  • Fazer uma leitura única dos dados existentes no feed de alterações (por exemplo, para fazer uma migração de dados)

Ler o feed de alterações com um modelo push

Utilizar um modelo push é a forma mais fácil de ler a partir do feed de alterações. Existem duas formas de ler a partir do feed de alterações com um modelo push: Funções do Azure acionadores do Azure Cosmos DB e o processador do feed de alterações. Funções do Azure utiliza o processador do feed de alterações nos bastidores, pelo que estas são ambas formas semelhantes de ler o feed de alterações. Pense Funções do Azure como simplesmente uma plataforma de alojamento para o processador de feed de alterações, não uma forma totalmente diferente de ler o feed de alterações.

Funções do Azure

Funções do Azure é a opção mais simples se estiver apenas a começar a utilizar o feed de alterações. Devido à sua simplicidade, é também a opção recomendada para a maioria dos casos de utilização do feed de alterações. Quando cria um Funções do Azure acionador para o Azure Cosmos DB, seleciona o contentor a ligar e a Função do Azure é acionada sempre que existir uma alteração no contentor. Uma vez que Funções do Azure utiliza o processador de feed de alterações em segundo plano, paraleliza automaticamente o processamento de alterações nas partições do contentor.

Desenvolver com Funções do Azure é uma experiência fácil e pode ser mais rápido do que implementar o processador do feed de alterações por conta própria. Os acionadores podem ser criados com o portal Funções do Azure ou através de programação com SDKs. O Visual Studio e o VS Code fornecem suporte para escrever Funções do Azure e pode até utilizar a CLI de Funções do Azure para desenvolvimento entre plataformas. Pode escrever e depurar o código no seu ambiente de trabalho e, em seguida, implementar a função com um botão. Veja Computação de bases de dados sem servidor com Funções do Azure e Utilizar o feed de alterações com Funções do Azure artigos para saber mais.

Biblioteca do processador de feed de alterações

O processador do feed de alterações dá-lhe mais controlo sobre o feed de alterações e continua a ocultar a maior complexidade. A biblioteca do processador do feed de alterações segue o padrão de observador, onde a função de processamento é chamada pela biblioteca. O processador do feed de alterações irá verificar automaticamente a existência de alterações e, se forem encontradas alterações, "empurre-as" para o cliente. Se tiver um feed de alterações de débito elevado, pode instanciar vários clientes para ler o feed de alterações. O processador do feed de alterações irá dividir automaticamente a carga entre os diferentes clientes. Não terá de implementar nenhuma lógica para o balanceamento de carga em vários clientes ou qualquer lógica para manter o estado de concessão.

O processador do feed de alterações garante uma entrega "pelo menos uma vez" de todas as alterações. Por outras palavras, se utilizar o processador do feed de alterações, a função de processamento será chamada com êxito para cada item no feed de alterações. Se existir uma exceção não processada na lógica de negócio na função de processamento, as alterações falhadas serão repetidas até serem processadas com êxito. Para impedir que o processador do feed de alterações fique "bloqueado" ao repetir continuamente as mesmas alterações, adicione lógica na função de processamento para escrever documentos, após exceção, numa fila de letras não entregues. Saiba mais sobre o processamento de erros.

No Funções do Azure, a recomendação para processar erros é a mesma. Deve continuar a adicionar lógica no código delegado para escrever documentos, após exceção, numa fila de letras não entregues. No entanto, se existir uma exceção não processada na função do Azure, a alteração que gerou a exceção não será repetida automaticamente. Se existir uma exceção não processada na lógica de negócio, a Função do Azure avançará para o processamento da próxima alteração. A Função do Azure não repetirá a mesma alteração falhada.

Tal como Funções do Azure, é fácil desenvolver com a biblioteca do processador do feed de alterações. No entanto, é responsável pela implementação de um ou mais anfitriões para o processador do feed de alterações. Um anfitrião é uma instância de aplicação que utiliza o processador do feed de alterações para escutar as alterações. Embora Funções do Azure tenha capacidades de dimensionamento automático, é responsável por dimensionar os anfitriões. Para saber mais, veja utilizar o processador do feed de alterações. A biblioteca do processador do feed de alterações faz parte do SDK V3 do Azure Cosmos DB.

Ler o feed de alterações com um modelo pull

O modelo pull do feed de alterações permite-lhe consumir o feed de alterações ao seu próprio ritmo. As alterações têm de ser pedidas pelo cliente e não existem consultas automáticas para alterações. Se quiser "marcar" permanentemente a última alteração processada (semelhante ao contentor de concessão do modelo push), terá de guardar um token de continuação.

Ao utilizar o modelo pull do feed de alterações, obtém um controlo de nível mais baixo do feed de alterações. Ao ler o feed de alterações com o modelo Pull, tem três opções:

  • Ler alterações para um contentor inteiro
  • Ler alterações para um FeedRange específico
  • Ler alterações para um valor de chave de partição específico

Pode paralelizar o processamento de alterações em vários clientes, tal como pode fazer com o processador do feed de alterações. No entanto, o modelo Pull não processa automaticamente o balanceamento de carga entre clientes. Quando utilizar o modelo Pull para paralelizar o processamento do feed de alterações, obterá primeiro uma lista de FeedRanges. Um FeedRange abrange um intervalo de valores de chave de partição. Terá de ter um processo de orquestrador que obtenha FeedRanges e os distribua entre as suas máquinas. Em seguida, pode utilizar estes FeedRanges para que vários computadores leiam o feed de alterações em paralelo.

Não existe nenhuma garantia de entrega "pelo menos uma vez" incorporada com o modelo Pull. O modelo Pull dá-lhe um controlo de baixo nível para decidir como pretende lidar com erros.

Feed de alterações nas APIs para Cassandra e MongoDB

A funcionalidade de feed de alterações é apresentada como fluxos de alteração na API para MongoDB e Consulta com predicado na API para Cassandra. Para saber mais sobre os detalhes de implementação da API para MongoDB, veja Change streams in the Azure Cosmos DB for MongoDB (Alterar fluxos no Azure Cosmos DB para MongoDB).

O Apache Cassandra nativo fornece a captura de dados de alterações (CDC), um mecanismo para sinalizar tabelas específicas para arquivo e rejeitar escritas nessas tabelas assim que for alcançado um tamanho no disco configurável para o registo CDC. A funcionalidade de feed de alterações no Azure Cosmos DB para Apache Cassandra melhora a capacidade de consultar as alterações com predicado através do CQL. Para saber mais sobre os detalhes da implementação, veja Feed de alterações no Azure Cosmos DB para Apache Cassandra.

Passos seguintes

Agora pode continuar a saber mais sobre o feed de alterações nos seguintes artigos: