Obserwowalność w mikrousługach a rejestrowanie w systemie monolitycznym
Obserwowalność mikrousług oferuje rozproszone śledzenie, metryki i logi w niezależnych usługach, podczas gdy logowanie monolityczne koncentruje się na scentralizowanych rekordach z jednej aplikacji. Właściwy wybór zależy od złożoności systemu, skali oraz zakresu informacji, jakich zespoły potrzebują do analizy interakcji z usługami.
Najważniejsze informacje
Obserwowalność mikrousług traktuje ślady, metryki i logi jako równorzędne sygnały, podczas gdy rejestrowanie monolityczne opiera się niemal wyłącznie na zapisach tekstowych.
Rozproszone śledzenie pozwala zespołom dokładnie określić, która konkretna usługa spowodowała awarię, co jest trudne do osiągnięcia w przypadku tradycyjnych dzienników obsługujących różne usługi.
Rozpoczęcie rejestrowania monolitycznego wymaga znacznie mniejszej infrastruktury i wiedzy specjalistycznej, co czyni je atrakcyjnym rozwiązaniem dla mniejszych lub starszych systemów.
Możliwość obserwowania rośnie wraz ze złożonością systemu, natomiast rejestrowanie monolityczne ma tendencję do pogarszania się wraz ze wzrostem rozmiaru aplikacji i ruchu.
Czym jest Obserwowalność w mikrousługach?
Wielowymiarowe podejście łączące ślady, metryki i logi w celu zrozumienia zachowań w rozproszonych, niezależnie wdrożonych usługach.
Zbudowany na trzech filarach: rozproszonym śledzeniu, metrykach i ustrukturyzowanym rejestrowaniu w różnych usługach
Wykorzystuje identyfikatory korelacji do śledzenia pojedynczego żądania podczas przeskakiwania między dziesiątkami lub setkami usług
Opiera się na narzędziach takich jak OpenTelemetry, Jaeger, Prometheus i Grafana do zbierania i wizualizacji danych
Zaprojektowano do obsługi infrastruktury efemerycznej, w której kontenery i moduły stale się rozkręcają i zwalniają
Umożliwia zespołom SRE wykrywanie anomalii poprzez cele dotyczące poziomu usług i budżety błędów
Czym jest Rejestrowanie systemu monolitycznego?
Tradycyjne podejście, w którym pojedyncza aplikacja zapisuje wpisy dziennika w scentralizowanych plikach lub pojedynczym magazynie dziennika na potrzeby debugowania i audytu.
Dzienniki pochodzą z jednej bazy kodu działającej jako pojedynczy proces, co ułatwia śledzenie ścieżek żądań
Zwykle wykorzystuje rejestrowanie oparte na plikach, syslog lub proste agregatory dzienników, takie jak Logback lub log4j
Debugowanie zwykle polega na przeszukiwaniu plików dziennika lub wysyłaniu zapytania do pojedynczej instancji stosu ELK
Narzut wydajnościowy jest minimalny, ponieważ rejestrowanie odbywa się w jednym środowisku wykonawczym
Łatwiejsze wdrożenie korelacji poprzez kontekst lokalny wątku lub proste identyfikatory sesji
Tabela porównawcza
Funkcja
Obserwowalność w mikrousługach
Rejestrowanie systemu monolitycznego
Architektura
Rozproszone w wielu usługach
Pojedyncza, ujednolicona aplikacja
Podstawowe typy danych
Ślady, metryki i logi
Głównie rejestry, czasami metryki
Śledzenie żądań
Rozproszone śledzenie z kontekstem rozpiętości
Śledzenie lokalne wątków lub oparte na sesjach
Złożoność narzędzi
Wysoki — wymaga instrumentacji w różnych usługach
Niski — wystarczy pojedynczy rurociąg logowy
Skalowalność
Skalowanie poziome wraz z liczbą usług
Ograniczone przez przepustowość pojedynczej aplikacji
Diagnostyka awarii
Wskazuje, która usługa spowodowała opóźnienie lub błędy
Łatwiej w ramach jednego procesu, trudniej na granicach
Wymagania dotyczące przechowywania
Bazy danych o dużej objętości, często szeregach czasowych
Umiarkowany, zazwyczaj pliki płaskie lub jeden indeks
Koszt wdrożenia
Znaczna początkowa inwestycja
Niższy początkowy koszt konfiguracji
Szczegółowe porównanie
Główna filozofia i podejście
Obserwowalność mikrousług zakłada, że nie można z góry przewidzieć każdego trybu awarii, dlatego gromadzi się wystarczająco dużo zróżnicowanej telemetrii, aby zadawać nowe pytania po wystąpieniu problemów. Rejestrowanie monolityczne opiera się na prostszym podejściu: rejestruje wystarczającą liczbę rekordów tekstowych, aby odtworzyć, co wydarzyło się podczas żądania. Pierwsze podejście traktuje logi jako jeden z wielu sygnałów, podczas gdy drugie traktuje logi jako główny sygnał umożliwiający zrozumienie zachowania systemu.
Debugowanie i analiza przyczyn źródłowych
Gdy coś się zepsuje w konfiguracji mikrousług, inżynierowie korzystają z rozproszonych śladów, aby dokładnie sprawdzić, która usługa spowodowała opóźnienie lub zwróciła błąd. W monolicie programiści zazwyczaj otwierają plik dziennika, wyszukują znacznik czasu lub identyfikator użytkownika i odczytują kolejne wpisy. Ścieżka monolitu wydaje się bardziej intuicyjna, ale przestaje działać, gdy system rozrasta się na tyle, że pojedynczy plik dziennika staje się nieporęczny.
Narzędzia i infrastruktura
Stosy obserwowalności zazwyczaj łączą bibliotekę instrumentacji, taką jak OpenTelemetry, zaplecze śledzące, takie jak Jaeger lub Tempo, magazyn metryk, taki jak Prometheus, oraz warstwę kokpitu menedżerskiego, taką jak Grafana. Monolityczne logowanie często wymaga znacznie mniej – frameworka do logowania, dostawcy logów, takiego jak Filebeat, a może klastra ELK lub OpenSearch. Łańcuch narzędzi mikrousług wymaga większej dojrzałości operacyjnej, ale opłaca się, gdy systemy stają się bardziej złożone.
Wydajność i narzut
Rozproszone śledzenie generuje dodatkowe przeskoki sieciowe i koszty serializacji, ponieważ zakresy są propagowane poza granice usług, jednak strategie próbkowania pozwalają na kontrolowanie narzutu. Monolityczne rejestrowanie danych pozostaje blisko procesu aplikacji, więc spadek wydajności wynika głównie z operacji wejścia/wyjścia na dysku i formatowania logów. Oba podejścia mogą obniżyć wydajność, jeśli rejestrowanie danych jest pozostawione na poziomie rozwlekłym w środowisku produkcyjnym, ale środowiska mikrousług zazwyczaj wymagają bardziej starannego dostrajania.
Kiedy wszystko ma sens
Obserwowalność sprawdza się w środowiskach z częstymi wdrożeniami, usługami wielojęzycznymi i zespołami wymagającymi niezależnej własności komponentów. Monolityczne rejestrowanie danych nadal sprawdza się w mniejszych aplikacjach, starszych systemach lub scenariuszach, w których zgodność z przepisami wymaga przejrzystych ścieżek audytu. Wiele organizacji korzysta z obu rozwiązań – zachowując tradycyjne logi dla zapewnienia zgodności, a jednocześnie dodając do nich narzędzia do obserwowania, aby zapewnić wgląd w inżynierię.
Zalety i wady
Obserwowalność w mikrousługach
Zalety
+Pełna widoczność żądania
+Korelacja wielosygnałowa
+Skala złożoności
+Umożliwia praktyki SRE
Zawartość
−Wyższy koszt oprzyrządowania
−Bardziej stroma krzywa uczenia się
−Więcej miejsca na przechowywanie
−Wymaga dyscypliny w zakresie instrumentów
Rejestrowanie systemu monolitycznego
Zalety
+Łatwe do wdrożenia
+Niższe koszty operacyjne
+Znany większości zespołów
+Łatwy ślad audytu
Zawartość
−Ograniczony wgląd międzyusługowy
−Słabo skaluje się w zależności od rozmiaru
−Pojedynczy punkt awarii
−Trudniej powiązać zdarzenia
Częste nieporozumienia
Mit
Same logi wystarczą do debugowania dowolnego systemu.
Rzeczywistość
Logi sprawdzają się w przypadku monolitów, ale tracą na skuteczności w systemach rozproszonych, gdzie pojedyncze żądanie dotyczy wielu usług. Metryki i ślady wypełniają luki, pokazując wzorce i ciągi przyczynowo-skutkowe, których logi nie są w stanie łatwo ujawnić.
Mit
Obserwowalność to po prostu eleganckie logowanie pod nową nazwą.
Rzeczywistość
Obserwowalność to szersza dziedzina, która obejmuje logi, ale dodaje również metryki i ślady jako sygnały najwyższej jakości. Cel przesuwa się od przeszukiwania rekordów do zadawania dowolnych pytań o zachowanie systemu bez konieczności wprowadzania nowego kodu.
Mit
Systemy monolityczne nie wymagają obserwowalności.
Rzeczywistość
Nawet pojedyncze aplikacje korzystają z metryk, śladów i ustrukturyzowanych logów, gdy osiągną znaczącą skalę. Obserwowalność polega na zrozumieniu stanu systemu, co ma zastosowanie niezależnie od architektury.
Mit
Rozproszone śledzenie jest zbyt drogie do zastosowań produkcyjnych.
Rzeczywistość
Nowoczesne systemy śledzenia wykorzystują próbkowanie oparte na głowie lub ogonie, aby wychwycić reprezentatywny podzbiór żądań. Pozwala to ograniczyć narzut, a jednocześnie zapewnić wystarczającą ilość danych do zdiagnozowania większości problemów.
Mit
Przejście na mikrousługi automatycznie poprawia możliwość obserwacji.
Rzeczywistość
Mikrousługi utrudniają obserwowalność, a nie ją ułatwiają, ponieważ teraz trzeba monitorować więcej ruchomych części. Bez odpowiedniej instrumentacji i narzędzi widoczność w rzeczywistości maleje w porównaniu z dobrze zinstrumentowanym monolitem.
Często zadawane pytania
Jaka jest różnica między obserwowalnością a rejestrowaniem?
Rejestrowanie to jeden z rodzajów danych telemetrycznych – dyskretne zdarzenia rejestrowane przez aplikację. Obserwowalność to właściwość systemu, która opisuje, jak dobrze można zrozumieć jego stan wewnętrzny na podstawie danych wyjściowych z zewnątrz. Obserwowalność wykorzystuje logi, metryki i ślady łącznie, podczas gdy rejestrowanie koncentruje się wyłącznie na rekordach tekstowych.
Pojedyncze żądanie użytkownika w architekturze mikrousług może przejść przez pięć, dziesięć lub więcej usług przed ich ukończeniem. Rozproszone śledzenie śledzi to żądanie przez granice usług, wykorzystując identyfikatory korelacji i zakresy, umożliwiając sprawdzenie, na co poświęcono czas i skąd pochodziły błędy.
Czy można używać tradycyjnego rejestrowania w środowisku mikrousług?
Tak, ale korelowanie logów między usługami staje się trudniejsze bez współdzielonych identyfikatorów. Większość zespołów dodaje ustrukturyzowane logowanie z identyfikatorami korelacji, a następnie śledzenie warstw i metryki, aby uzyskać pełny obraz zachowania systemu.
Jakie są trzy filary obserwowalności?
Trzy filary to logi, metryki i ślady. Logi rejestrują zdarzenia dyskretne, metryki rejestrują dane liczbowe w czasie, a ślady pokazują ścieżkę żądania w systemach rozproszonych. Razem pozwalają zespołom odpowiadać na pytania dotyczące wydajności, błędów i doświadczenia użytkownika.
Czy OpenTelemetry jest standardem obserwowalności?
OpenTelemetry stał się de facto standardem dla instrumentów w większości języków programowania i platform. Połączył projekty OpenTracing i OpenCensus i jest obecnie wspierany przez Cloud Native Computing Foundation, z szerokim wsparciem ze strony dostawców i narzędzi open source.
Ile kosztuje obserwowalność w porównaniu do rejestrowania?
Obserwowalność zazwyczaj kosztuje więcej ze względu na dodatkową przestrzeń dyskową, licencje na narzędzia i czas potrzebny inżynierom na oprzyrządowanie. Często jednak skraca średni czas rozwiązywania problemów i zapobiega kosztownym awariom, co może zrekompensować początkową inwestycję w przypadku organizacji korzystających ze złożonych systemów.
Czy monolity korzystają z narzędzi obserwowalności?
Zdecydowanie. Nawet pojedyncze aplikacje czerpią korzyści z rozproszonego śledzenia w ramach własnego procesu, z metryk ujawniających trendy wydajności oraz ze strukturalnych logów, które są łatwiejsze do przeszukiwania. Narzędzia do obserwowalności nie są zarezerwowane wyłącznie dla mikrousług.
Czym jest rozpiętość w śledzeniu rozproszonym?
Rozpiętość reprezentuje pojedynczą jednostkę pracy w ramach śladu, taką jak zapytanie do bazy danych lub wywołanie HTTP między usługami. Rozpiętości mają nazwę, czas rozpoczęcia, czas trwania i metadane, a następnie są połączone relacjami nadrzędny-podrzędny, tworząc kompletny ślad.
W jaki sposób korelujesz logi w różnych mikrousługach?
Zespoły zazwyczaj wstrzykują identyfikator korelacji na granicy systemu i propagują go za pośrednictwem nagłówków HTTP, metadanych wiadomości lub kontekstu wątku. Każda usługa uwzględnia ten identyfikator w swoich wpisach w dzienniku, więc pojedyncze wyszukiwanie we wszystkich usługach zwraca pełną ścieżkę żądania.
Czy startupy powinny korzystać z możliwości obserwacji czy trzymać się rejestrowania?
Startupy na wczesnym etapie rozwoju zazwyczaj zaczynają od ustrukturyzowanego rejestrowania i podstawowych metryk, ponieważ są one szybsze i tańsze. Wraz z rozwojem systemu i mnożeniem się zespołów, dodanie śledzenia i ujednoliconej platformy obserwacji staje się opłacalne, aby utrzymać tempo rozwoju.
Wynik
Wybierz obserwowalność mikrousług, gdy Twój system obejmuje wiele niezależnych usług i potrzebujesz zrozumieć interakcje między nimi w czasie rzeczywistym. W przypadku prostszych aplikacji, w których scentralizowane rejestry zapewniają wystarczającą przejrzystość, a obciążenie operacyjne ma większe znaczenie niż szczegółowy wgląd, wybierz obserwowalność mikrousług. W praktyce dojrzałe systemy często łączą oba podejścia, zamiast całkowicie polegać na jednym.