The problem with decentralized redundancy is that it requires separate update schedules and process controls. This directly conflicts with the desire for convenience in rolling out new updates and code changes, etc. so the single point of failure tends to be deploying new code to everywhere at once.