| Termin | Definicja |
|---|---|
| Distributed Transaction Coordinator (DTC) | Distributed Transaction Coordinator (DTC) to usługa Windows koordynująca transakcje rozproszone obejmujące kilka niezależnych serwerów. Distributed Transaction Coordinator (DTC) jako mechanizm koordynacjiDistributed Transaction Coordinator, znany skrótowo jako DTC, jest składnikiem systemu Windows odpowiedzialnym za nadzorowanie transakcji, których wykonanie wymaga współpracy kilku niezależnych zasobów. Taki zasób może stanowić baza danych, kolejka komunikatów, usługa aplikacyjna albo inny komponent obsługujący operacje wymagające spójności. W zwykłej transakcji lokalnej cały zestaw zmian odbywa się w jednym silniku i jest kontrolowany przez jeden mechanizm. W przypadku DTC uczestnicy znajdują się w odrębnych procesach, usługach lub systemach, dlatego potrzebny jest dodatkowy koordynator ustalający, czy cała operacja może zostać zatwierdzona, czy też powinna zostać wycofana. Najważniejszą cechą DTC jest próba utrzymania zasady atomowości. Oznacza to, że logicznie powiązany zestaw działań powinien zakończyć się jako całość albo nie pozostawić po sobie częściowych zmian. Przykładowo aplikacja może jednocześnie zmienić rekord w bazie danych i przekazać komunikat do kolejki. Samo udane wykonanie pierwszej czynności nie wystarcza, ponieważ awaria drugiego uczestnika mogłaby doprowadzić do rozbieżności. DTC pośredniczy w uzgodnieniu stanu uczestników i zapisuje informacje potrzebne do obsługi przerwanych operacji. Usługa nie zastępuje baz danych ani nie wykonuje za nie całej pracy. Każdy uczestnik musi obsługiwać odpowiedni protokół transakcyjny i prawidłowo reagować na polecenia koordynatora. DTC zarządza przebiegiem uzgodnienia, natomiast poszczególne systemy przygotowują własne zmiany, utrzymują blokady i finalizują zapis zgodnie ze swoimi regułami. Z tego powodu problem opisywany jako awaria DTC może w rzeczywistości wynikać z konfiguracji bazy, zapory, uprawnień, uszkodzonego profilu usługi albo błędnej implementacji aplikacji. Distributed Transaction Coordinator a transakcja lokalna i rozproszonaTransakcja lokalna obejmuje jeden silnik danych lub jeden zasób, dzięki czemu kontrola jej przebiegu jest stosunkowo prosta. Silnik może rozpocząć operację, wykonać serię zmian, a następnie zatwierdzić je albo wycofać. Distributed Transaction Coordinator jest potrzebny dopiero wtedy, gdy aplikacja musi zachować spójność pomiędzy co najmniej dwoma uczestnikami zarządzanymi niezależnie. Każdy z nich może mieć własny dziennik, własne blokady, odmienny czas odpowiedzi i osobne warunki odmowy wykonania operacji. W praktyce często spotyka się model przygotowania i zatwierdzenia. W pierwszym etapie uczestnicy wykonują czynności przygotowawcze oraz potwierdzają, że mogą zakończyć transakcję. W drugim etapie koordynator przekazuje decyzję o zatwierdzeniu. Jeżeli którykolwiek uczestnik zgłosi błąd albo utraci łączność przed podjęciem decyzji, operacja może zostać wycofana. Zaletą takiego modelu jest ograniczenie ryzyka częściowego zapisu, ale ceną jest większa liczba komunikatów, dłuższe utrzymywanie blokad i większa wrażliwość na przerwy w komunikacji. Nie należy utożsamiać DTC z pełną gwarancją spójności w każdej sytuacji. Jeżeli uczestnik nie odpowiada, system może potrzebować czasu na odtworzenie stanu z dziennika. Przy długotrwałej awarii mogą pojawić się transakcje oczekujące, blokady oraz błędy aplikacyjne. Rozwiązania oparte na DTC bywają wygodne w starszych lub silnie zintegrowanych aplikacjach, lecz w nowych projektach często rozważa się także wzorce kompensacyjne, kolejki, przetwarzanie etapowe albo jawne mechanizmy ponawiania. Nie są one prostym zamiennikiem w każdej aplikacji, ponieważ wymagają zaprojektowania sposobu cofania skutków operacji. Ważne jest również rozróżnienie między problemem samej usługi a problemem komunikacji. DTC może działać lokalnie, lecz transakcja rozproszona nie powiedzie się, gdy nazwy hostów nie są rozwiązywane, porty są filtrowane, zasady uwierzytelniania nie pasują do obu stron albo usługi uruchomione są pod kontami bez wymaganych uprawnień. Analiza powinna obejmować wszystkie elementy biorące udział w transakcji. Distributed Transaction Coordinator i typowe objawy awariiNieprawidłowości związane z DTC mogą pojawiać się jako komunikaty o niemożności zatwierdzenia transakcji, przekroczeniu czasu oczekiwania, odrzuceniu połączenia lub braku dostępu do zasobu. Aplikacja może działać poprawnie przy operacjach lokalnych, ale zgłaszać błąd dopiero podczas zapisu obejmującego dwa źródła danych. Innym objawem są operacje pozostające w stanie oczekiwania, blokady rekordów utrzymujące się dłużej niż zwykle oraz rozbieżność między logiem aplikacji a logiem uczestnika. Jedną z przyczyn bywa zatrzymana albo nieprawidłowo uruchomiona usługa koordynatora. Warto sprawdzić jej stan, sposób uruchamiania, zależności oraz wpisy w Podglądzie zdarzeń. Samo ponowne uruchomienie może przywrócić pracę tylko wtedy, gdy źródłem kłopotu był chwilowy błąd. Jeżeli występują niedokończone transakcje, pochopne restarty mogą utrudnić ustalenie kolejności zdarzeń, dlatego najpierw należy zabezpieczyć logi i zanotować czas wystąpienia problemu. Drugą grupę przyczyn stanowią ustawienia sieciowe. W środowisku, w którym uczestnicy komunikują się między komputerami, znaczenie mają rozwiązywanie nazw, reguły zapory, dostępność wymaganych portów oraz poprawna konfiguracja usług RPC. Problem może występować tylko w jednym kierunku, na przykład z aplikacji do bazy, podczas gdy połączenie zwrotne pozostaje niedostępne. Zdarza się też, że po zmianie nazwy komputera, domeny lub zasad bezpieczeństwa wcześniejsza konfiguracja przestaje być zgodna. Trzecią kategorią są uprawnienia i tożsamość usług. Konto używane przez aplikację, konto usługi oraz konto uczestnika transakcji muszą mieć zakres dostępu odpowiadający wymaganiom danego rozwiązania. Ograniczenie uprawnień może zostać wprowadzone przez zmianę zasad lokalnych, politykę bezpieczeństwa, aktualizację systemu albo modyfikację konfiguracji bazy. Weryfikacja powinna być wykonywana na podstawie konkretnych komunikatów i dzienników, a nie wyłącznie przez przypadkowe wyłączanie zabezpieczeń. Distributed Transaction Coordinator w diagnostyce i konfiguracjiRozsądna diagnostyka DTC zaczyna się od odtworzenia minimalnego scenariusza. Należy ustalić, jaka aplikacja rozpoczyna transakcję, jakie zasoby są jej uczestnikami, czy problem występuje przy każdym żądaniu oraz czy dotyczy wyłącznie pracy między komputerami. Pomaga porównanie operacji lokalnej z rozpros zoną, sprawdzenie czasu wystąpienia błędu i zebranie identyfikatorów transakcji. Bez tych informacji łatwo pomylić awarię koordynacji z błędem danych, blokadą rekordu albo niedostępnością samej aplikacji. W Podglądzie zdarzeń należy szukać wpisów pochodzących zarówno z komponentów systemowych, jak i z aplikacji oraz używanych silników danych. Istotne są nie tylko same kody błędów, ale również opis uczestnika, nazwa komputera, rodzaj operacji i informacja, czy nastąpiła próba zatwierdzenia, czy wycofania. Przydatne jest sprawdzenie, czy zegary komputerów są zgodne, ponieważ różnice czasu mogą komplikować korelację logów i działanie mechanizmów uwierzytelniania. Zmiany konfiguracji powinny być wprowadzane etapami i dokumentowane. Przed modyfikacją warto zapisać bieżący stan usług, reguł zapory, ustawień dostępu i parametrów aplikacji. Nie zaleca się trwałego obniżania poziomu zabezpieczeń tylko po to, aby ukryć objaw. Jeżeli test wymaga czasowej zmiany, należy określić jej zakres, przeprowadzić próbę kontrolną i przywrócić bezpieczne ustawienia po zakończeniu sprawdzania. W przypadku systemów produkcyjnych ważne jest także ustalenie, czy oczekujące transakcje mogą zostać bezpiecznie wycofane oraz jakie skutki ma przerwanie procesu. Warto odróżnić konfigurację systemową od konfiguracji dostawcy danych. Dwie aplikacje mogą korzystać z DTC, ale różnić się wymaganiami dotyczącymi sterownika, sposobu uwierzytelniania, czasu oczekiwania i obsługi błędów. Aktualizacja jednego elementu może zmienić zgodność z pozostałymi. Z tego względu naprawa powinna obejmować test całego łańcucha, a nie tylko sprawdzenie, czy usługa ma status Uruchomiono. Distributed Transaction Coordinator i moment zgłoszenia do serwisuDo serwisu warto zgłosić się wtedy, gdy błąd DTC powtarza się mimo sprawdzenia podstawowego stanu usług, a jego skutkiem są niedokończone operacje, blokady danych albo przerwy w działaniu programu. Szczególnej ostrożności wymaga sytuacja, w której problem pojawił się po aktualizacji, zmianie ustawień sieciowych, dołączeniu komputera do innego środowiska lub wymianie elementu odpowiedzialnego za dostęp do danych. Samodzielne usuwanie dzienników, przypadkowa reinstalacja komponentów i wielokrotne restarty mogą utrudnić późniejsze odtworzenie przyczyny. Warszawskie Pogotowie Komputerowe 24/7 może przeanalizować zgłoszenie dotyczące komputera i przygotować uporządkowaną diagnostykę, przy czym bezpłatna jest diagnoza laptopa. Przy przekazywaniu urządzenia lub zgłoszenia przydatne będzie podanie nazwy aplikacji, czasu pojawienia się błędu, informacji o ostatnich zmianach oraz treści komunikatu. Jeżeli dostępne są logi, warto zachować ich kopię zamiast wykonywać czyszczenie systemu przed konsultacją. Przed rozpoczęciem prac należy zabezpieczyć ważne dane i, o ile pozwala na to stan systemu, wykonać kopię konfiguracji. W przypadku komputera wykorzystywanego do obsługi istotnych procesów dobrze jest zapisać listę zależności: aplikację inicjującą, używane bazy, kolejki, konta usług oraz połączenia pomiędzy urządzeniami. Taki zestaw informacji skraca drogę do rozpoznania, czy przyczyną jest usługa DTC, komunikacja, uprawnienia, uczestnik transakcji czy logika programu. |