[ MSP, interfejsy API i integracje ]

Ponowne próby webhooka, idempotencja i zduplikowane zdarzenia

Natychmiast potwierdzaj trwałą akceptację i zabezpiecz ponowne próby w przypadku podwójnego dostarczenia, częściowej awarii i ponownego uruchomienia.

Przez zespół badawczy EmailAuth · 3 minuty czytania

[Kluczowe punkty]

  • Natychmiast potwierdzaj trwałą akceptację i zabezpiecz ponowne próby w przypadku podwójnego dostarczenia, częściowej awarii i ponownego uruchomienia.
  • Trwale akceptuj zweryfikowaną pracę, zanim ją potwierdzisz, a następnie pogódź się z niepewnymi skutkami ubocznymi, zamiast je ślepo powtarzać.
Na tej stronie

Obsługa ponownych prób elementu webhook jest problemem związanym z zarządzaniem stanem. Nadawca może ponownie dostarczyć wiadomość po upływie limitu czasu, nawet jeśli odbiorca wykonał jakąś pracę. Jeśli każda próba tworzy nowy bilet lub powtarza zmianę, integracja powiększa zwykłą awarię sieci w incydent operacyjny.

Odróżnij próby doręczenia od efektów biznesowych

Zdefiniuj klucz dostawy, korzystając z udokumentowanej tożsamości dostawcy oraz zakresu subskrypcji lub dzierżawy. Oddzielnie zdefiniuj efekt biznesowy, taki jak aktualizacja jednego istniejącego wyniku uwierzytelnienia. Wiele ważnych zdarzeń może zgodnie z prawem odnosić się do tego samego ustalenia, natomiast wielokrotne dostarczenie jednego zdarzenia nie powinno powodować jego skutku dwukrotnie.

Wskazówki dotyczące webhoona GitHuba mówi, że żądane ponowne dostawy zachowują X-GitHub-Delivery. Zaleca również udzielenie odpowiedzi 2XX w ciągu dziesięciu sekund i rozważenie przetwarzania asynchronicznego. Traktuj je jako udokumentowane zachowania specyficzne dla GitHuba. Nie obiecuj, że każdy dostawca automatycznie ponawia próbę lub wykorzystuje ten sam limit czasu; potwierdzić swoją aktualną politykę dostaw i drogę odzyskiwania w przypadku nieudanej dostawy.

Potwierdzenie na prawej granicy

Najpierw zweryfikuj wydarzenie, a następnie trwale zapisz zaakceptowaną pracę przed potwierdzeniem sukcesu. Przetwarzaj kosztowną pracę z kolejki. Jeśli trwała akceptacja nie powiedzie się, nie wysyłaj odpowiedzi o powodzeniu tylko dlatego, że analiza się powiodła. I odwrotnie, nie wstrzymuj połączenia do czasu zakończenia długiego dochodzenia, gdy dostawca wymaga szybkiej odpowiedzi.

Używaj stanów takich jak w kolejce, przetwarzanie, oczekiwanie na ponowną próbę, ukończone i utracona wiadomość. Śledź liczbę prób i czas kolejnej próby. Awaria pracownika może spowodować porzucenie roszczenia związanego z przetwarzaniem, dlatego należy zdefiniować bezpieczną zasadę dzierżawy lub odzyskiwania. Chroń unikalność i zmiany stanów za pomocą ograniczeń bazy danych lub transakcji, a nie kontroli odczytu i zapisu podatnej na równoczesne dostarczanie.

Zaprojektuj efekty, które można powtórzyć

W przypadku wywołań zewnętrznych użyj obsługiwanego klucza idempotencji lub stabilnej tożsamości docelowej, jeśli jest dostępna. Kiedy przerwa w grze pozostawia wynik niepewny, przeczytaj lub uzgodnij cel przed powtórzeniem efektu ubocznego. Jeśli dalszy interfejs API nie może zapewnić idempotencji, udokumentuj szczątkowe ryzyko duplikacji i dodaj kompensującą ścieżkę przeglądu.

Załóżmy, że zweryfikowana dostawa znajduje się w kolejce, ale informacja o powodzeniu została utracona. Późniejsze żądanie ponownego dostarczenia powinno znaleźć ten sam stan dostarczenia, a nie utworzyć drugi bilet tylko dlatego, że nadeszło kolejne żądanie HTTP. Osobno załóżmy, że pracownik wywołuje interfejs API biletu i przekracza limit czasu po tym, jak interfejs API mógł utworzyć bilet. Sama deduplikacja dostarczania kolejki nie jest w stanie rozwiązać tej niepewności na dalszym etapie: sprawdź obiekt docelowy lub użyj obsługiwanego przez niego klucza idempotencji przed ponownym utworzeniem.

Są to hipotetyczne ścieżki awarii, a nie wykonywana kolejka, test zegara wirtualnego lub gwarancja dokładnie raz. Przetestuj równoczesne duplikaty, przerwę w działaniu pracownika, porzuconą dzierżawę przetwarzania i ograniczone wyczerpanie, korzystając z rzeczywistej umowy dotyczącej przechowywania i dalszego przetwarzania. Przesyłka niedostarczona powinna zachować bezpieczny dowód i wymagać kontrolowanego odtworzenia po usunięciu przyczyny, a nie cichego resetowania licznika prób.

Zamknij pętlę wyczerpanej pracy

Używaj ograniczonych ponownych prób z wycofywaniem i odpowiednimi sygnałami ograniczenia szybkości. Najlepsze praktyki GitHub REST wyjaśnić zachowanie uwzględniające limity szybkości dla tego interfejsu API; zastosować faktyczną umowę o świadczenie usług niższego szczebla do produkcji. Przenieś wielokrotnie wadliwe pozycje do kontrolowanej kolejki niedostarczonych wiadomości i powiadom operatora odpowiedzialnego, przedstawiając bezpieczne dowody i wskazując następny krok.

Oddziel możliwe do ponowienia błędy transportu od trwałych błędów schematu lub autoryzacji. Powtarzanie nieautoryzowanego żądania w nieskończoność nie naprawi jego pozwolenia. Zachowaj wystarczającą ilość dowodów tożsamości i wyniku, aby wyjaśnić końcowy stan każdego zdarzenia i zapewnij przemyślaną procedurę odtwarzania przez operatora po korekcie. Monitoruj najstarszą pracę w kolejce, wyczerpanie się liczby ponownych prób i nierozwiązane wyniki, a nie tylko liczbę udanych odpowiedzi HTTP. Nie pokazano tutaj żadnych zachowań związanych z ponownymi próbami dostawcy na żywo ani funkcji EmailAuth .

[Na wynos]

Trwale akceptuj zweryfikowaną pracę, zanim ją potwierdzisz, a następnie pogódź się z niepewnymi skutkami ubocznymi, zamiast je ślepo powtarzać.

[ Według roli ]

Co to oznacza dla Ciebie

Wybierz swoją rolę, aby uzyskać praktyczne dalsze kroki.

Administrator IT / poczty

Modeluj każde przerwanie

Ponowne próby muszą przetrwać częściową pracę.

Kolejne kroki

  1. Pracownik testowy uruchamia się ponownie.
  2. Pogodź niepewne wyniki.
  3. Użyj twierdzeń o tożsamości atomowej.

CISO / SecOps

Kontroluj powtórki

Odzyskiwanie operacyjne musi zachować władzę.

Kolejne kroki

  1. Sprawdź uprawnienia do odtwarzania.
  2. Zminimalizuj utrzymanie ładunku.
  3. Audyt ręcznych interwencji.

Założyciel / Nietechniczny

Mierz realizację, a nie podziękowania

Zaakceptowane żądania HTTP mogą nadal pozostawiać niedokończoną pracę.

Kolejne kroki

  1. Zdefiniuj miarę ukończenia.
  2. Przypisz własność niedostarczonej wiadomości.
  3. Przejrzyj starzejące się kolejki.

[ Często zadawane pytania ]

Często zadawane pytania

Czy zduplikowana dostawa i zduplikowany efekt biznesowy są takie same?

Nie. Tożsamość dostawy deduplikuje próby; korelacja biznesowa łączy uzasadnione powiązane zdarzenia.

Kiedy należy uznać sukces?

Po zweryfikowaniu praca jest trwale akceptowana w ramach wybranej umowy o przeróbkę.

Czy te scenariusze dowodzą trwałej kolejki?

Nie. Sprawdź pamięć masową, zmiany stanów, odzyskiwanie po awarii i obsługę równoczesnego dostarczania w rzeczywistej implementacji.

Czy deduplikacja kolejki może rozwiązać problem przekroczenia limitu czasu transmisji?

Nie samodzielnie. Cel mógł już zastosować efekt; pogodzić go lub skorzystać z obsługiwanego mechanizmu idempotencji przed jego powtórzeniem.

Czy można założyć, że każdy dostawca automatycznie ponawia próbę?

Nie. Sprawdź zasady dostawcy i mechanizm odzyskiwania danych po nieudanej dostawie.

Co następuje po przekroczeniu limitu czasu w dół strumienia?

Przed powtórzeniem potencjalnie nieidempotentnego efektu ubocznego należy uzgodnić wynik.

Czy błędy autoryzacji powinny być ponawiane w nieskończoność?

Nie. Traktuj ich zgodnie z umową o błędzie i eskaluj w celu korekty.

Co należy do ostrzeżenia o niedostarczeniu wiadomości?

Tożsamość zdarzenia bezpiecznego, przyczyna niepowodzenia, odniesienie do dowodu, właściciel i etap kontrolowanego odtwarzania.

[ Źródła ]

Źródła

  1. Najlepsze praktyki dotyczące webhooka w GitHub

    Sekcje Użyj tajnego webhooka · Odpowiedz w ciągu 10 sekund · Użyj nagłówka X-GitHub-Delivery

  2. GitHub sprawdzający dostawy webhooków

    Sekcje Sprawdzanie poprawności dostaw webhooka

  3. Najlepsze praktyki GitHub REST API

    Sekcje Unikaj równoczesnych żądań · Odpowiednio obsługuj błędy związane z limitem szybkości · Nie analizuj ręcznie adresów URL · Używaj żądań warunkowych

[ Słowniczek ]

Słowniczek

Idempotencja
Stosowanie powtarzających się równoważnych żądań bez zwielokrotniania zamierzonego efektu.
Kolejka z utraconymi listami
Kontrolowany obszar przetrzymywania pracy, która wymagała normalnych prób przetwarzania.

Pochodzenie przedsiębiorstwa

Dlaczego najlepsze instytucje finansowe i rządy wycofali swoje panele bezpieczeństwa poczty e-mail.

Tradycyjne platformy uwierzytelniania poczty e-mail oferują pulpit nawigacyjny i proszą inżynierów o wykonanie pracy. W środowiskach o dużej stawce ręczny nadzór oznacza opóźnione egzekwowanie, zmianę konfiguracji i niemonitorowane domeny-cienie.

EmailAuth to platforma agentowego pochodzenia wiadomości e-mail. Nasi agenci egzekwują p=reject, dostosuj zewnętrznych nadawców i przenieś swoje domeny do pełnych adresów RFC 9989 zgodność, nowy standard DMARC , z możliwością kontroli przez człowieka.

Rządy Duże przedsiębiorstwa Instytucje finansowe poziomu 1

SaaS · Dedykowany najem · Lokalne rozwiązanie typu air-gapped · Szyfrowanie BYOK

Baza wiedzy