Client
An Austrian company that provides modern software solutions to banks and financial organisations across Western Europe and Scandinavia needed backend app development from Elinext.
Project Description
Our client had a web banking application that provides modern solutions for asset management, online trading, and comprehensive financial services. They wanted to enhance user experience with the help of faster access to information, and increased operational efficiency by offering a fast and reliable search solution.
Due to the large volumes of data, their search functionality was slow and inefficient. Elinext employees who had experience in backend app development got the tech task and offered the architecture to the solution to operate faster. After receiving the green light from the customer on the tech stack and other technicalities, we started to work on the project.
Challenges
The main challenge our customer had was for the end user to receive the opportunity to have a fast full-text search in their banking app.
Creating a faster search would have enhanced customer experience due to increased operational efficiency and improved competitiveness in the market of software supply to banks.They were looking for a specific set of web development services.
Slow search speed has been a pre-existing issue due to the large amount of data, which made their search functionality inefficient. Also, we needed to take into account the tree-based access rights structure for different user roles and the user itself.
The customer was looking for a tech-savvy contractor with experience with Elasticsearch and other tools for backend app development, and ability to implement fast and efficient search solutions. They were satisfied with their front-end software development as it was.
If we have to list the main challenges:
- to significantly reduce search times within the banking app
- to enhance data processing efficiency
- to improve the overall user experience by providing faster access to financial information.
Process
Positioned on the market as a company that has extensive expertise in banking software development services, Elinext connected with the customer.
The team consisted of two senior developers with expertise in backend development. The distinguishing factor was that the developers had previous successful experience working with Elasticsearch, Apache Kafka, and Docker.
Both our engineers mostly worked independently, with brief daily meetings with product owners throughout the week. They created our own tasks and presented demos at the end of each week to showcase progress. Occasionally, the team had meetings with the client to discuss requirements and make adjustments as needed.
Elinext engineers used Grafana and Prometheus to monitor each system component for evaluating performance and efficiency. Additionally, the provided endpoints for retrieving system statistics.
Stage one of the project was design and architecture development, it took Elinext developers one week to define the design/architecture and choose technologies and components to use to complete the project.
Stage two was the development and implementation. The estimated period for it was two months (with an extra week planned for force-major situations), but it was completed a week ahead of schedule.
Solution
Our engineers leveraged their previous experience in backend app development with similar projects. They used Elasticsearch for fast full-text capabilities, Kafka Connect for real-time data synchronization, and Docker for containerization to ensure portability and consistency across environments. The decision to use Quarkus, Helm, and Kubernetes was based on the need for high performance, scalability, and efficient deployment. This was the first project with the usage of these technologies by our engineers, so they’ve learned in the process. The main idea is to add a local cache for each System to store data and access right for quick search and add a global cache which should be synced with local caches. At the same time, each local cache also should be synced with System’s DB: Database synchronisation with local cacheThe distributed cache consists of:
- Elasticsearch Cluster Container (local cache, global cache). Used to store and manage search data.
- Cache Sync Service. It connects to a messaging service to receive notifications of new or modified (deleted) data. It then passes this data to the appropriate Elasticsearch index. This process ensures the cache remains synchronized with the data source information. Also, the service can produce sync events for Kafka Connect to make the global cache synced with the local cache.
- Global Cache Sync Service via Kafka. Kafka Connect syncs the data from local caches to one (or multiple) global caches.
- Search Backend. Implementation of Elasticsearch methods is made to find and get data.
The distributed cache
Tech stack:
- Quarkus. Chosen for its high performance and faster startup times compared to traditional frameworks (i.e. Spring), making it perfect for cloud-native applications and microservices.
- Elasticsearch. Chosen for its powerful full-text search capabilities, which are essential for providing fast and accurate search results within the application.
- Apache Kafka. Used for data synchronization due to its ability to handle large volumes of data in real-time, ensuring consistency and reliability across multiple system components.
- Docker. Used to containerize the application, enabling it to run consistently across different environments and simplifying deployment processes.
- Helm and Kubernetes. Used to streamline the deployment and management of containerized applications, allowing for easy scaling and orchestration of services.
- Docker Compose. Used to simplify the configuration and management of Docker containers during development.
Our engineers spent considerable time learning how to handle security certificates. Additionally, they had to adjust the architecture to meet new client requirements and manage complex search queries in Elasticsearch.
This is the architecture of the sync service:
Synch service architecture
Our engineers used Grafana and Prometheus to monitor each system component to evaluate performance and efficiency. Additionally, they provided endpoints for retrieving system statistics.
As for QA, the developers conducted unit tests and manual testing to ensure functionality. Additionally, they performed performance testing with large volumes of data to evaluate the system's efficiency under heavy load.
Results
Custom software development services are one of our major specialities. Elinext has successfully delivered the project on time and within the allocated budget. The system that got our implementation is being integrated into the customer’s environment. It should increase productivity due to faster and more efficient full-text search capabilities, improved user satisfaction from quicker access to financial data, and enhanced scalability to handle growing data volumes. In the long run, it would lead to cost savings from system optimization and automation.
The results of Elinext's involvement in backend app development should be assessed in the future after the integration of the system is complete. The client also has plans to add an admin panel and SSO to the system in the future, so the project has the potential for more future cooperation. Our client is undoubtedly satisfied with our financial software development company.