Návrh Azure Functions pro identický vstup
Realita architektury řízené událostmi a zprávami určuje potřebu přijímat stejné požadavky při zachování integrity dat a stability systému.
Pro ilustraci si představte tlačítko pro volání výtahem. Když stisknete tlačítko, rozsvítí se a výtah se pošle na podlahu. Za chvíli se k vám v předsálí připojí někdo jiný. Tato osoba se na vás usměje a podruhé stiskne osvětlené tlačítko. Usmíváte se a vysmíváte se sami sobě, když vám připomene, že příkaz zavolat výtah je idempotentní.
Stisknutí tlačítka pro volání výtahu po druhém, třetím nebo čtvrtém okamžiku nemá žádný vliv na konečný výsledek. Když stisknete tlačítko, bez ohledu na počet, je výtah odeslán na podlahu. Idempotentní systémy, jako je výtah, mají stejný výsledek bez ohledu na to, kolikrát jsou vydány stejné příkazy.
Pokud jde o sestavování aplikací, zvažte následující scénáře:
- Co se stane, když se aplikace pro řízení inventáře pokusí odstranit stejný produkt více než jednou?
- Jak se vaše aplikace lidských zdrojů chová, pokud existuje více než jeden požadavek na vytvoření záznamu zaměstnance pro stejnou osobu?
- Kam jdou peníze, když vaše bankovní aplikace dostane 100 žádostí o provedení stejného výběru?
Existuje mnoho kontextů, ve kterých můžou požadavky na funkci přijímat identické příkazy. Mezi tyto situace patří:
- Zásady opakování odesílání stejného požadavku mnohokrát.
- Příkazy v mezipaměti se přehrávají do aplikace.
- Chyby aplikace při odesílání více identických požadavků
Kvůli ochraně integrity dat a stavu systému obsahuje idempotentní aplikace logiku, která může obsahovat následující chování:
- Ověření existence dat před pokusem o provedení odstranění
- Před pokusem o provedení akce vytvoření zkontrolujete, jestli už data existují.
- Logika sladění, která vytváří konečnou konzistenci dat.
- Ovládací prvky souběžnosti.
- Detekce duplicit.
- Ověření aktuálnosti dat.
- Ochrana logiky pro ověření vstupních dat
V konečném důsledku se idempotenci dosáhnete tím, že zajistíte, aby byla daná akce možná a byla provedena pouze jednou.