I've always had failover functionality built in. As for patching - it very much depends on the nature of the patch, type of application and business constraints. Too much to write here. For the most part it never caused me any particular grief. The most generic case for server type is: all new requests are denied with appropriate error code, all requests in process are either gracefully completed or aborted if business logic allows for that. Meanwhile the background process is migrating/upgrading in place data model if there are any changes. Upon finishing the upgrade the new server takes over.
I do not thing upgrading microservices is any simpler. It could actually be way way worse.
I do not thing upgrading microservices is any simpler. It could actually be way way worse.