Co lepsze? Thin vs. Fat Integration Events

Odkryj różnice między Thin i Fat Integration Events. Dowiedz się, jak podejść do projektowania zdarzeń w systemach rozproszonych i uniknąć typowych pułapek związanych z emisją zdarzeń.

Wstęp do Integration Events

Projektowanie systemów wymaga podjęcia wielu kluczowych decyzji. Jedną z nich jest sposób definiowania i używania zdarzeń – event-ów – integracyjnych, które „latają” pomiędzy wieloma bytami, często rozproszonymi. Zrozumienie różnic między tzw. Thin & Fat (Gruby i Chudy) Integration Events oraz ich właściwy dobór, może mieć ogromny wpływ na zdolność skalowania się systemu, jego wydajność czy utrzymywalność. W tym artykule przeanalizujemy, kiedy i dlaczego warto sięgnąć po każdy z nich.

integration events, jak wysyłać event-y?

Czym są zdarzenia integracyjne?

Zdarzenia integracyjne to swoiste komunikaty wysyłane między modułami, komponentami, usługami w celu synchronizacji stanu lub wywołania akcji. Mówią one zainteresowanym klientom, że coś się wydarzyło, a każdy ze słuchaczy może zareagować na swój własny sposób. Mogą one różnić się zakresem i zawartością.

Thin Integration Events

Minimalne powiadomienia o zdarzeniach, np. „OrderPlaced”, bez szczegółowych danych. Nadają się, gdy odbiorca ma dostęp do źródła danych, z których może samodzielnie pobrać dodatkowe informacje. Promują elastyczność i niskie obciążenie przesyłanych danych, ale wymagają solidnego zarządzania zależnościami między usługami. Określane są też często jako Light Events, lekkie event-y.

class OrderPlaced {
  constructor(
    public readonly orderId: string,
    public readonly occurredAt: Date,
  ) {}
}

Zalety:

  1. Minimalizm: Prostota konstrukcji oznacza mniejsze ryzyko błędów.
  2. Elastyczność: Klienty mogą interpretować zdarzenie według własnych potrzeb.
  3. Lekkość: Mniejsza wielkość komunikatów zmniejsza obciążenie sieci i pośredników komunikacyjnych.

Wady:

  1. Zwiększona ilość zapytań zwrotnych: Aby uzyskać pełne dane, klient często musi odpytać inne usługi o brakujące detale.
  2. Zależność od dostępności: Problemy z dostępem do źródła danych mogą opóźniać prawidłową reakcję na zdarzenia.

Fat Integration Events

Zawierają wszystkie niezbędne dane w ramach jednego zdarzenia, co zmniejsza liczbę zapytań między usługami, np. „OrderPlaced” z pełnymi danymi o zamówieniu. Stosuje się je, gdy priorytetem jest redukcja opóźnień lub dostępność danych w systemach niezależnych od źródła. Zwane są też często Rich Events, event-ami bogatymi.

class OrderPlaced {
  constructor(
    public readonly orderId: string,
    public readonly occurredAt: Date,
    public readonly customerId: string,
    public readonly items: { productId: string; quantity: number }[],
    public readonly totalPrice: number,
  ) {}
}

Zalety i Wady Fat Integration Events

Zalety:

  1. Samowystarczalność: Wszystkie dane potrzebne do podjęcia decyzji znajdują się w zdarzeniu.
  2. Niższa liczba zapytań: Redukcja potrzeby komunikacji z innymi usługami.
  3. Łatwiejsze debugowanie: Więcej danych w zdarzeniu może ułatwić analizę problemów.

Wady:

  1. Większy rozmiar: Większe komunikaty mogą obciążać sieć i systemy pośredniczące.
  2. Potencjalna nadmiarowość: Dane, które nie są używane przez wszystkie klienty, zwiększają złożoność.
  3. Trudności w utrzymaniu: Wraz z rozrostem danych przenoszonych w event-ach, ich ewolucja może stać się problematyczna.

Jak wybrać odpowiedni typ?

Kluczowym aspektem jest zrozumienie kontekstu biznesowego i technologicznego przy wyborze typu event-ów. Lekkie zdarzenia pasują do systemów, gdzie priorytetem jest niska złożoność i wydajność, podczas gdy bogate zdarzenia są bardziej odpowiednie w systemach wymagających pełnej autonomii odbiorców.

  • Wybierz lekkie event-y, jeśli Twoje usługi są dobrze odseparowane i łatwo dostępne lub jedynymi słuchaczami są moduły w obrębie jednej usługi. Także w sytuacji, jeśli dane muszą być zawsze zgodne z systemem źródłowym. Minimalizm sprzyja tutaj skalowalności i niezawodności.
  • Wybierz bogate event-y, gdy zależy Ci na ograniczeniu liczby zapytań między usługami lub gdy przetwarzanie wymaga szybkiego dostępu do pełnego kontekstu. Fat Events są lepsze w środowiskach, gdzie niezawodność źródła danych może być ograniczona, ponieważ klienty nie polegają na dalszych zapytaniach.

Podsumowanie

Thin & Fat Integration Events to dwa podejścia przy wyzwalaniu event-ów. Żadne z nich nie jest uniwersalnie lepsze – kluczowe jest dobranie odpowiedniego podejścia do potrzeb Twojego systemu. Świadomy wybór pozwoli Ci budować bardziej skalowalne, wydajne i łatwe w utrzymaniu aplikacje.

Autor wpisu

blog@orbisbit.com

Komentarze

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Sprawdź również