The tech world is an explosive one. So many different products are available out there – and new ones see the light every day. Each tool serves a purpose in a certain area. Be that decision-making, test automation, code analysis, performance metrics, application building, contactless payments, a new IDE or a new programming language – the list could easily fill up the entire article.
Every now and then, something will come up and make a dent in its area. Something that gains adoption and eventually affects or redefines how the industry reasons about something.
This is the case for the two technologies I speak about, Akka and Kubernetes. The main reason for me to craft a talk about them is that, even though they operate at different levels (application the former, infrastructure the latter), their core concepts somewhat overlap.
In particular, they both promise elasticity (ability to scale resources up and down) and resilience (the ability to fully recover a component from failure). This creates confusion and questions such as: does one supersede the other one? Do I need both when I’m already using one of them?
My co-speaker and I spent a great deal of time trying to answer these questions. What made the collaboration especially enriching was that we are both very connected to two different communities (the reactive community and the devops community). We had many long discussions, and distilling a common answer from our different views wasn’t always straightforward!
Fortunately, the outcome of our research has been quite rewarding. We submitted our talk to a variety of different events and the high acceptance rate confirmed that we were indeed shedding light on a real issue.
Our main conclusion is that the combination of both Akka and Kubernetes enables an unprecedented level of control over the elastic and resilient properties of your (micro)services system.
On one hand, Akka
- Lets you write truly cloud-native stateful services, ready for scalability from day one
- Helps your application achieve resilience at the level of your own business logic
- Runs on the JVM, which is the most used runtime environment globally
Kubernetes, on the other hand,
- Is a great choice for the provision of all cloud resources needed by your services
- Helps scaling and recovering failing services at an infrastructure level
- Is offered as a managed service by all major cloud service providers.
Our talk arrives there by first introducing the core concepts about distribution and resilience in a complex system, then going a little more into technical details.
The Codemotion crowd in particular was really interested about the Akka side of the talk, which is probably to be expected as Kubernetes already enjoys greater popularity. There were lots of questions about how Akka and its programming model help achieve resilience and elasticity on the application level, and quite a few folks told us that trying out the combination of the two technologies was on their list.
If you need to operate stateful services in the cloud, Akka and Kubernetes are probably one of the best solutions out there. In case of doubt (or disagreement), feel free to reach out!