| Termin | Definicja |
|---|---|
| zduplikowane wiadomości przez powtórny trigger | Zduplikowane wiadomości przez powtórny trigger to skutek braku zabezpieczenia przed wielokrotnym przetworzeniem zdarzenia. Jak powstają zduplikowane wiadomości po powtórnym uruchomieniu triggeraZduplikowane wiadomości przez powtórny trigger pojawiają się wtedy, gdy to samo zdarzenie zostanie obsłużone więcej niż jeden raz, a mechanizm przetwarzający nie rozpoznaje, że dana operacja została już wykonana. Trigger może oznaczać automatycznie uruchamianą reakcję na zmianę danych, odebranie komunikatu, zapis pliku, kliknięcie przycisku albo zakończenie innej operacji. Jeżeli po pierwszym przetworzeniu nastąpi ponowne wywołanie, aplikacja może ponownie utworzyć wiadomość, dopisać rekord do kolejki lub wysłać ten sam komunikat do odbiorcy. Powtórne wywołanie nie zawsze oznacza awarię samego triggera. Może być skutkiem ponowienia żądania po przekroczeniu limitu czasu, ponownego uruchomienia programu, chwilowej utraty połączenia, błędnego potwierdzenia odbioru albo mechanizmu automatycznych retry. W systemach zdarzeniowych dostarczenie komunikatu może być realizowane co najmniej raz, dlatego odbiorca powinien zakładać możliwość ponownego otrzymania tego samego zdarzenia. Sam fakt odebrania wiadomości nie musi oznaczać, że poprzednia próba zakończyła się niepowodzeniem. Identyfikator zdarzenia i kontrola wykonanej operacjiPodstawowym zabezpieczeniem jest nadanie każdemu zdarzeniu stabilnego identyfikatora, na przykład wartości Sam odczyt rejestru nie wystarcza, jeżeli sprawdzenie i zapis są wykonywane jako dwie niezależne operacje. Dwa równoległe wywołania mogą jednocześnie uznać, że zdarzenie nie istnieje, a następnie oba rozpocząć przetwarzanie. Potrzebna jest kontrola współbieżności, na przykład unikalne ograniczenie dla identyfikatora zdarzenia, transakcja albo mechanizm blokady właściwy dla używanego magazynu danych. Błąd naruszenia unikalności powinien być obsłużony jako informacja, że inna próba zarejestrowała już to samo zdarzenie, a nie jako powód do kolejnego wysłania wiadomości. Idempotencja, retry i skutki uboczneOperacja idempotentna daje ten sam efekt końcowy niezależnie od tego, czy zostanie wykonana raz, czy kilka razy. Przykładem może być ustawienie konkretnej wartości konfiguracji na wskazany stan. Mniej bezpieczne są operacje polegające na zwiększeniu licznika, dopisaniu nowego wpisu, naliczeniu opłaty, utworzeniu pliku lub wysłaniu powiadomienia, ponieważ każde powtórzenie może zmienić stan albo wywołać kolejny skutek uboczny. W takich przypadkach identyfikator zdarzenia powinien być powiązany z całą operacją, a nie tylko z próbą komunikacji. Retry powinien być uruchamiany wyłącznie wtedy, gdy można odróżnić błąd przejściowy od błędu trwałego. Jeżeli aplikacja wysłała wiadomość, ale nie otrzymała potwierdzenia, ponowienie może doprowadzić do duplikatu, mimo że odbiorca poprawnie wykonał pierwszą próbę. Dlatego ważne jest rozdzielenie etapów: odebrania zdarzenia, rozpoczęcia przetwarzania, zatwierdzenia wyniku i potwierdzenia komunikatu. Logi powinny zawierać identyfikator zdarzenia, identyfikator próby, czas rozpoczęcia, rezultat oraz przyczynę ewentualnego ponowienia. Bez tych informacji trudno ustalić, czy duplikat powstał po stronie triggera, nadawcy, kolejki czy odbiorcy. Rozpoznanie problemu w aplikacji użytkowejPodczas diagnostyki warto najpierw ustalić, czy powtarza się identyczny komunikat, czy tylko tekst wiadomości jest taki sam. Należy porównać identyfikator zdarzenia, czas utworzenia, źródło, numer próby oraz dane wejściowe. Dwa komunikaty o tej samej treści mogą być prawidłowymi zdarzeniami pochodzącymi z dwóch różnych działań użytkownika. Rzeczywisty duplikat zwykle ma ten sam identyfikator albo wynika z ponownego wykonania tej samej operacji bez zmiany danych wejściowych. Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów stacjonarnych PC i ich podzespołów, dlatego w przypadku problemów z aplikacją działającą na takim urządzeniu można sprawdzić między innymi stan systemu, połączenia sieciowego, aktualność programu, lokalne logi oraz wpływ restartów i utraty zasilania na ponowne uruchamianie procesów. Jeżeli przyczyną duplikatów jest logika aplikacji lub zewnętrznego systemu zdarzeniowego, konieczna jest dodatkowo analiza konfiguracji triggera, mechanizmu potwierdzeń i sposobu zapisu identyfikatorów po stronie twórcy tego oprogramowania. |