Am I misunderstanding this or is this not the vast, vast majority of all cases?
Am I misunderstanding this or is this not the vast, vast majority of all cases?
edit: This is done not because of any considered technical reasons, but because that's how one learned to deploy apps.
And it costs almost nothing to write it that way from the start, but it's a pain to separate them out later.
I'd call that a considered technical reason.
edit: I feel like I should be more specific here. I would only call it a considered technical reason if it was actually considered. The fact that it is possible to come up with good reasons is not relevant if no thought went into it at the time of design/development.
For blast radius, you have things like patching (you don't want to botch the database accidentally updating a shared dependency with your app), resource management (don't want your DB to eat all the RAM or I/O and kill your app), if someone botches maintenance there's less to break at once
You don't have to use VMs but they're one way to do it. Container orchestrators achieve many of the same goals and automatically restart workloads if a physical machine fails, too