Piotr Osowiecki
Solution Architect
Architekt projektuje dom, a my nowe rozwiązanie dla naszej grupowej aplikacji. Sprawdźcie, jakimi narzędziami posługujemy się, żeby fundamenty R-Flex i E-Flex były stabilne, a cała konstrukcja mocna.
R-Flex to w pełni zdigitalizowane rozwiązanie grupy RBI, które ma uprościć wymianę walut. Jego dwoma fundamentalnymi pryncypiami są prostota i bezpieczeństwo. R-Flex działa jako aplikacja webowa, dostosowana do responsywnej strony internetowej. Obecnie z aplikacji korzysta prawie 40 000 osób w bankach Grupy RBI w Rumunii, Chorwacji i na Węgrzech, a w planach są już kolejne kraje. Platforma opiera się na rozwiązaniach chmurowych (AWS) i uzyskała nagrodę AWS Innovation Award.
Aplikacja umożliwia klientom przeglądanie widżetów ze zmieniającymi się kursami walut w czasie rzeczywistym, dokonywanie wymiany walut z natychmiastowym rozliczeniem na koncie użytkownika, zarządzanie kontami, konfigurowanie preferowanych par walutowych oraz dostosowywanie do indywidualnych potrzeb głównego ekranu. Aplikacja daje również możliwość przeglądania historii transakcji ze szczegółowymi informacjami, a także definiowania rate alert’ów, które powiadamiają Klienta o osiągniętym kursie. Dodatkowo dostępny jest obszerny moduł raportowania.
Z kolei E-Flex to moduł przeznaczony dla dealerów oraz innych pracowników banku do zarządzania produktami udostępnionymi dla użytkowników R-Flex. Dzięki niemu pracownicy banku mają dostęp do niezbędnych danych klienta, mogą monitorować transakcje w czasie rzeczywistym, przeglądać historię transakcji oraz nimi zarządzać, a także tworzyć z dostępnych danych raporty. E-Flex to możliwość zarządzania i konfigurowania ustawień dla klienta, np. dostępności pary walutowej, dostępu do kupna lub sprzedaży, dostępu do rachunków, marż, limitów itd.- zarówno na poziomie indywidualnym, jak i grupowym. Dzięki prostemu i przejrzystemu interfejsowi obsługa dostępnych funkcji jest bardzo intuicyjna.
Grupowa aplikacja R-Flex osadzona jest na AWS, gdzie korzystamy z rozwiązań Merlina. Jest on grupowym dostawcą osadzenia plat¬formy na Cloud (model PaaS), czyli ustawienia platformy z komponentami nam potrzebnymi w bardzo prosty sposób (wykorzystując serwisy AWS, swoje rozwiązania oraz inne narzędzia grupowe, jak np. ORCA, CDA). System składa się z dwóch aplikacji web, R-Flex dla Klienta ze¬wnętrznego oraz E-Flex dla Klienta wewnętrz¬nego (pracowników Banku). W przypadku R-Flex do serwowania zawartości wykorzystu¬jemy popularne i sprawdzone rozwiązanie, na które składa się AWS CloudFront oraz AWS S3 bucket. Dla E-Flex funkcję CDN pełni serwis osadzony na AWS Elastic Kubernetes Service. W tym przypadku do prze¬trzymywania treści statycznych również wykorzystujemy AWS S3. Nasze aplikacje frontowe są napisane z wykorzystaniem frameworka Angular i zapewniają RWD dla urządzeń mobilnych.
Do serwowania treści dynamicznych dla Klien¬ta zewnętrznego wykorzystujemy Kong API gateway oraz serce całego naszego rozwiązania, jakim są serwisy osadzone na AWS EKS. W przypadku R-Flex wybraliśmy nowoczesną mikroserwisową architekturę reak¬tywną, która bazując na teorii CAP (Consistency, Availability, Partitioning), daje nam możliwość stworzenia systemu wydajnego, skalowalnego oraz odpornego. W osiągnięciu takiej architek¬tury pomogło nam zastosowanie podejścia event sourcing + wzorca Command and Query Responsibility Separation (Axon framework), event streaming (Kafka Streams) oraz wykorzy¬stanie strumieniowania danych (project reactor).
Przetrzymywanie w systemie repliki danych z NWU pozwoliło nam na odseparowanie się od ekosystemu NWU i możliwych wąskich gardeł przy pobieraniu danych z ich systemów. Dane takie przetrzymujemy w bazach relacyj¬nych (AWS RDS). Natomiast wewnątrz serwisów trzymanie replik potrzebnych im danych (takie dane w większości przypadków przetrzymujemy w bazach NoSQL, AWS DocumnetDB) pozwala nam na wysoką niezależność serwisów i cią¬głość ich działania. To niezbędne w przypadku niedostępności serwisu, który jest właścicie¬lem danych. W takiej architekturze integracje w systemie opierają się głównie na komunikacji asynchronicznej, do której jako brokera wyko¬rzystujemy klaster Kafki (AWS MSK). Bardzo ważne w naszej architekturze jest również zarządzanie procesami biznesowymi, które obsługują transakcje FX. Tutaj jako rozwiązanie wybraliśmy Camunda. Pozwala ono dostarczyć przejrzyste, wysokiej jakości oraz łatwe w utrzy¬maniu procesy biznesowe.
R-Flex jest rozwiązaniem grupowym, co ozna¬cza, że może być wykorzystywany w wielu NWU jednocześnie. Żeby spełnić wymaganie w naszej aplikacji, zastosowaliśmy podejście Multitenancy. Pozwala to w ramach tego samego czasu pracy naszych serwisów obsługiwać żądania z wielu NWU, co daje optymalizację kosztów, łatwiejsze utrzymanie oraz równoległe dostarczanie funkcjo¬nalności dla wszystkich zainteresowanych.
Kolejnym krokiem milowym było wprowadzenie możliwości włączania/ wyłączania funkcjonal¬ności biznesowych w ramach NWU, co pozwo¬liło na wdrażanie zmian mimo braku gotowości wszystkich NWU. Wprowadziliśmy również flagi release, dzięki którym wdrożenia na pro¬dukcję są częstsze, mimo że w paczkach zmiany nie były jeszcze w pełni gotowe.
Jednym z ostatnich usprawnień, które wprowadzamy do naszej aplika¬cji, jest szybsza i ustandaryzowana integracja z kolejnymi NWU poprzez grupowe rozwiązanie RICE. Aby osiągnąć ten cel po stronie R-Flex, wdro¬żyliśmy nowe adaptery odpowiadające standar¬dom grupowym do komunikacji synchronicznej, wykorzystujące RICE REST API. Wprowadziliśmy też nowy adapter do komunikacji asynchronicznej z NWU, wykorzystujący RICE streaming API. Pozwoli nam to na automatyzację, zwiększenie wydajności oraz niezawodności wielu procesów w R-Flex. Ważnym krokiem było również wykorzystanie kolejnego komponentu RICE o nazwie RCFS (RICE Customer Federation Service), który dał nam możliwość zaimplemen¬towania wysokiej jakości autentykacji Single sign-on do naszej platformy. Było to możliwe poprzez zastosowanie przepływu OAuth 2.0 PKCE oraz standardu OpenID Connect.
Zachowując pełną transparencję, warto wspo¬mnieć o wyzwaniach, jakie nadal są przed nami. Głównie dotyczą one wydajności, stabilności, odporności i podnoszenia jakości naszej aplikacji oraz zdolności do łatwego dostarczania kolejnych funkcjonalności biznesowych. Jednak mając tak solidne funda¬menty, wykonanie odpowiednich usprawnień z pewnością pozwoli nam osiągnąć zamierzony cel.
Solution Architect