.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
  2. Resiliência
  3. Transparência
  4. Automação
  5. Alinhamento

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:


José Carlos Macoratti