As you can see obove, it’s not completed. As I study Lagom, I can say more about these topic. And fill it more!
These days, Internet Technology is growing up and there occur many buzzwords around. ‘Reactive’, ‘Micro Service’, ‘Event Sourcing’, ‘CQRS’… Many so called ‘Progressive Company’ cry out these buzzwords. And I also want to know about this. After moving to Kakao, I usually use Play, Akka, Finatra.(Personally, Finatra is a very good framework to make a productive micro server.) And looking forward to finding a very good solution to manage micro services in our service. And these series is a very short journey about Lagom.(Because I just want to taste Lagom. Of course, if I decide that it is the real solution to our service, it will be long journey 🙂 )
What is Reactive?
One of the hard waves around here is ‘Reactive’. You can read and sign to ‘Reactive Manifesto’ in here. Ok, after sign to Manifesto, Let’s summary what is Reactive System.
- Reactive is Responsive. Service has to be responsive at all time.
- Reactive is Resilience. Service has to be responsive at to time of failure occur.
- It means that, if an error occurs, the error is isolated and not affect to other component or service.
- Reactive is Elastic. Service has to be scaled elastically when system load.
- It means that, if the service loaded, for example, Akka system assign more thread to the loaded actor.
- Reactive is Message Driven. Reactive call remote system by targeting message.
Reactive Programming vs Reactive System.
This topic is not related to the main subject. But it is very important to distinguish between Reactive Programming and Reactive System. It is referenced from this article. It’s just summary about this article.
The reactive system is the way to build service. Above description about reactive is about Reactive system. Reactive system passes messages to the target. By message passing and mail box, we can assign more resources to some component(or micro server). We can scale horizontally or vertically.
The Reactive Programming is the way to handle events. We catch events from event stream and handle by chaining functions. We catch event compare to Reactive System which operated by message passing. Reactive programming is usually async,(In fact, have to be async) we can assign to another job which needs computing resource.
Reactive Programming is fit to Reactive System. Words are very awkward, But it means very natural. Reactive Programming is tightly coupled between Event and computing by chaining. And this makes less resilience. And Reactive system is key to resolve this problem.
What is CQRS?
CQRS is very simple. In service, we separate Command (Write) and Query. (Read) Martin Fowler describes it very well in this article.
it’s like read replica in SQL, Application request writes and read in different API or server.
As you can see, Service Interface(API Gateway) request read to Query Model, and write to Command Model.
What is Event Sourcing?
Event Sourcing is making event as a sequence of data. Let’s think like this. We make some data ‘a’ to 3 by adding 1 and 2. In common architecture, We only store that a is 3. But in Event Sourcing, we store that
- ‘add 1’ event occur,
- ‘add 2’ event occur.
So, we can get that a is 3. It means that we can get system service when a is 1 or a is 0. This can restore the service any time, any status.