Realmente depende de seus requisitos de escalabilidade e de como / se suas instâncias de microsserviço precisam cooperar para fornecer um único resultado. Ajuda a saber quais são as compensações:
Mantendo tudo em um banco de dados
- Configuração mais fácil
- Nenhuma coordenação ou comunicação com outras instâncias do seu serviço é necessária
- Mais fácil de descobrir seu conjunto de dados completo
- Desempenho do sistema limitado pelo desempenho do banco de dados
Mantendo os Bancos de Dados Separados
- A resposta completa de uma solicitação pode estar espalhada por instâncias de microsserviço
- Nesse caso, você aumentou a comunicação e a negociação para resolver a solicitação
- Manipulação de dados quando você solta esse nó de microsserviço (mesmo quando o banco de dados ainda está ativo, você não pode acessá-lo até que um novo com a configuração correta seja recuperado)
- Maior complexidade de configuração
Qual é o problema que você está resolvendo?
Em alguns casos, você está preocupado apenas com dados efêmeros. Se o banco de dados ficar inoperante, não é um grande problema. Nesses casos, talvez você nem precise de um banco de dados para começar. Basta manter tudo na memória e tornar as coisas incrivelmente rápidas. Esta é a solução mais fácil de se trabalhar.
Em outros casos, você precisa da integridade dos dados, mas seu banco de dados é capaz de expandir sua capacidade com base no número de nós que possui. Nesse caso, um único banco de dados provavelmente é mais do que suficiente e gerenciar a capacidade de resposta de forma independente é a resposta certa.
Há vários casos no meio. Por exemplo, você pode ter bancos de dados específicos regionalmente, portanto, para cada instância do seu serviço em uma região diferente, você tem um banco de dados separado. Normalmente, os bancos de dados de sharding não funcionam bem em todas as regiões; portanto, essa é uma maneira de localizar um pouco os dados e controlar a coordenação.
Doutrina e Realidade
Eu li vários artigos sobre microsserviços e como eles devem ser modulares. As recomendações vão desde manter o front-end, microsserviço e camada de dados como uma unidade inteira, até o compartilhamento de banco de dados e / ou código de front-end para todas as instâncias. Geralmente, mais isolamento fornece a maior escalabilidade, mas isso implica o custo de maior complexidade.
Se o seu microsserviço é pesado em cálculos, faz sentido permitir a escalabilidade do número desses microsserviços, conforme necessário - compartilhar o banco de dados ou mesmo o código do front-end não prejudica ou dificulta essa abordagem.
A realidade é que as necessidades específicas do seu projeto precisarão de um conjunto diferente de compromissos para concluir o trabalho em tempo hábil e lidar com a carga do sistema que você está medindo (além de um pouco mais). Considere o trio totalmente isolado de front-end, microsserviço e camada de dados como o objetivo principal. Quanto mais demanda em seu sistema, mais próximo desse objetivo você provavelmente precisará estar. Nós não somos todos [insert name of highly successful web entity here]
, e eles não começaram onde estão agora. Às vezes, você só precisa começar com uma situação menos que perfeita e ser feliz com isso.