How we built our highly scalable next-gen API-led platform
To meet our future demands we needed to look at our product development differently. We had to find a solution which would enable us to build products faster, more scalable, maintainable and customisable.
RDC has more than a decade long presence in the industry as aviation experts. In that time we've attracted many of the biggest names in the industry including Airbus, British Airways and Heathrow Airport. RDC's customer base is growing at a rapid pace and it demands more from the product development team than ever before. To meet those high-end demands we needed to look at our product development differently - to become more scalable, maintainable and customisable, and to build great products faster.
Adjusting to the future
Hitting the speed limits
Many of our legacy systems were built as monolithic applications and over time have become more expensive to maintain and scale. Most of their existing functionalities are tightly coupled and are difficult to reuse to build new products. As demands grew and we got closer to hitting the upper limits of our existing technology we knew we needed to scale, but the question was how?
Well, our search ended in the world of microservices. Unlike monolithic applications, microservices are highly scalable, easy to maintain and can be deployed independently. These services can be reused or aggregated to make more services. Considering all the various demands that could be placed across our wide range of data sources we decided to go down this path and codenamed this platform as "Project Q".
Implementing the future
We started by splitting up our large monolithic application into small logical units. As a team we decided on which different elements of functionality should group together based on their domain, behaviour etc. and then designed them into API services. Each new microservice is responsible for a small subset of specific functions. For example our "account" service is responsible for all our user related queries and functions, whereas our "charge" service is responsible for all our airport charge calculations.
As we grow, we foresee our services to be using multiple technologies running on different platforms so we wanted to make every service easily deployable regardless of the platform upon which it runs. We decided to use Docker as our container platform to run .NET Core applications in a Linux environment. Docker is a perfect fit for all our container needs and it is also the best in the market.
When we had all our microservices built and containerised, our next decision was to choose a deployment environment which makes them easy to deploy. Our experience in Azure and also considering the fact that several of our projects are already in DevOps (formerly VSTS), DevOps was the default choice for building and Deployment. You can read more about our DevOps cutover in the article “Moving all our projects to Azure Devops” by Gavin.
All great microservices need an orchestrator in order to help them play nicely together.
A few years back our team looked into Azure Service Fabric for container orchestration. Whilst it had many of the features we were looking for, ultimately we chose not to adopt it because of its infancy in the market and its lack of support for other major cloud providers like AWS.
In the end we turned to Kubernetes as our orchestrator for microservices - a matured and battle-tested orchestrator which is supported by all major cloud providers including Azure through their Azure Kubernetes Service (AKS).
By combining the power of continuous integration & continuous delivery along with technologies like Kubernetes & Docker, we've accumulated a very powerful toolset to fit our spectrum of DevOps requirements.
The future is now
APIs are first-class citizens
Now in RDC, APIs are first-class citizens - quite literally the building blocks of our future applications. This brand new infrastructure will power everything from logging activities to calculating complex airport charges. As our number one priority in RDC, our APIs are designed carefully so that they can be reused amongst all our applications, enabling us to scale more quickly as a result.
With all the above technologies we've got a platform which gives us infinite capabilities. Adding that to other future technologies like Identity Server, API Management Gateway, Azure Cosmos DB and Azure Service Bus our infrastructure is highly scalable. We can now concentrate on building quality products rather than worrying about scaling and managing applications, regardless of the demands.