Article
#Artykuł #WzorceIntegracyjne

Przegląd wzorców integracyjnych

Opublikował Marcin Ziemek w dniu 11-12-2021

Czy chciałbyś poznać najpopularniejsze wzorce integracyjne? Z tego tekstu dowiesz się czym są wzorce integracyjne oraz zrozumiesz na przykładach najpopularniejsze z nich.

Czym są wzorce integracyjne?

Podczas projektowania integracji systemów IT możemy spotkać się z popularnymi problemami integracyjnymi. W takim przypadku nieoceniona może okazać się znajomość wzorców integracyjnych.

Wzorce integracyjne (ang. integration patterns) są sprawdzonymi sposobami rozwiązania określonego problemu integracyjnego.

Podobnie jak wzorce architektoniczne (ang. architecture patterns) czy wzorce projektowe (ang. design patterns) mogą pomóc podczas projektowania rozwiązania.

W dalszej części artykuły omówimy najpopularniejsze wzorce integracyjne takiej jak:

  • Wzorzec integracji synchronicznej żądanie oraz odpowiedź (ang. request-response),
  • Wzorzec integracji asynchronicznej żądanie oraz zwrotka (ang. request-reply),
  • Wzorzec integracji identyfikator korelacji (ang. correlation identifier),
  • Wzorzec integracji punkt-punkt (ang. point-to-point),
  • Wzorzec integracji publikuj-subskrybuj (ang. publish-subscribe),
  • Wzorzec integracji kanały i procesory (ang. pipes and filters),
  • Wzorzec integracji router sterowany treścią wiadomości (ang. content based router),
  • Wzorzec integracji wzbogacacz treści (ang. content enricher),
  • Wzorzec integracji rozdzielacz (ang. splitter),
  • Wzorzec integracji agregator (ang. aggregator),
  • Wzorzec integracji broker wiadomości (ang. mssage broker),
  • Wzorzec integracji szyna wiadomości (ang. message bus),
  • Wzorzec integracji kanoniczny model danych (ang. canonical data model).

Przykładowe wzorce integracyjne przedstawione są w publikacji G. Hohpego i B. Woolfa oraz na stronie internetowej Enterprise Integration Patterns.

Wzorzec integracji synchronicznej żądanie oraz odpowiedź (ang. request-response)

Rysunek 1. Wzorzec integracji synchronicznej żądanie oraz odpowiedź

Wzorzec integracji synchronicznej żądanie oraz odpowiedź (ang. request-response) polega na wywołaniu funkcji udostępnionej przez Dostawcę przez Konsumenta oraz oczekiwaniu na odpowiedź. W tym przypadku Konsument oczekuje na odpowiedź przez zdefiniowany limit czasu (ang. timeout). Wzorzec żądanie oraz odpowiedź wykorzystywany jest w przypadku, gdy Konsument musi posiadać wynik funkcji od Dostawcy w celu dalszego procesowania. Jest to przykład integracji dwukierunkowej.

Przykładem wywołań synchronicznych żądanie oraz odpowiedź jest wykorzystanie operacji SOAP czy zasobów REST.

Wzorzec integracji asynchronicznej żądanie oraz zwrotka (ang. request-reply)

Rysunek 2. Wzorzec integracji asynchronicznej żądanie oraz zwrotka

Wzorzec integracji asynchronicznej żądanie oraz zwrotka (ang. request-reply) polega na przekazaniu przez Konsumenta żądania do Dostawcy oraz nie oczekiwaniu na natychmiastową odpowiedź. Po przygotowaniu odpowiedzi zostanie ona przekazana od Dostawcy do Konsumenta.

Integrację tego typu wykorzystujemy w przypadku, gdy przygotowanie danych przez Dostawcę może trwać długo na przykład ze względu na złożone wyliczenia. Jest to przykład integracji dwukierunkowej. Żądanie oraz zwrotka wiadomości przekazywane są asynchronicznie. Wzorzec jest rozszerzeniem integracji asynchronicznej jednokierunkowej.

Przykładem wywołań asynchronicznych żądanie oraz zwrotka jest wykorzystanie korzystanie kolejek MQ.

Wzorzec integracji identyfikator korelacji (ang. correlation identifier)

Rysunek 3. Wzorzec integracji identyfikator korelacji

W integracji asynchronicznej żądanie oraz zwrotka następuje przekazanie wiadomości żądania od Konsumenta do Dostawcy. Dostawca przygotowuje wynik oraz asynchronicznie przekazuje odpowiedź. Aby Konsument był w stanie określić, którego żądania dotyczy przekazana odpowiedź wykorzystywany jest identyfikator korelacji. Wzorzec integracji identyfikator korelacji polega na umieszczeniu unikalnego identyfikatora w żądaniu oraz następnie w zwrotce w celu umożliwienia powiązania żądania ze zwrotką.

Konsument wyznacza identyfikator wiadomości (ang. message identifier) oraz następnie przekazuje go w żądaniu. Identyfikator wiadomości musi być unikalny. Może zostać wygenerowany za pomocą algorytmów wyznaczających unikalne identyfikatory UUID (ang. Universally Unique ID) bądź poprzez wykorzystanie biznesowych pól z wiadomości żądania, jeśli zapewniają unikalność.

Następnie Dostawca przygotowuje wyniki. Jest to integracja asynchroniczna, dlatego Konsument może wykonywać inne operacje w czasie, gdy Dostawca przetwarza przekazane żądanie. Po przygotowaniu wyników przez Dostawcę następuje dodanie identyfikatora korelującego (ang. correlation identifier) w odpowiedzi, którym jest identyfikator wiadomości z żądania oraz przekazanie do Konsumenta. Identyfikator korelacji umożliwi Konsumentowi powiązanie żądania ze zwrotką.

Wzorzec integracji punkt-punkt (ang. point-to-point)

Rysunek 4. Wzorzec integracji punkt-punkt

Wzorzec integracji punkt-punkt polega na integracji Dostawcy oraz Konsumenta. Dostawca przekazuje wiadomość do kanału. Jest ona odbierana tylko przez jednego Konsumenta.

W celu implementacji integracji punkt-punkt mogą zostać wykorzystane kolejki MQ.

Wzorzec integracji publikuj-subskrybuj (ang. publish-subscribe)

Rysunek 5. Wzorzec integracji publikuj-subskrybuj

Wzorzec integracji publikuj-subskrybuj polega na integracji Dostawcy z wieloma Konsumentami. Dostawca przekazuje wiadomość do kanału (na przykład temat Apache Kafka), na który zasubskrybowani są Konsumenci. Ta sama wiadomość jest przekazywana do wielu Konsumentów.

Do implementacji integracji publikuj-subskrybuj można wykorzystać tematy w Apache Kafka.

Wzorzec integracji kanały i procesory (ang. pipes and filters)

Rysunek 6. Wzorzec integracji kanały i procesory - diagram sekwencji

Rysunek 7. Wzorzec integracji kanały i procesory - diagram komponentów

Wzorzec integracji kanały i procesory polega na budowie sekwencji procesorów (filtrów) oraz połączenie ich za pomocą kanałów. Zamiast budowania złożonej logiki przetwarzania wiadomości w jednym komponencie należy utworzyć sekwencję filtrów. Każdy filtr posiada interfejs wejściowy, którym jest wiadomość wejściowa oraz interfejs wyjściowy będący wiadomością wyjściową. Wszystkie filtry korzystają z tej samej definicji interfejsów wejściowych oraz wyjściowych. W ten sposób filtry mogą być łączone z różnymi kanałami oraz w różnej kolejności. Połączenie pomiędzy filtrem a kanałem nazywane jest portem.

Wzorzec integracji router sterowany treścią wiadomości (ang. content based router)

Rysunek 8. Wzorzec integracji router sterowany treścią wiadomości - diagram sekwencji

Rysunek 9. Wzorzec integracji router sterowany treścią wiadomości - diagram komponentów

Wzorzec integracji router sterowany treścią wiadomości polega na routingu wiadomości na podstawie danych przekazanych w wiadomości. Router na podstawie treści wiadomości przekierowuje wiadomość do odpowiednich kanałów. Router może przekazywać wiadomość na podstawie różnych kryteriów takich jak istnienie pola czy określonej wartości pola. Może zostać również wykorzystany konfigurowalny silnik reguł w celu określenia kanału docelowego.

Wzorzec integracji wzbogacacz treści (ang. content enricher)

Rysunek 10. Wzorzec integracji wzbogacacz treści - diagram sekwencji

Rysunek 11. Wzorzec integracji wzbogacacz treści - diagram komponentów

Wzorzec integracji wzbogacacz treści wykorzystywany jest w celu rozszerzenia oryginalnej wiadomości o treść wymaganą przez komponent docelowy a niedostępną w systemie źródłowym. W tym celu na podstawie danych przekazanych przez system źródłowy pobierane są brakujące informacje z innych źródeł danych. Przykładem wykorzystania wzorca wzbogacacza treści może być przypadek użycia, gdy system źródłowy przekazuje adres w postaci kodu pocztowego. System docelowy wymaga przekazania również województwa. W tym celu wzbogacacz treści pobiera informację o województwie na podstawie kodu pocztowego z zewnętrznego źródła danych.

Wzorzec integracji rozdzielacz (ang. splitter)

Rysunek 12. Wzorzec integracji rozdzielacz - diagram sekwencji

Rysunek 13. Wzorzec integracji rozdzielacz - diagram komponentów

Wzorzec integracji rozdzielacz wykorzystywany jest w celu podziału wiadomości oryginalnej na wiele osobnych wiadomości. Wiadomości powstałe w ramach podziału mogą być procesowane niezależnie. Gdy wiadomość zawiera złożone zamówienie i musi być przetworzone przez różne systemy, wówczas dobrym rozwiązaniem jest wykorzystanie rozdzielacza. Umożliwi on podział wiadomości oraz niezależne procesowanie w różnych systemach.

Wzorzec integracji agregator (ang. aggregator)

Rysunek 14. Wzorzec integracji agregator - diagram sekwencji

Rysunek 15. Wzorzec integracji agregator - diagram komponentów

Wzorzec integracji agregator jest stanowym procesorem (filtrem), który ma za zadanie zebranie oraz zapisanie indywidualnych wiadomości, dopóki nie zostaną skompletowane wszystkie powiązane wiadomości. Następnie agregator przekazuje skompletowaną wiadomość. W celu skompletowania wiadomości konieczne jest zdefiniowanie strategii agregacji. Konieczne jest określenie identyfikatora korelującego wiadomości (na przykład identyfikator zamówienia), liczby wiadomości czy czasu oczekiwania na wiadomości (ang. timeout).

Wzorzec integracji broker wiadomości (ang. message broker)

Rysunek 16. Wzorzec integracji Broker wiadomości - diagram sekwencji

Rysunek 17. Wzorzec integracji Broker wiadomości - diagram komponentów

Wzorzec integracji broker wiadomości polega na integracji Dostawców z Konsumentami za pomocą centralnego komponentu integracji. Dostawcy przekazują wiadomości do jednego komponentu odpowiedzialnego za jej przekazanie do właściwego Konsumenta lub Konsumentów. Broker wiadomości eliminuje problem integracji punkt-punkt pomiędzy wszystkimi Dostawcami oraz Konsumentami. Może ułatwiać integrację oraz wprowadza ujednolicone reguły bezpieczeństwa. Broker wiadomości może być wąskim gardłem w rozwiązaniu.

Do implementacji brokera wiadomości można wykorzystać Apache ActiveMQ czy Apache Kafka.

Wzorzec integracji szyna wiadomości (ang. message bus)

Rysunek 18. Wzorzec integracji Szyna wiadomości - diagram sekwencji

Rysunek 19. Wzorzec integracji Szyna wiadomości - diagram komponentów

Wzorzec integracji szyna wiadomości polega na integracji Dostawców z Konsumentami za pomocą centralnej szyny integracji z wykorzystaniem udostępnionych interfejsów. Umożliwia łatwe dołączenie bądź odłączenie systemu informatycznego poprzez kanały oraz adaptery. Wykorzystuje kanoniczny model danych usprawniający zarządzanie modelem danych. Szyna wiadomości eliminuje problem integracji punkt-punkt pomiędzy Dostawcami oraz Konsumentami. Może być wąskim gardłem.

W celu implementacji szyny wiadomości mogą zostać wykorzystane webMethods Integration Server (webMethods ESB) bądź Mule ESB.

Wzorzec integracji kanoniczny model danych (ang. canonical data model)

Rysunek 20. Wzorzec integracji kanoniczny model danych - diagram sekwencji

Rysunek 21. Wzorzec integracji kanoniczny model danych - diagram sekwencji

Wzorzec Kanoniczny model danych pomaga w uproszczeniu integracji wielu systemów poprzez wprowadzenie ujednoliconego modelu danych wykorzystanego do integracji. Każdy system posiada własny wewnętrzny model danych jednak w celu integracji musi przekazać wiadomość zgodną z ujednoliconym kanonicznym modelem danych. Każdy system musi wykonywać transformację pomiędzy swoim wewnętrznym modelem danych oraz kanonicznym modelem danych. Gdy nowy system będzie chciał zintegrować się z dowolnym innym wówczas musi wykonać transformację wiadomości do kanonicznego modelu danych zamiast implementować transformaty obsługujące różne modele danych.

Zasady architektury integracji

Zasady architektury integracji zawierają wytyczne, którymi powinniśmy się kierować podczas projektowania integracji. W organizacjach określane są zasady, które powinny być uwzględniane podczas projektowania interfejsów. Zasady mogą dotyczyć standardów bezpieczeństwa jakie należy zastosować na przykład poprzez wykorzystanie protokołów zabezpieczonych SSH, HTTPS, SFTP itp., czy mechanizmów uwierzytelniania (wykorzystanie certyfikatów X.509). Mogą zawierać wymogi związane z nazewnictwem interfejsów integracyjnych czy wersji protokołu integracyjnego na przykład SOAP 1.2.

Gdybyś chciał podzielić się ze mną swoim komentarzem napisz do mnie na marcin@marcinziemek.com