Cyfryzacja, obejmująca praktycznie każdy aspekt biznesu, prowadzi do powstawania wielu niezależnych rozwiązań software’owych, które obsługują różne – choć powiązane – obszary procesów biznesowych przedsiębiorstwa. W rezultacie powstaje potrzeba współdzielenia lub transferu informacji pomiędzy aplikacjami, często różniącymi się pod względem technologii oraz logiki danych, na których operują. Choć możliwe jest realizowanie tego procesu ręcznie – poprzez wprowadzanie lub aktualizację danych w wielu systemach – takie podejście jest skrajnie nieefektywne, kosztowne i podatne na błędy. Dlatego konieczne staje się wdrażanie zautomatyzowanych interfejsów komunikacyjnych, realizujących określone scenariusze integracyjne.
Podstawowe typy interfejsów
Interfejs czasu rzeczywistego
Aktywność tego typu interfejsu jest częścią jednostkowej operacji (np. aktualizacja danych klienta), wykonywanej w systemie źródłowym, wymagającej natychmiastowej komunikacji z systemem docelowym. Może ona obejmować proste przekazanie informacji lub realizować bardziej złożone scenariusze transakcji rozproszonych. Z punktu widzenia biznesowego najważniejszą cechą tego typu interfejsów jest ciągłość utrzymania spójności danych pomiędzy zaangażowanymi systemami.
Interfejs wsadowy
Działanie tego typu interfejsu polega na jednorazowym przekazaniu większej (czasem bardzo dużej) ilości danych w ramach jednorazowej aktywności, inicjowanej automatycznie w określonym interwale czasowym, po spełnieniu określonych warunków lub na żądanie. Interfejsy takie stosujemy, gdy okresowa aktualizacja danych nie zakłóca procesu biznesowego, a czasem jako kompromis wynikający z braku możliwości technicznych.
Typowe zadania interfejsów
Aktualizacja
Dane wprowadzone lub zmienione w systemie źródłowym są dystrybuowane do innych systemów, najczęściej z zastosowaniem interfejsu czasu rzeczywistego.
Synchronizacja
Tego typu zadanie wymaga jednoczesnego dostępu do danych wszystkich synchronizowanych systemów. Sprawdzana jest ich zgodność, a w przypadku wykrycia różnic są aktualizowane.
Replikacja
Zadanie to sprowadza się do regularnego tworzenia kopii zbioru lub podzbioru danych systemu źródłowego, przeznaczonej do wykorzystania przez inne oprogramowanie — np. w celach analitycznych, raportowych lub, po zastosowaniu odpowiednich technik indeksowania, jako podstawy mechanizmu zaawansowanego wyszukiwania.
Konwersja, transformacja i agregacja
W ramach realizacji swoich funkcji podstawowym zadaniem interfejsu jest dostosowanie danych źródłowych do formatu akceptowalnego przez system docelowy. Czasem wystarczy prosta konwersja typów lub notacji, jednak w przypadku transferu bardziej złożonych danych często niezbędna jest głębsza zmiana ich struktury, czyli transformacja. Szczególnym przypadkiem transformacji jest agregacja — polegająca na łączeniu danych z jednego lub wielu źródeł za pomocą operacji takich jak zliczanie, sumowanie, uśrednianie itp.
Platforma integracyjna
Infrastruktura IT obejmuje najczęściej wiele różnych systemów, wymagających wzajemnej komunikacji. Prowadzi to do tworzenia wielu dedykowanych interfejsów, których niezależne utrzymanie jest trudne, szczególnie gdy obszary ich działania się na siebie nakładają. Najlepszym rozwiązaniem w takim przypadku jest wdrożenie scentralizowanej platformy integracyjnej, realizującej jak największą liczbę interfejsów (w idealnej sytuacji – wszystkie). Uzyskany dzięki temu efekt synergii pozwala na znaczny wzrost efektywności i niezawodności warstwy integracji, przy jednoczesnym obniżeniu kosztów utrzymania. Wpływa na to fakt wykorzystania jednolitych, wspólnych mechanizmów monitorowania i kontroli zależności, współdzielenia zasobów sprzętowych oraz innych elementów, jak logika biznesowa, repliki, indeksy, wstępnie przekonwertowane lub zagregowane dane. Elementem platformy integracyjnej jest również interfejs użytkownika, pozwalający na konfigurację parametrów dla aplikowanej podczas przetwarzania logiki biznesowej lub nawet wsadowe ładowanie danych, wykorzystywanych następnie przez inne systemy.
Najważniejsze aspekty utrzymania warstwy integracji
Monitorowanie
Aktualna wiedza o bieżącym działaniu interfejsów, ich wydajności, ostatnim uruchomieniu, a szczególnie o pojawiających się problemach, jest kluczowym czynnikiem wpływającym na skuteczność działania warstwy integracji. Odpowiada za to moduł monitorujący, przedstawiający w czytelny sposób bieżący stan środowiska, zarządzający logami aktywności i dystrybuujący powiadomienia o istotnych faktach do zdefiniowanych list odbiorców. Umożliwia to podjęcie nawet proaktywnych działań, zmierzających do zapobiegania lub szybkiego usuwania awarii.
Jednoznaczny stan i kontrola zależności
Logika biznesowa interfejsów lub optymalizacja przetwarzania na platformie integracyjnej prowadzi do powstawania zależności pomiędzy poszczególnymi zadaniami. Oznacza to, że podjęcie aktywności przez jedno z nich uwarunkowane jest stanem wyników działania zadań uruchamianych wcześniej. Logika poszczególnych zadań musi więc być tak skonstruowana, aby w każdym momencie dostarczać jednoznacznej informacji o stanie swoich wyników (brak, nieaktualne, aktualne), tak aby automatyczny system synchronizacji mógł skutecznie unikać sytuacji konfliktowych, np. rozpoczęcia zadania na nieaktualnych danych wejściowych lub usunięcia danych podczas ich przetwarzania przez zadanie zależne.
Diagnostyka
Podczas działania interfejsu, czy to jednostkowego, czy działającego w ramach platformy integracyjnej, może dochodzić do sytuacji, które zakłócają jego działanie – najczęściej na skutek awarii infrastruktury, ale również niewłaściwego działania systemów docelowych lub źródłowych. Kluczowa w takich przypadkach jest możliwość szybkiej diagnostyki źródła problemu, jego usunięcia lub poinformowania o problemie strony za niego odpowiedzialnej. Aby osiągnąć ten cel, stosujemy strategię gromadzenia szczegółowych logów na każdym etapie działania interfejsu, wraz z możliwie szczegółowymi danymi diagnostycznymi (np. zawartością żądania i odpowiedzi na poziomie protokołu HTTP).
Odtwarzanie stanu po awarii
Logika i sposób implementacji interfejsu powinny brać pod uwagę możliwość automatycznego przywrócenia jego jednoznacznego stanu po dowolnego rodzaju awarii, tak aby ponowne uruchomienie nie musiało być poprzedzone złożoną analizą danych lub manualnym przywróceniem ich spójności. Jest to istotne z punktu widzenia minimalizacji czasu przestoju, który może w istotny sposób zakłócić obsługiwane procesy biznesowe.
Technologia
Istotą interfejsów jest łączenie różnych systemów, które mogą być technologicznie spójne lub całkowicie zróżnicowane. Ten czynnik, a następnie wymagania biznesowe oraz specyfika przekazywanych danych (np. wolumen), determinują wybór technologii samego interfejsu. Nasze doświadczenie obejmuje szereg mniej lub bardziej popularnych technologii, stosowanych w zależności od specyfiki przypadku.
Środowiska bazy danych Oracle
Naturalnym wyborem podczas integracji dwóch systemów opartych na bazie danych Oracle® jest zastosowanie wbudowanego w tę technologię mechanizmu linków bazodanowych (DB Link). Jest to rozwiązanie bardzo wydajne, umożliwiające stosunkowo łatwe tworzenie dowolnego typu interfejsów – od prostych transferów danych, po rozwiązania zawierające złożoną logikę, np. uwzględniającą transakcyjność lub dokonujące skomplikowanego łączenia, analizy i agregacji danych z dwóch (lub więcej) źródeł za pomocą specjalnie optymalizowanych zapytań SQL i poleceń DML.
Środowiska Java
Łączenie systemów opartych na technologii Java oferuje całą gamę dedykowanych rozwiązań implementujących ujednolicony interfejs JMS (Java Message Service), gdzie z powodzeniem stosowaliśmy implementacje oparte na kolejkach (np. HornetQ). Kolejnym, ciągle jeszcze stosowanym rozwiązaniem są interfejsy oparte o technologię EJB (Enterprise JavaBeans), które, choć nie są dobrym wyborem w nowych projektach, wciąż mogą stanowić możliwość łatwej integracji z istniejącymi implementacjami w systemach legacy.
Środowiska zróżnicowane
Brak możliwości zastosowania mechanizmów natywnych, charakterystycznych dla jednej technologii, nie ogranicza możliwości integracji systemów. Co więcej, obecnie często świadomie z nich rezygnujemy (mimo istniejących możliwości), na rzecz bardziej popularnych, dobrze znanych, niezależnych technologicznie rozwiązań.
- Pliki płaskie (Flat Files) – jest to rozwiązanie polegające na generowaniu plików w prostym formacie, jak CSV (Comma-Separated Values), i przesyłaniu ich do systemu docelowego, np. za pomocą dobrze znanego protokołu FTP/SFTP. Podejście to sprawdza się w przypadku starszych systemów (np. AS400), a także przy konieczności transferu dużych wolumenów danych w trybie wsadowym.
- Usługa sieciowa – szerzej znana jako Web Service, implementuje interfejsy przy wykorzystaniu technologii webowych, jak np. protokół HTTP, nakładając dodatkową warstwę konwencji lub dodatkowego protokołu. Najczęściej wykorzystywanym przez nas typem interfejsu jest popularny REST (Representational State Transfer), będący prostym połączeniem HTTP z formatem danych JSON lub XML. W rozwiązaniach korporacyjnych, ze względu na zgodność z istniejącym środowiskiem i systemami legacy, często wykorzystujemy również interfejsy typu SOAP (Simple Object Access Protocol).
- Bezpośrednie API – wiele platform technologicznych (jak np. baza danych Oracle) umożliwia uruchamianie funkcji i procedur, udostępnianych przez aplikację w ramach tzw. API (Application Programming Interface). Dostawca technologii udostępnia najczęściej oprogramowanie klienckie lub sterowniki, dostępne z poziomu wielu znanych technologii (np. JDBC, ODBC, Node.js). Choć rozwiązanie to jest mniej elastyczne, pozwala uniknąć, dodatkowego nakładu technologicznego, np. w postaci serwera webowego niezbędny do udostępniania usługi sieciowej.