Usually, in an event-driven architecture, events are emitted by one service and listened to by many (1:n). But what if it's the other way around? If one service needs to listen to events from many other services?| www.reactivesystems.eu
Given that events play such a central role in event-driven architecture, there’s an astonishing lack of agreement on what should be contained in an event. This may be rooted in the fact that, depending on your perspective, events fulfill different purposes.| www.reactivesystems.eu
An opportunity for everyone to make a little self-test. Do you believe any of these five statements? If so, don't worry, you're not the only one, I've come across them many times. I'm very convinced they're untrue, though. This is my little attempt to better a shared understanding of some properties of event-driven architecture.| www.reactivesystems.eu
There are a few ways for (micro-)services to communicate with other (micro-)services that can be rightfully classified as asynchronous1. But they have very different characteristics. Let’s have a look at them and their impact on the overall system structure. Asynchronous Option 1: Non-blocking network calls (e.g. HTTP, gRPC) On a low technical level, the term asynchronous is used to mean “not blocking the thread of execution”. If you call an asynchronous method, that method will be exec...| On Programming, Software Architecture, and Sociotechnical Systems
The Java Virtual Machine isn’t limited to running programs written in the Java programming language. Many other compilers output Java bytecode. Some of these languages have so far remained exotic. Others have found a large following, for example Groovy, Clojure, Scala, and Kotlin. Now Flix, another language that brings some fresh approaches to the JVM, has entered the scene. Apart from the JVM bytecode as compiler output, Flix doesn’t have much in common with Java. It’s a functional pro...| On Programming, Software Architecture, and Sociotechnical Systems
Project Loom is an experimental version of the JDK. It extends Java with virtual threads that allow lightweight concurrency. Preview releases are available and show what’ll be possible. Server-side Java applications should be able to process a large number of requests in parallel. But the model that’s still most widely used in server-side Java programming today is thread-per-request. An incoming request is assigned a thread, and everything that needs to be done to produce a suitable respo...| On Programming, Software Architecture, and Sociotechnical Systems
“Events! Events everywhere!” - or so it seems. This isn’t a bad thing, not at all: Event-driven Architecture can help to make microservices architectures scalable and resilient. But there are different patterns at play that we need to distinguish. And not everything is an event. An attempt for clarification. The term event is omnipresent in software architecture today. We hear about Event Sourcing and Event Streaming. In workshops with the subject matter experts, we do Event Storming. W...| On Programming, Software Architecture, and Sociotechnical Systems
Almost regularly I see Scala code where people program in a sequential, synchronous style and integrate an asynchronous I/O call by waiting for its completion with Await.result. But you really shouldn’t. Let me start with a quote from Viktor Klang, the author of the Scala Futures library: Some find it bad that Await.result is *outside* of Future. I find it bad that I added Await at all. #retrospective — Lgd. Viktor Klang (@viktorklang) November 9, 2015 Why is Await.result bad? If you call...| On Programming, Software Architecture, and Sociotechnical Systems
This is not actually about winter sports. Bear with me. Many years ago, when I was at Edinburgh University, a fellow student convinced me to go on a weekend trip with him to the Cairngorms, for snowboarding. I had never been snowboarding before in my life, and in many ways it was a frustrating experience. Most of the weekend I spent sitting at the side of the slopes, waiting for the pain to go away. But there were some moments, some great turns I managed, some beautiful, easy slopes where I f...| On Programming, Software Architecture, and Sociotechnical Systems
(*) Please don’t take the title too seriously. I have no empirical evidence that it is actually the case (that most Java developers love these features). I know some do, me included. Well, honestly, I just kind of liked the title of the first blog post when I wrote it, and decided to stick with the “love” theme. In my first blog post, 10 Scala Features Most Java Developers Love, I assembled a top 10 list of Scala features I wouldn’t want to miss, and that I found more or less universa...| On Programming, Software Architecture, and Sociotechnical Systems
This is a summary of the talk „A Pragmatic View of Reactive“ on ScalaDays Amsterdam. If you prefer watching a video, there’s a recording on YouTube. Or if you prefer German, there’s an even longer German version of this on Jaxenter. The term reactive (as in reactive systems, or reactive architecture) is defined in the Reactive Manifesto. It describes systems that are so elastic and resilient that they are always responsive, and they achieve this through asynchronous message passing. N...| On Programming, Software Architecture, and Sociotechnical Systems
Some Java developers seem to be intimidated by Scala. They get hung up on some possibly rather obscure feature, and from that conclude that the language must be a complicated maze you can only get lost in. There are so many features in Scala, though, that are so easily accessible, and that really just make the developer’s life easier. This is my list of 10 features that are easy to understand and use, yet very powerful.| www.reactivesystems.eu
There’s much uncertainty and doubt (and maybe even fear?) around event-driven architecture. One example is the belief that it’s irrelevant for REST APIs, as using HTTP verbs is quite clearly not event-driven. But behold - you don’t always have to go all-in to win.| www.reactivesystems.eu