I'm working on an application with about 50 or so microservices that have separate multi-tenanted databases. The problem arose of taking a tenant's data offline meaning that any requests for a certain tenant's data should be denied regardless of what service the request is being made for.
Normally in a single tenant database, we might just have taken the database server offline, but obviously we cannot do that in the multi-tenanted scenario which is further complicated by having separate databases for each service.
So the question arose if this is a problem that each microservice should have to handle or if this should be solved at a higher layer, say some type of gateway that every request passes through and can be filtered out accordingly.
Each solution creates a single point of failure. If each microservice needs to know a status of a tenant, then they will need to query the same service for this information and if that service is down, then the request will fail. Similarly if the gateway goes down, all requests fail. So in terms of availability both solutions appear to have the same result.
Is there a more accepted approach in microservices design of pushing the problem to individual services or trying to create a single solution so that each individual service does not need to worry about certain problems?