Architekt systemówArchitekt Backend

Jak zrealizować integrację zewnętrznych usług w architekturze przez szynę komunikacyjną (Message Bus) i z jakimi trudnościami można się spotkać?

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź.

Do integracji zewnętrznych usług w architekturze IT coraz częściej wykorzystuje się szynę komunikacyjną (np. RabbitMQ, Apache Kafka lub NATS). Takie podejście umożliwia realizację asynchronicznej interakcji, zmniejszenie powiązań między systemami oraz zwiększenie odporności na awarie.

Realizacja opiera się na następujących krokach:

  1. Usługi publikują wiadomości w tematach/kolejkach na szynie.
  2. Zewnętrzne usługi subskrybują interesujące je zdarzenia/kolejki.
  3. Po pojawieniu się zdarzenia następuje asynchroniczne przetwarzanie po stronie odbiorcy.

Przykład wysyłania zdarzenia do Kafki w Javie:

ProducerRecord<String, String> record = new ProducerRecord<>("events.orders", "orderCreated", jsonOrderData); producer.send(record);

Kluczowe cechy:

  • Zmniejszenie bezpośrednich powiązań między wewnętrznymi a zewnętrznymi usługami.
  • Mechanizmy ponownego wykonania (retries), Dead Letter Queues do obsługi błędów.
  • Możliwość skalowalnej i niezawodnej dostawy danych.

Pytania z pułapką.

Czy korzystanie z szyny komunikacyjnej gwarantuje brak utraty danych?

Odpowiedź: Nie. Należy osobno skonfigurować polityki dostarczania (acknowledgment, persystencja wiadomości), a czasami również obejść ograniczenia brokera (np. w przypadku awarii sieci lub przepełnienia kolejek).


Czy wszystkie wysłane wiadomości muszą być przetwarzane w kolejności, w jakiej przychodzą?

Odpowiedź: Nie zawsze. Gwarantowanie porządku jest możliwe, ale może obniżyć wydajność. W niektórych przypadkach kolejność przetwarzania nie jest ważna, a lepiej wykorzystać asynchroniczne równoległe pobieranie.


Czy wystarczy dodać wsparcie dla kolejki komunikatów w usłudze, aby skalować integrację?

Odpowiedź: Nie. Aby skalować, należy przemyśleć partycjonowanie (podział na shard'y), subskrypcję grupową i równoważenie obciążenia konsumentów, aby zapewnić równomierne obciążenie.