Como dimensiono um aplicativo Java com uma API REST e um banco de dados?

Eu tenho um aplicativo Java sem estado típico que fornece uma API REST e executa atualizações (CRUD) em um banco de dados Postgresql.

No entanto, o número de clientes está crescendo e sinto a necessidade de

Aumente a redundância, para que, se um falhar, outro ocorraPara isso, provavelmente vou precisar de um balanceador de carga?Aumente a velocidade de resposta não inundando a rede e a CPU de apenas um servidor (no entanto, como o balanceador de carga não será inundado?)Talvez eu precise distribuir o banco de dados?Quero poder atualizar meu aplicativo sem problemas (vi uma coisa chamada kubernetes fazendo isso): Mate cada nó redundante um por um e substitua-o imediatamente por uma versão atualizadaMeu aplicativo também armazena alguns arquivos de imagem, que crescem rapidamente no tamanho do disco, preciso poder distribuí-losTudo isso deve ser capaz de fazer backup

Este é o diagrama do que tenho agora (o aplicativo Java e o DB estão no mesmo servidor):

Qual é a melhor / maneira correta de dimensionar isso?

Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion