To support that 1:10000 transaction that takes
the most time and needs the most scaling?
Done in the most naive way possible (just adding more servers to one giant pool) yes, it's as ineffective as you say.What can be effective is segregating resources so that your 1:10000 transaction is isolated so that it doesn't drag down everything else. Imagine: - requests to api.foo.com go to one group of servers - requests to api.foo.com/reports/ go to another group of servers, because those are the 99th percentile requests They're both running the same monolith code. But at least slow requests to api.foo.com/reports can't starve out api.foo.com which handles logins and stuff. Now, this doesn't work if e.g. those calls to api.foo.com/reports are creating, say, a bunch of database contention that slows things down for api.foo.com anyway up at the app level due to deadlocks or whatever. There are various inefficiences here (every server instance gets the whole fat pig monolith deployed to it, even if it's using only a tiny chunk of it) but also potentially various large efficiencies. And it is generally 1000x less work than decomposing a monolith. Not a magic solution, just one to consider. |