Criar Funções do Azure para entradas idênticas
A realidade da arquitetura baseada em eventos e em mensagens dita a necessidade de aceitar pedidos idênticos, preservando a integridade dos dados e a estabilidade do sistema.
Para ilustrar, considere um botão de chamada de elevador. À medida que prime o botão, acende-se e é enviado um elevador para o seu chão. Alguns momentos depois, alguém se junta a si na sala de espera. Esta pessoa sorri para si e prime o botão iluminado uma segunda vez. Sorris para trás e ris-te para ti mesmo quando te lembras que o comando para chamar um elevador é idempotente.
Premir um botão de chamada de elevador uma segunda, terceira ou quarta vez não tem qualquer influência no resultado final. Quando prime o botão, independentemente do número de vezes, o elevador é enviado para o seu chão. Os sistemas Idempotentes, como o elevador, resultam no mesmo resultado, independentemente do número de vezes que são emitidos comandos idênticos.
No que diz respeito à criação de aplicações, considere os seguintes cenários:
- O que acontece se a sua aplicação de controlo de inventário tentar eliminar o mesmo produto mais do que uma vez?
- Como se comporta a aplicação de recursos humanos se existir mais do que um pedido para criar um registo de colaborador para a mesma pessoa?
- Para onde vai o dinheiro se a sua aplicação bancária receber 100 pedidos para fazer o mesmo levantamento?
Existem muitos contextos em que os pedidos a uma função podem receber comandos idênticos. Algumas situações incluem:
- Repita várias vezes as políticas que enviam o mesmo pedido.
- Comandos em cache reproduzidos na aplicação.
- Erros de aplicação ao enviar vários pedidos idênticos.
Para proteger a integridade dos dados e o estado de funcionamento do sistema, uma aplicação idempotente contém lógica que pode conter os seguintes comportamentos:
- Verificar a existência de dados antes de tentar executar uma eliminação.
- Verifique se os dados já existem antes de tentar executar uma ação de criação.
- Reconciliar lógica que cria consistência eventual nos dados.
- Controlos de simultaneidade.
- Deteção de duplicação.
- Validação da atualização de dados.
- Guarde a lógica para verificar os dados de entrada.
Em última análise, a idempotência é obtida ao garantir que uma determinada ação é possível e é executada apenas uma vez.