
Piotr Osowiecki
Solution Architect
An architect designs a house, and we design a new solution for our group application. Explore the tools we use to ensure the foundations of R-Flex and E-Flex are stable and the entire structure is robust.
R-Flex is a fully digitalized solution by the RBI group, aimed at simplifying currency exchange. Its two fundamental principles are simplicity and security. R-Flex functions as a web application, tailored to a responsive website. Currently, nearly 40,000 people in RBI Group banks in Romania, Croatia, and Hungary are using the application, with plans for expansion to other countries. The platform is cloud-based (AWS) and has received the AWS Innovation Award.
The application allows customers to view widgets with real-time currency exchange rates, exchange currencies with immediate settlement in the user's account, manage accounts, configure preferred currency pairs, and customize the main screen to individual needs. The application also enables browsing transaction history with detailed information and defining rate alerts to notify the customer of achieved rates. Additionally, there is an extensive reporting module available.
E-Flex, on the other hand, is a module designed for dealers and other bank employees to manage products available to R-Flex users. It provides access to essential customer data, allowing employees to monitor transactions in real-time, view transaction history, manage them, and create reports. E-Flex offers the ability to manage and configure settings for customers, such as currency pair availability, access to buy or sell, account access, margins, limits, etc., both at the individual and group levels. With a simple and intuitive interface, handling available functions is straightforward.
The group application R-Flex is hosted on AWS, where we utilize Merlin's solutions. Merlin is a group provider of cloud platform embedding (PaaS model), setting up the platform with the components we need in a straightforward manner (using AWS services, our solutions, and other group tools, such as ORCA, CDA). The system consists of two web applications: R-Flex for external customers and E-Flex for internal customers (bank employees). For R-Flex content serving, we use a popular and proven solution, consisting of AWS CloudFront and AWS S3 bucket. For E-Flex, a CDN service hosted on AWS Elastic Kubernetes Service fulfills this function. In this case, we also use AWS S3 for storing static content. Our front-end applications are developed using the Angular framework and provide RWD for mobile devices.
For serving dynamic content for external customers, we use the Kong API gateway and the heart of our solution, which are services embedded on AWS EKS. For R-Flex, we chose a modern microservices architecture, based on the CAP theory (Consistency, Availability, Partitioning), which allows us to create an efficient, scalable, and resilient system. Achieving such architecture was facilitated by adopting the event sourcing approach + Command and Query Responsibility Separation pattern (Axon framework), event streaming (Kafka Streams), and data streaming (project reactor).
Storing replica data from NWU in the system allowed us to separate ourselves from the NWU ecosystem and possible bottlenecks when fetching data from their systems. We store such data in relational databases (AWS RDS). Inside services, maintaining replicas of the data they need (mostly stored in NoSQL databases, AWS DocumentDB) allows us to maintain high service independence and continuity of operation. This is essential in case of service unavailability, which is the owner of the data. In such architecture, system integrations are mainly based on asynchronous communication, for which we use a Kafka cluster (AWS MSK) as a broker. Managing business processes that handle FX transactions is also crucial in our architecture. Here, we chose Camunda as a solution. It enables us to deliver transparent, high-quality, and easy-to-maintain business processes.
R-Flex is a group solution, meaning it can be used in multiple NWUs simultaneously. To meet the requirements in our application, we applied a Multitenancy approach. This allows our service to handle requests from multiple NWUs within the same working time, optimizing costs, facilitating maintenance, and providing parallel delivery of functionality to all interested parties.
Another milestone was the introduction of the ability to enable/disable business functionalities within NWUs, allowing changes to be implemented despite the unreadiness of all NWUs. We also introduced release flags, enabling more frequent deployments to production, even though changes in packages were not fully ready yet.
One of the recent enhancements we are introducing to our application is faster and standardized integration with subsequent NWUs through the group solution RICE. To achieve this goal on the R-Flex side, we implemented new adapters corresponding to group standards for synchronous communication, using RICE REST API. We also introduced a new adapter for asynchronous communication with NWUs, utilizing RICE streaming API. This will enable us to automate, increase efficiency, and improve the reliability of many processes in R-Flex. Another important step was the use of another RICE component called RCFS (RICE Customer Federation Service), which allowed us to implement high-quality Single Sign-On authentication for our platform. This was possible through the use of OAuth 2.0 PKCE flow and OpenID Connect standard.
Maintaining full transparency, it is worth mentioning the challenges that still lie ahead of us. They mainly concern the performance, stability, resilience, and improvement of the quality of our application, as well as the ability to easily deliver further business functionalities. However, with such solid foundations, implementing the necessary improvements will undoubtedly help us achieve our intended goal.
Solution Architect