Senior Software Engineer at Adobe
Simion Florentin is a Senior Software Engineer at Adobe, where he helps building a globally distributed network to handle data collection and event processing in real time.
At Adobe, he also advocates for Kotlin usage in server side applications, sharing his experience and knowledge with interested teams.
Handling billions of events per day with Kotlin Coroutines
Migrating a 12-year old application to an asynchronous non-blocking model is not an easy task. What seemed to be impossible at first, was made possible by Kotlin and its Coroutines. It allowed us to reuse most of the existing code base and have a working prototype in a matter of days. Inter-op with Java really pays off!
The application is business-critical and processes billions of events per day in real-time with millisecond latency. It also used to burn a lot of $$ in the process, as a single instance of the application occupied a fairly large EC2 instance, running more than 1K threads and handling over 5K IOPS.
In this session we will walk through the process of using Kotlin to turn the app asynchronous and how we've integrated the coroutines stack, alongside (old) existing technologies. We will also show how this change made the application more efficient — yielding a 25% cost reduction, which translates into millions of $$ annually.
We will also cover challenges encountered along the way when doing such a change, like:
- Low resolution telemetry data may hide bottlenecks
- Asynchronous alone does not guarantee low latency
- Unexpected impact on dependant services
— so that you know what you are up against!