Akka Projections - Ditch the Message Broker, Go Faster - Read Blog
akka akka-streams reactive-streams podcast

Typesafe AMA Podcast Ep. 02 feat. Akka and Reactive Streams with Konrad Malawski

Everyone wants to talk with Konrad Malawski on a 1:1 basis. I'm the lucky person who got 15 minutes of his time.


Tonya Rae Moore: Hi, and welcome to the second ever Typesafe AMA podcast with our experts. My name is Tonya Rae Moore, and I'm a product marketing specialist with Typesafe. I write some of the blogs, I record our webinars, and now I run our podcast.

Today we're going to talk with Konrad Malawski. He's a Typesafe hAkkker now but did a lot of everything else before then. He's been involved with numerous Java, Scala and CS user groups and is a very much sought after conference speaker and program committee member. I first met Konrad at a long, long past JavaOne, when we both worked for other companies. And last night at our San Francisco Scala meet-up group was the first time we had seen each other since then. So let's catch up on what Konrad has been doing.

For the newbies, can you give a little bit about your background and what led you to Typesafe and why you're at day one? Hi, Konrad!

Konrad Malawski: Hello. So, with my background because I was always interested in high-performance stuff, which both led me to JVM and thence to Scala and Akka, which is kind of what this is focusing on. And, by just starting out to contribute in open source to Akka, that has led me to eventually join up with Typesafe and start developing full time. And at JavaOne [we're here on] this year to talk about Reactive Streams, which is a joint effort we did together with the Pivotol, Red Hat [guys] and Oracle, as well. And it's a protocol that's going to land Java 9, we believe. So it's still something in the very far-off future, a few years at least.

Tonya Rae Moore: Sorry if we're getting any background noise. We're actually right in the middle of JavaOne. So we will try and talk around everything. So what is Akka? Let's just start there.

Konrad Malawski: Right. So for those of you listening, if you didn't get to give a cont-- any [unintelligible] try. So Akka is basically a small toolkit that you can pick and choose a bunch of utilities from, but it's all built around the concept of actors, which are conceptual units of back people. They can do certain tasks, and they do them -- these tasks -- one at a time; however, in the grand scheme of things, these are very easily [very realizable]. So you can use Akka to build both scalable in terms of multiple nodes and also scalable in terms of just multiple threads and systems. And the conceptual model you use to build these things stays the same. And it's just messaging, which is both easy to understand, easy to track. And, recently the new improvements in Akka have made it also more type-safe the than previous iterations. So once it compiles your server, it actually works.

Tonya Rae Moore: That's something that people like to hear, I think.

Konrad Malawski: Yeah. "Just works" is a killer feature, right?

Tonya Rae Moore: So back in the old days, we used to tell the joke that Java has nothing to do with JavaScript. Java is to JavaScript like ham is to hamster. So is Akka like Akka Streams in the same way?

Konrad Malawski: Somewhat. A little bit more of a "ham is to hamster." So Akka for Akka Streams is the underlying engine. So it's like if you buy just an engine of a car, you cannot really drive it around. So this is what Akka is to Akka Streams: It's the internal implementation which provides the high-performance messaging. But using Akka Streams -- so our new APIs -- you don't really see it directly. You know it's there and you know how it works, more or less, but the APIs you're exposed to is the car and not the engine.

Tonya Rae Moore: Interesting. That's not quite as concise as "ham is to hamster," but still I get it.  So how do Akka Streams relate to Reactive Streams? Give me a pathway here.

Konrad Malawski: Right. So that's a very close relationship, on the other hand. So I guess that we work together with a bunch of other people in the Java community [unintelligible]. So the guy behind RxJava and Erik Meijer, who did the Reactive Extensions [unintelligible], actually. And then other implementations, which are some of the Spring guys and some of the Spray guys from the Scala side. And to finally tie it up, why I'm talking about it, is everybody was seeing the same problem; and the solution to the same problem is Reactive Streams standard. So the problem that everybody was seeing was that "Well, [great. My] app is really fast, but I want it to fail gracefully. I want it to degrade . . . If I can't serve you a nice image, I want to serve you an image that says, 'We cannot serve you an image.' "

Tonya Rae Moore: Okay, that makes sense.

Konrad Malawski: Instead of fetching the image from another server, I can just have one cached that says: "We're sorry, no image." Stuff like that.

And one of the more interesting thoughts about that one is if you go really fast when you have this car, you'd rather not want to crash into a wall with it. [You want to] slow down before you crash into the wall. So this is the problem in IT that we're having with systems which go really fast. They weren't really good at slowing down, including Akka. It's really fast, and it's sometimes too fast. And basically if other parts in your system are not as fast as your other part which is Akka, it would kill the other slow system. So actually being really fast is sometimes not a good thing. Other implementations have the same problem, and Reactive Streams solve it by introducing a concept we call asynchronous back pressure. And it's basically the signal that allows you to [unintelligible] [towards], conceptually speaking.

Tonya Rae Moore: That also sounds like a very useful . . .

Konrad Malawski: So let me just tie it up with how Reactive Streams, because now we know what it does, what is Akka Streams? So Reactive Streams is only the general idea, the protocol, the specification. So it doesn't really do anything. You need to implement it. So the actual implementation of the protocol is Akka Streams, and that's using Akka underneath to implement Reactive Streams.

Tonya Rae Moore: Aah. I don't know if you know this, but since we've moved on from our Monitoring Beta and we're getting ready to do our first release, I'm going to be your product marketing person coming up. So I am moving into Akka, and I'm listening to every single word you say right now. So tell me how our customers are distributing Akka applications.

Konrad Malawski: So of course there's two trends. For one thing, there is the Akka cluster, which is the usual clustered applications. And then there's the trend of microservices. People always are very confused: Do they connect to each other? Do they oppose each other? How can I use a cluster when I want to go microservices? And actually, the answer is pretty simple because microservices -- if you have a microservice, it's doing a thing. It doesn't necessarily mean that it's a very small thing machine-wise -- number of machine-wise. Compute-power-wise, maybe it does need a lot of resources, even if it's an image-serving thingy; but maybe you're generating the images on demand or from some statistics [safe] and stuff like that. So you actually do need more compute power than a single node can give you. This is where the Akka cluster fits because node-to-node communication is both super-fast using Akka remoting, and it's super-easy to scale, as well. So you can scale a single microservice inside, and no one really cares from the outside how many nodes you have. It's still providing the same semantics to the outside world, but actually inside you've added 10 nodes or so and no one has cared about that. So they do connect very nice to each other.

Tonya Rae Moore: It's funny because, as you said, everybody is talking about microservices now; but Typesafe has embraced that architectural style for years, way before that word was even being used. So is that something that you were fairly comfortable with earlier than some people?

Konrad Malawski: Yeah, I guess so. On a conceptual level, some people even say that an actor is a microservice --

Tonya Rae Moore: Aah, sure.

Konrad Malawski: -- because it does one thing and it communicates using messaging. So if you think about it, what is a service? It communicates and it does a thing. Conceptually, pretty similar. So for us, communicating like that between actors and between services, we always were thinking about messaging. So it's a very familiar concept to us. Nowadays we've rolled out Akka HTTP. That's a rewrite of a previously known Spray HTTP server. So not only do we have this high-performance clustering; we also have a high-performance HTTP server to connect with the outside world.

Tonya Rae Moore: That's a . . . You're giving it . . . I'm so embarrassed right now. I know that you're on the Emerging Languages Committee for JavaOne this year, right?

Konrad Malawski: Correct. Yes.

Tonya Rae Moore: You also have a talk or a couple of talks? Is this what you've been talking about?

Konrad Malawski: Yeah, that's kind of what I'm talking about: the Reactive Streams protocol and how it came to be and, yeah, who was involved and why do we need it. And it's actually pretty interesting and the problem [from the committee's] point of view because there's not only talks about it on this JavaOne, but I can guarantee you the next JavaOne or -- the next JavaOne, it will be full of Reactive Streams talks.

Konrad Malawski: Why? Because people are talking about what is currently in JDK 8. That's because that's the latest current release. And people are starting to talk about JDK 9, which is mostly the module system; however, it also will come with Reactive Streams being part of JDK 9. So it's a standard we developed independently, like I said, with a number of organizations; however, it will become a JDK 8 standard. And then people will pick it up and figure out how to use it. And again, we are kind of one step ahead of you.

Tonya Rae Moore: Right. We're just waiting for the world to catch up with us, right?

Konrad Malawski: Yeah.

Tonya Rae Moore: Love it.

Konrad Malawski: Spreading knowledge from the future.

Tonya Rae Moore: So as I referenced earlier, we're rolling out Reactive Monitoring, which is super-exciting. Can you talk about that a little bit?

Konrad Malawski: It is, it is. And for people who've been tracking Typesafe for some time, maybe it seems like -- and even internally we call it a Phoenix because --

Tonya Rae Moore: Oh yeah, we had Console. Was that the name?

Konrad Malawski: Correct. Yeah, we had a project like that, and we put it [on hold] two years ago. I do want to explain how that happened and how it connects to the current push in case people don't know that Console existed. So the Console was Typesafe's attempt at doing -- or basically Reactive Monitoring, so monitoring who sent a message to where and across service boundaries. So we'd get a nice trace of which requests caused what downstream on whatever server to [unintelligible]. But the problem was we focused on too many things here at once. We couldn't really pull it off back then. 

However, the current push, instead of doing everything by ourselves, we are partnering up with a lot of existing monitoring solutions for the visualization of stuff -- so the current partner being Takipi. They're really great at, for example, when you do something wrong [through] an exception. Then they're able to help you a lot with debugging, and you get all the values of the variables inside an actor. So that's something they had, but we had no idea how to do any kind of tracing across those boundaries. And even if they could, they would do it in a way that's impacting performance a lot. That's actually something we're very good at -- so making [unintelligible] tracing and make it really fast. So instead of everybody trying to do everything, we are partnering up and everybody is doing the thing they're the best at. So we're doing the high-performance and data-collection parts. And for the data visualization and analytics, we're currently looking to partners, Takipi being the first one, and the next iterations of the stack introducing more open-source integrations -- for example, [Unintelligible].

So existing stuff that you have in your companies because you're not going to roll out a different one for each solution if maybe a new project is coming up and it's using Akka but the rest of the company is still using other stuff. So we're fitting into the existing work at this point.

Tonya Rae Moore: I really enjoyed . . . When I was talking to Dean at the first and last podcast, we were talking about our partnerships with Databricks and IBM. And I think it's so exciting that we, as a company, have a standpoint like: "Okay, we do this really well. We can't do everything. So instead of trying to cut somebody off at the knees, let's find and build good partnerships so that our customers get the best solutions across the board." I think that's such a great and kind of encouraging way to look at it these days, especially coming from where I did.

Konrad Malawski: Right. Yeah, it's really great that we don't have a huge ego and want to say, "We do everything. We're the best at everything" because we're not. We're really good at some things, and other people are also really good at other things. And to give our users the best experience, we need to combine these elements.

Tonya Rae Moore: We're pretty cool, I think.

Konrad Malawski: Yeah, I do like the project.

Tonya Rae Moore: This is awesome, and I'm really, really glad that you took some time to hang out with me. I hope that we don't have to wait so long to see each other again. And I'm really looking forward to working closer with you in the future. You've got a lot to teach me, I know.

Konrad Malawski: Will do.

Tonya Rae Moore: And the beer tent has been open for 16 minutes, so can I buy you a free beer?

Konrad Malawski: This sounds good.

Tonya Rae Moore: All right, great. Thanks so much to Konrad. Please check out Typesafe.com for more information about Akka, Akka Streams, Reactive Streams, Reactive [Platform], et cetera. And you can always tweet at us. I'm going to spell out Konrad's Twitter because . . . Can you . . . Is that a pronounceable word? Konrad Malawski: It's pronounceable in Polish. So it's @ktosopl, but you [would spell] K-T-O-S-O-P-L. Tonya Rae Moore: Right, for Konrad. @TonyaRaeMoore for me, and @Typesafe for Typesafe. I'll also be checking the Typesafe podcast hashtag -- I've got to practice that one -- for feedback and suggestions on improvements.

This is number two, so this is still a work in progress, gang. Any feedback is welcome. Thanks to everyone who listens.


(photo of Tonya and Konrad taken with Andrzej Grzesik directly after this podcast recording)


The Total Economic Impact™
Of Lightbend Akka

  • 139% ROI
  • 50% to 75% faster time-to-market
  • 20x increase in developer throughput
  • <6 months Akka pays for itself