Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Quantidade de deploys também é uma desvantagem?

Trabalhei em alguns projetos de "pequenos serviços", considero que era uma mistura de monolito com microserviços, pois tinhamos vários serviços relativamente grandes, com muita regra de negócio, informação e requisição. E uma dificuldade que eu encontrava era a sincronia entre esses serviços, ou seja, quando desenvolvia algo que impactava toda ou a maior parte dos serviços, nós tinhamos que garantir que todos eles iriam subir de versão (no deploy) simultaneamente para não ter erro entre os serviços.

A minha dúvida é, o fato de ser obrigado a fazer o deploy simultaneamente de 2 ou mais serviços, também seria uma desvantagem de se utilizar microserviços? E qual é a melhor forma disso ser resolvido? Ou seja, no exemplo da aula, vamos supor que eu implemento uma mudança nos produtos, onde eu tenho que atualizar os serviços de catalogo, carrinho e pagamento, há como garantir que os 3 vão ser atualizados ao mesmo tempo?

2 respostas
solução!

Oii Gabriel, tudo bem?

Você trouxe uma questão muito relevante sobre uma das desvantagens que podem surgir ao trabalhar com microsserviços: a necessidade de realizar deploys simultâneos de múltiplos serviços. Isso pode, de fato, ser um desafio, especialmente quando há dependências fortes entre os serviços.

Nos microsserviços, um dos principais objetivos é justamente desacoplar os serviços para que possam ser desenvolvidos, testados e implantados de forma independente. Mas, quando há mudanças que afetam múltiplos serviços, como no seu exemplo de atualização dos serviços de catálogo, carrinho e pagamento, é necessário garantir que essas atualizações sejam feitas de maneira coordenada para evitar inconsistências.

Algumas abordagens que podem ajudar a mitigar esse problema:

Uma prática comum é versionar as APIs dos seus serviços. Dessa forma, você pode introduzir novas funcionalidades ou mudanças sem quebrar a compatibilidade com versões anteriores. Isso permite que os serviços sejam atualizados gradualmente.

GET /api/v1/products
GET /api/v2/products

Utilizar feature toggles pra ativar ou desativar funcionalidades específicas em tempo de execução. Isso permite que você implante código novo sem ativar imediatamente as mudanças, dando tempo para que todos os serviços sejam atualizados.

if (FeatureToggle.isEnabled("newPaymentFlow")) {
    // Novo fluxo de pagamento
} else {
    // Fluxo de pagamento antigo
}

Definir contratos claros entre os serviços. Utilizando ferramentas como o Swagger/OpenAPI para documentar e garantir que todos os serviços sigam esses contratos. Isso ajuda a minimizar os riscos de incompatibilidade.

Mantenha uma suíte robusta de testes de integração que valide a interação entre os serviços antes de realizar o deploy. Isso pode ajudar a identificar problemas de compatibilidade antecipadamente.

Utilizar ferramentas de orquestração de deploy, como Kubernetes, pra gerenciar e automatizar o processo de deploy de múltiplos serviços. Isso pode garantir que os serviços sejam atualizados de maneira coordenada.

Essas práticas podem ajudar a reduzir a complexidade e os riscos associados aos deploys simultâneos em uma arquitetura de microsserviços.

É importante lembrar que a comunicação e a coordenação entre as equipes também são fundamentais para o sucesso dessa abordagem.

Um abraço e bons estudos.

Obrigado pela resposta Lorena :)