Criando Azure Functions para entradas idênticas

A realidade da arquitetura controlada por eventos e controlada por mensagens determina a necessidade de aceitar solicitações idênticas enquanto preserva a integridade dos dados e a estabilidade do sistema.

Para ilustrar, considere um botão de chamada de elevador. Quando você pressiona o botão, ele acende e um elevador é enviado para o andar. Alguns instantes depois, outra pessoa entra no lobby. Essa pessoa sorri para você e pressiona o botão iluminado uma segunda vez. Você sorri de volta e se diverte lembrando que o comando para chamar um elevador é idempotente.

Pressionar um botão de chamada de elevador uma segunda, terceira ou quarta vez não tem nenhuma influência sobre o resultado final. Quando você pressiona o botão, independentemente do número de vezes, o elevador é enviado para o andar. Sistemas idempotentes, como o elevador, chegam ao mesmo resultado independentemente de quantas vezes comandos idênticos são emitidos.

Quando se trata de criar aplicativos, considere os seguintes cenários:

  • O que acontecerá se um aplicativo de controle de inventário tentar excluir o mesmo produto mais de uma vez?
  • Como um aplicativo de recursos humanos se comporta quando há mais de uma solicitação para criar um registro de funcionário para a mesma pessoa?
  • Para onde vai o dinheiro se um aplicativo de serviços bancários receber 100 solicitações para fazer a mesma retirada?

Há muitos contextos em que as solicitações para uma função podem receber comandos idênticos. Algumas situações incluem:

  • Políticas de repetição enviando a mesma solicitação muitas vezes.
  • Comandos em cache reproduzidos para o aplicativo.
  • Erros de aplicativo enviando várias solicitações idênticas.

Para proteger a integridade dos dados e do sistema, um aplicativo idempotente contém lógica que pode conter os seguintes comportamentos:

  • Verificar a existência de dados antes de tentar executar uma exclusão.
  • Verificar se os dados já existem antes de tentar executar uma ação de criação.
  • Reconciliar a lógica que cria consistência eventual nos dados.
  • Controle de simultaneidade.
  • Detecção de duplicação.
  • Validação da atualização de dados.
  • Lógica de proteção para verificação de dados de entrada.

Em última instância, a idempotência é obtida ao garantir que uma determinada ação seja possível e seja executada apenas uma vez.

Próximas etapas