Rappi is an application that helps users with their everyday shopping needs. From restaurants, supermarkets, pharmacies, spirits, travel, delivery, fintech products, and more.
Scenario
At the technical level, Rappi is a large e-commerce platform and one of the top 100 AWS resource consumers worldwide, running over 7000 EC2 servers and over 1800 nodes on EKS.
Their stack runs on Amazon on a dual combination of ECS and Kubernetes. +750 developers of all sorts are allowed to choose their coding language, and the Infra team (Cloud Engineering - 70 people) provides the necessary tools to make it a reality. One of the tools that allow the aggregation of heterogenous services is KrakenD.
Rappi runs over 2000 microservices (rather nanoservices) on ECS and another 1500 microservices for the Rappi Pay service. Rappi was able to destroy the monolith in 2021, we could see their developers drinking from mugs and dressing shirts with the slogan:
I killed the monolith
How KrakenD helped Rappi
Previous to the adoption of KrakenD, all teams were developing custom solutions to solve cross-cutting concerns. However, Rappi wanted to standardize the solutions to common problems in their microservices and speed up the development process. For instance, they needed JWT validation in front of all of its services, so they adopted Auth0 as the identity provider and KrakenD as the front validator.
Rappi tested other solutions before adopting KrakenD, but they wanted a simple solution with powerful functionalities beyond “a simple router.” As a result, the full implementation of KrakenD on Rappi took only 1 month despite the organizational complexity.
Rappi runs today +20 different KrakenD gateways (in multiple containers each) that aggregate and offer access to a vast catalog of services. Each gateway provides a functional group, like for instance, an “Orders gateway.” The KrakenD API gateways are served under a common DNS services.rappi.com
glued with a router.
All metrics of KrakenD are pushed to Splunk SignalFX where Rappi can follow the evolution of their services in a centralized way.
As per the configuration, the KrakenD config is automatically generated through a parameters YAML file that defines the rules to build the final layout. It uses a Jinja template with over 35,000 lines of conditions, giving an idea of the complexity an organization like Rappi supports.
Results and Future Plans
The future of KrakenD on Rappi is bright as it has proven in the past two years that it is a reliable and easy to configure tool. In Nicolás Vila’s own words:
We didn’t have to fight
KrakenD offered Rappi the standardization tool they need to consume such an impressive number of microservices. At the same time, the simplicity and flexibility of KrakenD allowed Rappi to adjust KrakenD’s configuration to their continuous integration tools.
KrakenD was adopted at Rappi in May 2020 and today continues to feed content to their massive user base, delivering a reliable API service that hasn’t caused any downtime.