Partilhar via


Computação de banco de dados sem servidor usando o Azure Cosmos DB e o Azure Functions

APLICA-SE A: NoSQL

A computação sem servidor tem tudo a ver com a capacidade de se concentrar em partes individuais da lógica que são repetíveis e sem monitoração de estado. Essas peças não exigem gerenciamento de infraestrutura e consomem recursos apenas pelos segundos ou milissegundos pelos quais são executadas. No núcleo do movimento de computação sem servidor estão as funções, que são disponibilizadas no ecossistema do Azure pelo Azure Functions. Para saber mais sobre outros ambientes de execução sem servidor no Azure, consulte a página sem servidor no Azure .

Com a integração nativa entre o Azure Cosmos DB e o Azure Functions, você pode criar gatilhos de banco de dados, associações de entrada e associações de saída diretamente de sua conta do Azure Cosmos DB. Usando o Azure Functions e o Azure Cosmos DB, você pode criar e implantar aplicativos sem servidor orientados a eventos com acesso de baixa latência a dados avançados para uma base de usuários global.

Descrição geral

O Azure Cosmos DB e o Azure Functions permitem que você integre seus bancos de dados e aplicativos sem servidor das seguintes maneiras:

  • Crie um gatilho do Azure Functions controlado por eventos para o Azure Cosmos DB. Esse gatilho depende de fluxos de feed de alterações para monitorar seu contêiner do Azure Cosmos DB em busca de alterações. Quando são feitas alterações em um contêiner, o fluxo de feed de alterações é enviado para o gatilho, que invoca a Função do Azure.
  • Como alternativa, vincule uma Função do Azure a um contêiner do Azure Cosmos DB usando uma associação de entrada. As ligações de entrada leem dados de um contêiner quando uma função é executada.
  • Vincular uma função a um contêiner do Azure Cosmos DB usando uma associação de saída. As associações de saída gravam dados em um contêiner quando uma função é concluída.

Nota

Atualmente, o gatilho do Azure Functions, as associações de entrada e as associações de saída para o Azure Cosmos DB têm suporte para uso apenas com a API para NoSQL. Para todas as outras APIs do Azure Cosmos DB, você deve acessar o banco de dados de sua função usando o cliente estático para sua API.

O diagrama a seguir ilustra cada uma dessas três integrações:

Como o Azure Cosmos DB e o Azure Functions se integram

O gatilho do Azure Functions, a associação de entrada e a associação de saída para o Azure Cosmos DB podem ser usados nas seguintes combinações:

  • Um gatilho do Azure Functions para o Azure Cosmos DB pode ser usado com uma associação de saída para um contêiner diferente do Azure Cosmos DB. Depois que uma função executa uma ação em um item no feed de alterações, você pode gravá-la em outro contêiner (gravá-la no mesmo contêiner de onde veio criaria efetivamente um loop recursivo). Ou, você pode usar um gatilho do Azure Functions para o Azure Cosmos DB para migrar efetivamente todos os itens alterados de um contêiner para um contêiner diferente, com o uso de uma associação de saída.
  • As ligações de entrada e de saída para o Azure Cosmos DB podem ser usadas na mesma Função do Azure. Isso funciona bem nos casos em que você deseja localizar determinados dados com a associação de entrada, modificá-los na Função do Azure e salvá-los no mesmo contêiner ou em um contêiner diferente, após a modificação.
  • Uma associação de entrada para um contêiner do Azure Cosmos DB pode ser usada na mesma função que um gatilho do Azure Functions para o Azure Cosmos DB e também pode ser usada com ou sem uma associação de saída. Você pode usar essa combinação para aplicar informações atualizadas de câmbio de moeda (puxadas com uma ligação de entrada para um contêiner de câmbio) ao feed de alterações de novos pedidos em seu serviço de carrinho de compras. O total atualizado do carrinho de compras, com a conversão de moeda atual aplicada, pode ser gravado em um terceiro contêiner usando uma ligação de saída.

Casos de utilização

Os casos de uso a seguir demonstram algumas maneiras de aproveitar ao máximo seus dados do Azure Cosmos DB - conectando seus dados ao Azure Functions controlado por eventos.

Caso de uso da IoT - Vinculação de acionamento e saída do Azure Functions para o Azure Cosmos DB

Em implementações de IoT, você pode invocar uma função quando a luz de verificação do mecanismo é exibida em um carro conectado.

Implementação: usar um gatilho do Azure Functions e uma associação de saída para o Azure Cosmos DB

  1. Um gatilho do Azure Functions para o Azure Cosmos DB é usado para disparar eventos relacionados a alertas de carro, como a luz de verificação do motor acesa em um carro conectado.
  2. Quando a luz do mecanismo de verificação chega, os dados do sensor são enviados para o Azure Cosmos DB.
  3. O Azure Cosmos DB cria ou atualiza novos documentos de dados do sensor e, em seguida, essas alterações são transmitidas para o gatilho do Azure Functions para o Azure Cosmos DB.
  4. O gatilho é invocado em cada alteração de dados para a coleta de dados do sensor, pois todas as alterações são transmitidas através do feed de alterações.
  5. Uma condição de limite é usada na função para enviar os dados do sensor para o departamento de garantia.
  6. Se a temperatura também estiver acima de um determinado valor, um alerta também é enviado ao proprietário.
  7. A associação de saída na função atualiza o registro do carro em outro contêiner do Azure Cosmos DB para armazenar informações sobre o evento do mecanismo de verificação.

A imagem a seguir mostra o código escrito no portal do Azure para esse gatilho.

Criar um gatilho do Azure Functions para o Azure Cosmos DB no portal do Azure

Caso de uso financeiro - Gatilho de temporizador e vinculação de entrada

Em implementações financeiras, você pode invocar uma função quando o saldo de uma conta bancária cai abaixo de um determinado montante.

Implementação: um gatilho de temporizador com uma ligação de entrada do Azure Cosmos DB

  1. Usando um gatilho de temporizador, você pode recuperar as informações de saldo da conta bancária armazenadas em um contêiner do Azure Cosmos DB em intervalos cronometrados usando uma associação de entrada.
  2. Se o saldo estiver abaixo do limite de saldo baixo definido pelo usuário, faça o acompanhamento com uma ação da Função do Azure.
  3. A ligação de saída pode ser uma integração SendGrid que envia um e-mail de uma conta de serviço para os endereços de e-mail identificados para cada uma das contas de saldo baixo.

As imagens a seguir mostram o código no portal do Azure para esse cenário.

Index.js arquivo para um gatilho de Timer para um cenário financeiro

Arquivo Run.csx para um gatilho de Timer para um cenário financeiro

Caso de uso de jogos - Vinculação de acionamento e saída do Azure Functions para o Azure Cosmos DB

Nos jogos, quando um novo usuário é criado, você pode pesquisar outros usuários que possam conhecê-los usando o Azure Cosmos DB para Gremlin. Em seguida, você pode gravar os resultados em um banco de dados SQL ou do Azure Cosmos DB para facilitar a recuperação.

Implementação: usar um gatilho do Azure Functions e uma associação de saída para o Azure Cosmos DB

  1. Usando um banco de dados gráfico do Azure Cosmos DB para armazenar todos os usuários, você pode criar uma nova função com um gatilho do Azure Functions para o Azure Cosmos DB.
  2. Sempre que um novo usuário é inserido, a função é invocada e, em seguida, o resultado é armazenado usando uma ligação de saída.
  3. A função consulta o banco de dados gráfico para procurar todos os usuários que estão diretamente relacionados ao novo usuário e retorna esse conjunto de dados para a função.
  4. Esses dados são armazenados no Azure Cosmos DB, que pode ser facilmente recuperado por qualquer aplicativo front-end que mostre ao novo usuário seus amigos conectados.

Caso de uso de varejo - Múltiplas funções

Em implementações de varejo, quando um usuário adiciona um item à cesta, você agora tem a flexibilidade de criar e invocar funções para componentes opcionais de pipeline de negócios.

Implementação: vários gatilhos do Azure Functions para o Azure Cosmos DB ouvindo um contêiner

  1. Você pode criar vários Azure Functions adicionando gatilhos do Azure Functions para o Azure Cosmos DB a cada um - todos os quais escutam o mesmo feed de alterações de dados do carrinho de compras. Quando várias funções escutam o mesmo feed de alterações, uma nova coleção de locação é necessária para cada função. Para obter mais informações sobre coleções de laço, consulte Noções básicas sobre a biblioteca Change Feed Processor.
  2. Sempre que um novo item é adicionado a um carrinho de compras do usuário, cada função é invocada independentemente pelo feed de alterações do contêiner do carrinho de compras.
    • Uma função pode usar o conteúdo da cesta atual para alterar a exibição de outros itens em que o usuário possa estar interessado.

    • Outra função pode atualizar os totais de inventário.

    • Outra função pode enviar informações do cliente para determinados produtos para o departamento de marketing, que lhes envia um mailer promocional.

      Qualquer departamento pode criar um Azure Functions para o Azure Cosmos DB ouvindo o feed de alterações e ter certeza de que eles não atrasarão eventos críticos de processamento de pedidos no processo.

Em todos esses casos de uso, como a função desacoplou o próprio aplicativo, você não precisa girar novas instâncias do aplicativo o tempo todo. Em vez disso, o Azure Functions gira funções individuais para concluir processos discretos conforme necessário.

Ferramentas

A integração nativa entre o Azure Cosmos DB e o Azure Functions está disponível no portal do Azure e no Visual Studio.

  • No portal do Azure Functions, você pode criar um gatilho. Para obter instruções de início rápido, consulte Criar um gatilho do Azure Functions para o Azure Cosmos DB no portal do Azure.

  • No portal do Azure Cosmos DB, você pode adicionar um gatilho do Azure Functions para o Azure Cosmos DB a um aplicativo existente do Azure Function no mesmo grupo de recursos.

  • No Visual Studio, você pode criar o gatilho usando as Ferramentas do Azure Functions:

Por que escolher a integração do Azure Functions para computação sem servidor?

O Azure Functions fornece a capacidade de criar unidades de trabalho escaláveis ou partes concisas de lógica que podem ser executadas sob demanda, sem provisionamento ou gerenciamento de infraestrutura. Usando o Azure Functions, você não precisa criar um aplicativo completo para responder a alterações em seu banco de dados do Azure Cosmos DB, você pode criar pequenas funções reutilizáveis para tarefas específicas. Além disso, você também pode usar os dados do Azure Cosmos DB como entrada ou saída para uma Função do Azure em resposta a um evento como solicitações HTTP ou um gatilho cronometrado.

O Azure Cosmos DB é o banco de dados recomendado para sua arquitetura de computação sem servidor pelos seguintes motivos:

  • Acesso instantâneo a todos os seus dados: você tem acesso granular a todos os valores armazenados porque o Azure Cosmos DB indexa automaticamente todos os dados por padrão e disponibiliza esses índices imediatamente. Isso significa que você pode consultar, atualizar e adicionar novos itens constantemente ao seu banco de dados e ter acesso instantâneo por meio do Azure Functions.

  • Sem esquema. O Azure Cosmos DB não tem esquema, portanto, é capaz de lidar exclusivamente com qualquer saída de dados de uma Função do Azure. Essa abordagem de "lidar com qualquer coisa" torna simples criar várias funções que são enviadas para o Azure Cosmos DB.

  • Taxa de transferência escalável. A taxa de transferência pode ser dimensionada para cima e para baixo instantaneamente no Azure Cosmos DB. Se você tiver centenas ou milhares de Funções consultando e gravando no mesmo contêiner, poderá dimensionar seu RU/s para lidar com a carga. Todas as funções podem trabalhar em paralelo usando seu RU/s alocado e seus dados são garantidos para ser consistente.

  • Replicação global. Você pode replicar dados do Azure Cosmos DB em todo o mundo para reduzir a latência, localizando geograficamente seus dados mais próximos de onde seus usuários estão. Como em todas as consultas do Azure Cosmos DB, os dados de gatilhos controlados por eventos são dados lidos do Azure Cosmos DB mais próximo do usuário.

Se você deseja integrar com o Azure Functions para armazenar dados e não precisa de indexação profunda ou se precisa armazenar anexos e arquivos de mídia, o gatilho de Armazenamento de Blob do Azure pode ser uma opção melhor.

Benefícios do Azure Functions:

  • Orientado a eventos. O Azure Functions é controlado por eventos e pode ouvir um feed de alterações do Azure Cosmos DB. Isso significa que você não precisa criar lógica de audição, apenas fica de olho nas mudanças que está ouvindo.

  • Sem limites. As funções são executadas em paralelo e o serviço gira quantas você precisar. Você define os parâmetros.

  • Bom para tarefas rápidas. O serviço gira novas instâncias de funções sempre que um evento é acionado e as fecha assim que a função é concluída. Você paga apenas pelo tempo que suas funções estão em execução.

Se você não tiver certeza se Flow, Aplicativos Lógicos, Azure Functions ou WebJobs são os melhores para sua implementação, consulte Escolher entre Fluxo, Aplicativos Lógicos, Funções e WebJobs.

Próximos passos

Agora vamos conectar o Azure Cosmos DB e o Azure Functions de verdade: