The main arguments in favor of microservices:
- You have freedom of writing each service with custom language and stack. We just use js/ts everywhere.
- "If you have 100 devs on a project in a monorepo then they will step on each other toes. In this case, split the repo in several and each repo pack as a microservice". And yet big companies like Google have monorepo. I don't have 100 devs, I have 5. We split code on features, not on services. Each feature contains all the layers ui/db/etc. This way developers merge without conflicts, cuz each of them working on a separate independent feature.
Currently, I prefer run systems as a monolith docker container with nodejs. If I need horizontal scale, I run 10 of these containers. Cloud providers handle load balancing/queues out of the box.