| Termin | Definicja |
|---|---|
| unikanie zduplikowanych wiadomości | Unikanie zduplikowanych wiadomości wymaga kontroli mechanizmów wysyłkowych przed ponownym przetworzeniem tego samego zdarzenia. Unikanie zduplikowanych wiadomości — czym jest ten mechanizmUnikanie zduplikowanych wiadomości oznacza takie zaprojektowanie procesu komunikacji, aby jedno zdarzenie nie wywoływało wielokrotnie tej samej reakcji po stronie odbiorcy. Problem pojawia się wtedy, gdy wiadomość zostanie dostarczona, lecz nadawca nie otrzyma potwierdzenia, albo gdy system ponowi wysyłkę po chwilowym błędzie połączenia. Z punktu widzenia nadawcy operacja może wyglądać na niezakończoną, natomiast odbiorca mógł już przyjąć i wykonać polecenie. Ponowienie próby bez dodatkowej kontroli prowadzi wówczas do drugiego przetworzenia. Nie chodzi wyłącznie o identyczną treść wyświetloną dwa razy w skrzynce odbiorczej. Zduplikowane wiadomości mogą uruchomić ponowne zapisanie danych, podwójne naliczenie operacji, ponowne wysłanie powiadomienia, wielokrotne utworzenie tego samego zadania albo powtórzenie czynności administracyjnej. Dlatego kontrola duplikatów powinna obejmować zarówno warstwę wysyłania, jak i odbioru, a także sposób zapisywania stanu przetwarzania. Podstawą jest rozpoznawanie zdarzenia za pomocą identyfikatora, który pozostaje taki sam przy kolejnych próbach dostarczenia. Taki identyfikator nie powinien być tworzony od nowa przy każdym ponowieniu. Odbiorca może wtedy sprawdzić, czy dane zdarzenie zostało już obsłużone, jest właśnie obsługiwane, czy nadal oczekuje na wykonanie. Sama kontrola treści nie zawsze wystarcza, ponieważ dwie różne wiadomości mogą mieć podobne pola, a ta sama wiadomość może zostać zapisana z innym formatowaniem. Zduplikowane wiadomości w kontekście technicznym i porównania sposobów ochronyW praktyce spotyka się kilka modeli ograniczania duplikatów. Najprostszy opiera się na zapisie identyfikatorów już przyjętych komunikatów. Przed wykonaniem czynności system sprawdza, czy dany identyfikator znajduje się w rejestrze. Jeżeli tak, wiadomość zostaje pominięta albo oznaczona jako powtórzona. Jeżeli nie, identyfikator jest rejestrowany, a następnie wykonywana jest właściwa operacja. Taki schemat jest zrozumiały, lecz wymaga właściwej kolejności zapisu i przetwarzania. Inne podejście wykorzystuje klucz idempotencji, czyli dodatkową wartość opisującą konkretną próbę wykonania działania. Dwie próby z tym samym kluczem powinny prowadzić do jednego skutku, nawet jeśli docierają w różnym czasie. Rozwiązanie to jest przydatne przy formularzach, żądaniach wysyłanych przez aplikacje oraz operacjach, których nie należy powtarzać. Wymaga jednak określenia, jak długo klucz ma być przechowywany i co ma się stać, gdy pierwsza próba zakończy się częściowo. Warto odróżnić unikanie duplikatów od samego filtrowania wiadomości. Filtrowanie może rozpoznawać podobną treść, nadawcę lub temat, ale nie daje pewności, że dwie wiadomości dotyczą tego samego zdarzenia. Kontrola oparta na identyfikatorze jest dokładniejsza, ponieważ wiąże komunikat z konkretnym momentem i konkretną operacją. Z kolei mechanizm deduplikacji działający tylko po stronie nadawcy nie zabezpiecza przed powtórzeniem wynikającym z awarii odbiorcy, przerwania połączenia albo ponownego uruchomienia aplikacji. Istotne znaczenie ma także różnica między dostarczeniem a przetworzeniem. Potwierdzenie odebrania wiadomości nie zawsze oznacza, że zawarte w niej polecenie zostało wykonane. W jednym systemie potwierdzenie może być wysyłane po zapisaniu komunikatu, w innym dopiero po zakończeniu czynności. Brak jasnego rozróżnienia tych etapów sprzyja ponowieniom, które są trudne do oceny. Przy projektowaniu procedury trzeba więc ustalić, jaki stan jest potwierdzany i w którym miejscu powstaje zapis zabezpieczający przed duplikatem. Typowe problemy związane ze zduplikowanymi wiadomościamiJednym z częstych problemów jest przerwanie połączenia tuż po wykonaniu operacji. Nadawca nie widzi odpowiedzi i uznaje, że należy spróbować ponownie, choć odbiorca zdążył już wykonać działanie. Jeżeli nie ma identyfikatora powiązanego z pierwszą próbą, kolejna wiadomość zostaje potraktowana jako nowe zdarzenie. W efekcie pojawiają się dwa wpisy, dwa powiadomienia lub dwa wykonania tej samej czynności. Drugim problemem jest równoczesne przetwarzanie tego samego komunikatu przez kilka procesów. Samo sprawdzenie, czy identyfikator istnieje, może nie wystarczyć, jeśli dwa procesy wykonają sprawdzenie w tym samym momencie, zanim którykolwiek zapisze informację o rozpoczęciu obsługi. Potrzebna jest wtedy operacja atomowa, blokada, unikalne ograniczenie w bazie albo inny mechanizm gwarantujący, że tylko jeden proces przejmie wiadomość. Ryzyko rośnie również po ponownym uruchomieniu urządzenia lub programu. Jeżeli informacja o obsłużonych komunikatach była przechowywana wyłącznie w pamięci tymczasowej, po restarcie system nie rozpozna wcześniejszych zdarzeń. Podobny skutek może wystąpić po przywróceniu kopii danych bez odpowiedniego odtworzenia rejestru przetwarzania. Z tego powodu należy sprawdzać, gdzie przechowywany jest stan, jak jest zabezpieczany i czy pozostaje spójny z głównymi danymi. Nieprawidłowe usuwanie wiadomości również może prowadzić do powtórzeń. Jeżeli komunikat zostanie usunięty przed trwałym zapisaniem wyniku, awaria może wymusić ponowne dostarczenie. Jeżeli natomiast zostanie zachowany bez informacji o stanie, może być wielokrotnie podejmowany przez kolejkę. Dobrze określony cykl powinien rozróżniać wiadomość oczekującą, przetwarzaną, zakończoną, odrzuconą i wymagającą ponowienia. Praktyczne wskazówki dotyczące unikania zduplikowanych wiadomościNa początku warto sporządzić opis całego przepływu: źródło zdarzenia, miejsce wysłania, kanał transmisji, odbiorcę, sposób potwierdzenia oraz zapis końcowego wyniku. Należy zaznaczyć, w których punktach może dojść do utraty odpowiedzi, ponowienia lub równoległego wykonania. Taki przegląd często ujawnia, że duplikaty nie powstają w jednym miejscu, lecz są skutkiem połączenia kilku pozornie niezależnych mechanizmów. Dla każdej wiadomości powinien istnieć stabilny identyfikator. Trzeba też ustalić, czy identyfikator odnosi się do zdarzenia, do konkretnej próby dostarczenia, czy do operacji biznesowej. Te pojęcia nie zawsze oznaczają to samo. Jeżeli jedna operacja może mieć kilka komunikatów pomocniczych, każdy z nich może potrzebować własnego oznaczenia, a cała operacja dodatkowego identyfikatora nadrzędnego. Warto wprowadzić dziennik przetwarzania zawierający co najmniej identyfikator, czas przyjęcia, stan, rezultat i informację o ewentualnym ponowieniu. Dziennik nie powinien służyć wyłącznie do analizy po awarii. Może także pomagać w wykrywaniu wzorców, takich jak wielokrotne powtórzenia po tym samym błędzie połączenia, wiadomości zatrzymujące się w jednym etapie albo niezgodność między rejestrem odbiorcy i nadawcy. Testy powinny obejmować sytuacje, które w normalnych warunkach występują rzadko: zerwanie połączenia po wykonaniu operacji, opóźnione potwierdzenie, podwójne uruchomienie procesu, ponowne odczytanie komunikatu z kolejki oraz restart w trakcie zapisu. Należy sprawdzić nie tylko to, czy system nie tworzy kopii, lecz również to, czy nie pomija prawidłowych wiadomości. Zbyt agresywne filtrowanie może bowiem ukryć rzeczywiste zdarzenie, które tylko przypomina wcześniejsze. Przydatne jest także rozdzielenie czynności bezpiecznych do powtórzenia od tych, które wymagają ścisłej ochrony. Odczyt informacji zwykle można wykonać ponownie bez zmiany stanu, natomiast zapis, wysłanie powiadomienia lub modyfikacja ustawień powinny mieć wyraźny mechanizm idempotencji. Reguły te powinny być opisane prostym językiem, aby mogły być stosowane także podczas ręcznej obsługi awarii. Kiedy zgłosić zduplikowane wiadomości do serwisu komputerowegoDo serwisu warto zgłosić problem, gdy powtórzenia pojawiają się mimo ponownego uruchomienia programu, występują w kilku aplikacjach albo towarzyszą im zawieszanie, utrata ustawień, samoczynne restarty czy trudności z odczytem danych. Szczególnej uwagi wymagają sytuacje, w których nie da się ustalić, czy komunikat został tylko odebrany, czy również wykonany. Próby wielokrotnego ponawiania bez rozpoznania przyczyny mogą zwiększyć liczbę skutków ubocznych i utrudnić późniejszą analizę. Przed przekazaniem sprzętu dobrze zachować przykładowe komunikaty, przybliżony czas wystąpienia, nazwę programu oraz opis czynności wykonanej bezpośrednio przed pojawieniem się duplikatu. Nie należy usuwać dzienników ani czyścić skrzynki bez zapisania informacji o problemie, ponieważ takie dane mogą pomóc w odtworzeniu przebiegu zdarzeń. Jeżeli występuje ryzyko ponownego wykonania ważnej operacji, można tymczasowo wstrzymać automatyczne ponowienia, o ile nie spowoduje to utraty oczekujących danych. W Warszawie analizę takich objawów może przeprowadzić Warszawskie Pogotowie Komputerowe 24/7. Podczas zgłoszenia warto opisać, czy zduplikowane wiadomości dotyczą poczty, programu użytkowego, połączenia z urządzeniem, kolejki komunikatów czy lokalnych danych. Ułatwia to dobranie właściwego zakresu sprawdzenia i rozdzielenie problemu z aplikacją od problemu z konfiguracją, nośnikiem danych lub połączeniem. Najważniejsze pozostaje ustalenie, na którym etapie powstaje powtórzenie oraz czy istnieje trwały zapis potwierdzający obsłużenie pierwotnego zdarzenia. |