|
Unless your app is going to hit massive scales (hint: it won't. the chances that you are one of the few that do is so minuscule, it's not worth assuming it will happen), optimise for simplicity, not scale. 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. |
You can't go on assuming user base won't grow. Also massive is not a quantifiable amount. There are certain thresholds that require the application to scale, and those depend on the functionality expected. If I hash passwords, but I can only hash 100 at once. If I offer integration API's that get hit more often than my actual site. Will I need to scale my monolith app for those specific cases?
To say that a large application let's you focus on just dev work is a bald statement in my opinion. A large application is harder to test, harder to deploy, changes have a higher risk, risk of data leaking by mistake, very coupled, and not simple -> harder to design for -> harder to move stack. Just on boarding an engineer into a monolith app from my experience is hard..
I'm not sure how with micro services you're worried about the processes? I lost you there..
I have a quick script that spits out a microservice with basic health endpoint. I made a communication module that uses sockets and parent as a bus to communicate through.
A bank offers some sort of signin application, statement generating (sent to email), some api's for payroll, and maybe an integration with a credit card where it notifies customers about any purchases made. When sign in is down, it doesn't mean you shouldn't get alerts about CC purchases, or that reports shouldn't be generated. Even when you're signed it's possible certain feature might not be active. With a mono if a bug took down the application every service you offer is down. --- This scenario is very much around the kind of service we want to provide.