If the codebase is different you can force the separation not just ask nicely to keep the code well modularized.
for example: golang - multi-module workspaces javascript - yarn workspaces
With this setup, you can create modules a, b and c. And then add restrictions about which which modules are available to a given module
Just keeping things neat doesn't go nearly as far as a separate process on separate machines. Monolith might be better but I don't think it's a situation where you can have it all.
The blast radius is a single request, right?
In every likelihood it _is_ a separate process on a separate machine.
With micro-services if you screw up a deployment the service is down and if your platform is well designed the system will be degraded but not down.
With a monolith the whole system is down.
No, you are just at reduced capacity.
The moral of the story is not to roll out to 100% right away.
Bit hard to do schema evolution with a staggered rollout.
That said, loads of folks do microservices with a shared dB.
In theory, but when the getUser service is down, your app is probably broken as well.
If you have long running requests (something beside small rest calls like large data transfers) then any being served by that same process are taken down.
Good CD is even more important if there are more services to deploy