Não tenho uma resposta definitiva, mas aqui estão meus 2 centavos. Na minha opinião, existem duas maneiras de se aproximar disso: uma é deixar os aplicativos inalterados; a outra é migrar para serviços e aplicativos personalizados.
Se você não quiser alterar aplicativos e bancos de dados, mas quiser um sistema mais confiável, deverá analisar o seguinte:
- Conheça o seu objetivo do ponto de recuperação e o objetivo do tempo de recuperação (isso define o que você precisa em termos de arquitetura, procedimentos e hardware )
- Arquitetura de armazenamento (como podemos escalar, eliminar pontos de acesso, melhorar o desempenho);
- Failover de armazenamento (como espelhamento de disco e possivelmente espelhamento externo para Recuperação de desastres);
- Servidor de failover quente;
- Plano de failover testado (isso é realmente importante, você precisa testar a estratégia de DR);
- Escalabilidade do servidor de banco de dados (como eles crescem se você lançar mais hardware neles);
- Monitoramento e automação são críticos.
Alterar seu aplicativo pode permitir algumas alterações interessantes. Compartilhar seus bancos de dados pode permitir um conjunto maior de dados, uma coisa interessante é dividir as leituras e as gravações. Muitos bancos de dados têm muito mais leituras que gravações, se esse for o caso, ter bancos de dados dedicados a cada função com várias réplicas pode fazer isso. Este vídeo (Unshackle Your Domain) explora essa ideia.