The good stuff about akka-streams
A couple of years ago Stefan (my partner-in-crime) and I came across an open-source project named “akka-streams”. For those of you who don’t know akka-streams: It’s an open-source programming library for message processing based on Java/Scala.
On the akka gitHub page we find the following quote:
“We believe that writing correct concurrent & distributed, resilient and elastic applications is too hard. Most of the time it’s because we are using the wrong tools and the wrong level of abstraction.” _
Having been in the message processing business for many years (especially in telecoms), and understanding the challenges, the proposition of akka-streams sounds really compelling:
- Reactive (following the Reactive Manifesto)
- Scalable (XXL scenarios)
- and much more.
The hard stuff about akka-streams
Naturally you want to kick the tires on such a nifty library, which we did and came back impressed. In principle that is: While akka-streams keeps the high-flying promises it makes, we were wondering why adoption is not much broader. Here are some of our findings:
Turns out akka has quite a learning curve. It’s not for the faint of heart, and you will take a lot of wrong turns on your path to glory.
Because of this — and depending on your aspired solution — it will take time to come up with a truly productive drop. Once you’re there, you have acquired a lot of specialized knowledge on akka which is hard to replicate to other team members. Plus: You have a one-off solution.
akka-streams OOTB lacks important features like monitoring, high-level error handling, transactional security, simple deployment techniques, data awareness and more. While this is very necessary stuff for any production environment, it does not add value to the actual problem you are trying to solve. It’s really cumbersome to add this functionality yourself for the n-th time when instead it should just be boilerplate code.
Since akka-streams is a programming library, there is no low-code approach to it. You include it in your Java/Scala project like any other development kit, read the docs, and start making steps. A lot of the problems which akka-streams addresses, however, are straightforward and should not require you to learn about the intrinsic mechanics of akka itself.
I could highlight more things that can make akka cumbersome to adopt, but this should suffice for making the point. Don’t get me wrong here, though: akka is absolutely awesome, and we love akka.
layline.io: Low coding akka-streams
When we used akka-streams, we found that its level of abstraction is great and provides rich functionality, but it still was not where we would like it to be. It’s a bit like putting a F1 race car together with only high-level assembly instructions. Not an easy task.
Hence, we created layline.io. Instead of providing the F1 racer in pieces, we provide a configuration interface to customize the experience in a guided environment, and test-drive your setup instantly. Running 100% akka-streams, of course, so you are not missing out on the greatness and all of its advantages.
In essence, we combined
- akka-streams, and
- our expertise and vision
- a state-of-art web-driven user interface, and
- a powerful reactive engine, which understands how to translate config-data into a complete akka-setup at runtime and execute it.
Using akka’s own credo, we have added an even better layer of abstraction on top of akka into a new product: layline.io now enables you to take advantage of all of akka-streams without having to know the library yourself. It hides the complexities and allows for rapid configuration, test, and monitoring.
If you are interested to learn more about layline.io, get in touch or get your own free copy from this website (yes, completely free).
While we are still working on the documentation in many places, we are happy to demonstrate how powerful layline.io is. Just let us know. We don’t bite :-)
In future posts we will cover individual capabilities in more depth, as well as cover other interesting topics around stream message processing. If you are interested in specifics, please get in touch.