.NET - Projetando e Executando Microservices - II
Neste artigo veremos os desafios em projetar uma aplicação usando Microservices e as abordagens para executar com sucesso essas aplicações. |
Continuando o artigo anterior hoje veremos os principios que sustentam os microserviços.
Esses princípios devem impulsionar suas decisões técnicas e organizacionais quando você pretender criar e executar uma aplicação usando microsserviços.
A seguir vou detalhar os cinco mais importantes princípios culturais e arquitetônicos que sustentam o desenvolvimento de microsserviços:
1- Autonomia
Estabelecemos que os microsserviços são autônomos - cada o serviço funciona e muda independentemente dos outros. Para garantir essa autonomia, você precisa projetar seus serviços para que eles sejam:
1 - Fracamente acoplados - interagindo através de
interfaces claramente definidas ou através de eventos publicados, cada
microsserviço permanece independente da implementação interna de seus
colaboradores. Por exemplo, o serviço de pedidos que introduzimos anteriormente
não deveria estar ciente da implementação das transações da conta.
2- Independentemente implantáveis - Os serviços
serão desenvolvidos em paralelo, geralmente por várias equipes. Ser forçado a
implantá-los em sincronia ou em uma formação orquestrada resultaria em
implantações arriscadas e ansiosas. Idealmente, você quer usar o seu serviço
menor para permitir lançamentos rápidos, frequentes e pequenos.
A autonomia também é cultural. É vital que você delegue responsabilidade e a
propriedade de serviços às equipes responsáveis por gerar impacto nos
negócios. Como já definimos, o projeto organizacional tem uma influência no
design do sistema.
Uma clara propriedade do serviço permite que as equipes construam iterativamente
e tomem decisões com base em seu objetivos e contexto local. Da mesma forma,
este modelo é ideal para promover a propriedade de ponta a ponta, onde uma
equipe é responsável por um serviço em desenvolvimento e produção.
2- Resiliência
Os
microsserviços são um mecanismo natural para isolar a falha: se você os
implantar de forma independente, a falha no aplicativo ou na infraestrutura pode
afetar apenas uma parte do sistema.
Da mesma forma, ser capaz de implantar pequenos pedaços de funcionalidade deve
ajudá-lo a mudar
seu sistema de forma mais gradual, em vez de lançar um big bang arriscado de uma
nova funcionalidade.
Considere o sistema de investimento visto no artigo anterior. Se o serviço de
mercado não estiver disponível, não será capaz de colocar o pedido no
mercado. Mas um usuário ainda pode solicitar o pedido e o serviço pode buscá-lo
mais tarde quando a funcionalidade estiver disponível.
Embora dividir seu aplicativo em vários serviços possa isolar a falha, também
multiplicará pontos de falha. Além disso, você precisa levar em conta o que
acontece quando ocorre uma falha para evitar um processo em cascata. Isso envolve tanto o
design - favorecendo a interação assíncrona sempre que possível e usando
disjuntores e timeouts apropriadamente - e operações - usando técnicas de
entrega contínua comprovadas e atividade robusta de monitoramento do sistema
3- Transparência
Mais importante, você precisa saber quando ocorreu uma falha e, ao invés de um
sistema, um aplicativo de microsserviço depende da interação e do comportamento
de vários serviços, possivelmente criados por equipes diferentes. Assim,
a qualquer momento, seu sistema deve estar transparente e observável para garantir
que você observe e diagnostique os problemas.
Todos os serviços em sua aplicação produzirão métricas de negócios, operacionais
e de infraestrutura; logs de aplicativos; e traces de requisições. Como
resultado, você precisa estar ciente como tratar e interpretar esta
enorme
quantidade de dados.
4- Automação
Pode parecer contra-intuitivo aliviar os problemas de uma aplicação complexa
através da construção de uma infinidade de serviços. É verdade que os
microsserviços são uma arquitetura mais complexa do que criar um único
aplicativo. Ao abraçar a automação e buscar consistência na infra-estrutura
entre serviços, você pode reduzir significativamente o custo de gerenciar essa
complexidade adicional.
Você precisa usar a automação para garantir a exatidão das implantações e a
operação do sistema. Não é uma coincidência que a popularidade da arquitetura de
microsserviço seja paralela a crescente adoção das técnicas de
DevOps, especialmente o código de infra-estrutura,
e a criação de ambientes de infraestrutura totalmente programáveis por meio de
APIs (como AWS ou Azure).
Essas duas tendências fizeram muito para tornar os microsserviços viáveis para
equipes menores.
5- Alinhamento
Por fim,
é importante que você alinhe seus esforços de desenvolvimento no caminho certo.
Você deve
ter como objetivo estruturar seus serviços e, portanto, suas equipes, em torno
de conceitos de negócios.
Isso leva a uma maior coesão. Para entender por que isso é importante, vamos
fazer uma comparação entre a arquitetura SOA e a
arquitetura de microsserviços
mostrada na figura abaixo:
Muitos aplicativos usando a arquitetura
SOA
tradicional implantaram camadas de um aplicativo separadamente - interface do
usuário, lógica de negócios, integração, dados.
Esse uso da decomposição horizontal na
SOA
é problemático, porque a funcionalidade coesiva se espalha em vários sistemas.
Novos recursos podem exigir coordenação de lançamentos para múltiplos serviços e
podem se tornar inaceitavelmente acoplados a outros no mesmo nível de abstração
técnica.
Uma
arquitetura de microsserviço, por outro lado, deve ser inclinada para
decomposição vertical; cada serviço deve se alinhar
a um único recurso comercial, encapsulando todas as camadas técnicas relevantes.
Você também deve estar atento aos consumidores de seus serviços. Para garantir
um sistema estável, você precisa garantir que está desenvolvendo com
paciência e mantendo a compatibilidade - explicitamente ou executando várias
versões de um serviço - para garantir que você não force outras equipes a
atualizar ou interromper interações complexas entre serviços.
Trabalhar com esses princípios em mente ajudará você a desenvolver microsserviços levando a sistemas altamente adaptáveis, escaláveis e estáveis.
No entanto, microsserviços não é a bala de prata que vai resolver todos os seus problemas, na verdade, ele resolve alguns problemas e cria outros.
Quem deve decidir se vale a pena ou não usar microsserviços é você e sua equipe, e, por isso apresentei os conceitos deste artigo.
Pense e pondere sobre isto !!!
Deus nunca foi visto por alguém. O Filho
unigênito, que está no seio do Pai, esse o revelou.
João 1:18
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
https://smartbear.com/learn/api-design/what-are-microservices/
https://blog.newrelic.com/technology/microservices-what-they-are-why-to-use-them/