If the modular monolith loads is module at runtime as DLL/.so/JAR etc, it is possible to go full microservice with it by just deploying each module in its own monolith, or probably more common you can do service oriented architecture by grouping one or more modules into a few monoliths. So it is way more flexible that a normal mononlith or a micro service and you get the best properties without none of the negatives. The only thing I see a microservice architecture does better is to allow mixing of languages since a modular monolith would require all its modules to be implemented in the same language. But this is a moot point because if that is a requirement, you can just as easily write multiple monoliths per language (which you would have to do in a microservice anyways).
You could, but keep in mind the modular monolith is a single deployment unit, regardless of how the modules are organized (in code, DLL, JAR, etc.), whereas microservices are separate deployment units for each module.
Hello Mark! I love your lessons! My question regarding this lesson is as follows: In microservices, we maintain independence between services by implementing, for example, a chain of events. But how to maintain such independence in the case of modular monoliths, where we do not use these events?
Basically, strict adherence to maintaining a separation of the domain and architecture components through automated governance with tools such as ArchUnit, NetArchTest, and ArchUnit.NET. I'll do a lesson on this for you!
You can use an in-memory event bus and use a layer in each module that its sole purpose is to communicate with the event bus, each module will expose its contracts to the event bus and that's how you decouple communication between modules. you can even use rabbitMQ nobody stops you
It's great to have this compare & contract with other styles, really helps build context. Simon Brown is mentioned in the video regarding Modular Monoliths, here is a 2018 GOTO talk on the subject; ua-cam.com/video/5OjqD-ow8GE/v-deo.html
Hello, Mark. I am sorry, but i cant understand the point of SBA at all. Please, can you make video about it? As i understood, thats for situation, when data in scalled micro-service instances is interdependent. But i am confused that its useful for whole system architecture, not just for micro-services like i said. So, i cant imagine what it should be(
The modular monolith is progressing It becomes like an embedded microservice with they features. Such as one base per module, a ban on direct function calls, a ban on the shared mutable state Now code checkers are able to guarantee the implementation of such architectural prohibitions So, it gets rid of many disadvantages and You can set high scores on all points
I am delighted to have discovered your channel Mark.
Glad you like it!
times two! I send them regularly to my team
Times three! :whoo:
Thanks and safe travels
Great lesson Mark
If the modular monolith loads is module at runtime as DLL/.so/JAR etc, it is possible to go full microservice with it by just deploying each module in its own monolith, or probably more common you can do service oriented architecture by grouping one or more modules into a few monoliths. So it is way more flexible that a normal mononlith or a micro service and you get the best properties without none of the negatives.
The only thing I see a microservice architecture does better is to allow mixing of languages since a modular monolith would require all its modules to be implemented in the same language. But this is a moot point because if that is a requirement, you can just as easily write multiple monoliths per language (which you would have to do in a microservice anyways).
You could, but keep in mind the modular monolith is a single deployment unit, regardless of how the modules are organized (in code, DLL, JAR, etc.), whereas microservices are separate deployment units for each module.
Hello Mark! I love your lessons! My question regarding this lesson is as follows: In microservices, we maintain independence between services by implementing, for example, a chain of events. But how to maintain such independence in the case of modular monoliths, where we do not use these events?
Basically, strict adherence to maintaining a separation of the domain and architecture components through automated governance with tools such as ArchUnit, NetArchTest, and ArchUnit.NET. I'll do a lesson on this for you!
@@markrichards5014 Thank you! I will be waiting for the video!
You can use an in-memory event bus and use a layer in each module that its sole purpose is to communicate with the event bus, each module will expose its contracts to the event bus and that's how you decouple communication between modules. you can even use rabbitMQ nobody stops you
Thanks a Great Great Great piece of knowledge , very rare on you tube , if possible please also add some code example
It's great to have this compare & contract with other styles, really helps build context.
Simon Brown is mentioned in the video regarding Modular Monoliths, here is a 2018 GOTO talk on the subject;
ua-cam.com/video/5OjqD-ow8GE/v-deo.html
Thank you so much for that link!
This is my favourite take about Modular Monolith architect ua-cam.com/video/BOvxJaklcr0/v-deo.htmlsi=Cuc0p2UZPYE-d1L1
I've found this a good structure for iOS and Android apps that are split across multiple teams
Indeed!
Hello, Mark. I am sorry, but i cant understand the point of SBA at all.
Please, can you make video about it?
As i understood, thats for situation, when data in scalled micro-service instances is interdependent. But i am confused that its useful for whole system architecture, not just for micro-services like i said.
So, i cant imagine what it should be(
I'll be doing SBA on lesson 163 (right after microservices), so stay tuned!
6:50 - The Fundamentals of Software Architecture does not have chapter on modular monolith. Only Layered, Pipeline and Microkernel.
That is correct - we didn't include this architecture style in our book.
The modular monolith is progressing
It becomes like an embedded microservice with they features. Such as one base per module, a ban on direct function calls, a ban on the shared mutable state
Now code checkers are able to guarantee the implementation of such architectural prohibitions
So, it gets rid of many disadvantages and You can set high scores on all points