| Our current architecture at work is:
|frontend angular| -> |Node.js MW Layer| -> |1 large microservice + 3 smaller ones all in Node.js| A new engineer on the team suggests that we merge all the applications together. We render the frontend using express, and combine the microservices together. He's argument is that monolithic apps can still scale well. Furthermore, it'll be easier for engineer to roll out features since the entire code is in one project, and a feature can be developed all the way from the back to the frontend. I'm finding his argument hard to believe. An app of that size can end up very coupled. It will be a single point of failure. If one child process crashes so much damage can be done. DB ORM will run slower because of how DB intensive the app will be. Obviously many of these issues can be solved with sufficient scaling. Which would also cost more since we're not scaling whats in demand, but instead the entire app. -- Even if we decide to split the app down the road that only means a way larger effort. Lastly a very smart person told me once to shard early. It's hard enough to shard early he said, so why do it when you're running out of time. That engineers argument is to just keep scaling up the DB. While I agree that's a temporary solution, in a world that produces and collects more data each day, sharding in my opinion is inevitable. |
Micro services are the exact opposite of simplicity. What used to be a method call, is now a network request.
With a monolithic application, you have to worry about the application process (which may be Node directly, or may be an application server like Phusion Passenger), and the associated services it depends on: database, caching, possibly http/tls front-end.
With a micro services architecture you have to worry about all those processes for each and every micro service. Sure, they may be sharing a database, but they also may not. They may be sharing a caching layer, but they may not. They may not even use the same caching/database software.
Unless your app already works when one of the four micro services is down, any argument about "single point of failure" is moot, because you currently have 4 single points of failure.