Microsserviços

Conteúdo estruturante

Esse documento apresenta a consolidação da visão dos profissionais de nossa empresa sobre Microsserviços.

O conteúdo deste documento é considerado estruturante e é atualizado periodicamente. A última atualização ocorreu em 19/02/2020

Microsserviços é um tema quente na comunidade desenvolvedora de software. Embora popular, é envolto em questionamentos e incertezas evidenciados em debates acalorados quanto a sua aplicabilidade e necessidade.

Conceito

Trata-se de um estilo de arquitetura de software que preconiza o desenvolvimento de aplicações com serviços pequenos que são desenvolvidos, mantidos, evoluídos, distribuídos (colocados em produção) e operados  de maneira independente.

A ideia central desse estilo é reduzir o acoplamento.

Não há consenso quanto ao “tamanho” de um microsserviço. Há quem defenda que ele deve entregar uma, e apenas uma capability de negócio. Entretanto, podemos afirmar que, apropriando-se de conceitos de DDD, microsserviços são menores que um contexto delimitado.

Conversamos sobre conceitos fundamentais de microsserviços em um dos episódios do podcast da Lambda3

Impactos para estruturação dos times

Microsserviços tem relação direta com a forma como os times estão organizados. Afinal, as empresas estão “condenadas” a reproduzir em seus sistemas as estruturas de comunicação das organizações.

Não é possível escrever software com microsserviços, com uma estrutura de times monolítica. 

Não faz muito sentido ter equipes pequenas mantendo centas de microsserviços. Ou seja, a experiência mostra que microsserviços fazem sentido em sistemas mais complexos, mantidos por times grandes.

Separação em microsserviços e computação distribuída

Microsserviços implicam na adoção de vários padrões importantes, porém frequentemente ignorados em aplicações mais próximas do monolótico.

Falácias da computação distribuída

As falácias da computação distribuída são um conjunto de afirmações realizadas por L Peter Deutsch, enquanto trabalhava na Sun Microsystems,  descrevendo premissas falsas invariavelmente assumidas como verdadeiras por  programadores inexperientes quando estes começam a desenvolver aplicações distribuídas.

  1. A rede é confiável
  2. A latência é zero
  3. A largura de banda é infinita
  4.  A rede é segura
  5.  A topologia da rede nunca muda
  6.  Existe um administrador
  7.  Custo de transferência de dados é zero
  8.  A rede é homogênea

Há registro de um ótimo bate-papo com o pessoal da Lambda3 sobre falácias de computação distribuída, estratégias para segmentação de serviços, teroma CAP (BASE x ACID), Circuit Breakers, API Gateways, estratégias de Discovery, REST e GraphQL.

Defendemos que a “separação” dos microsserviços baseando-se nos processos que se pretende suportar.

Microsserviços e SOA

Há quem diga que arquitetura de microsserviços seja “SOA do jeito certo”. Embora seja possível identificar propriedades similares nas duas propostas, discordamos que se trate da mesma coisa.

Abordagens SOA ficaram amarradas, em muitos cenários, a adoção de um ESB. Microsserviços tem sido adotados exatamente para eliminar esse artefato.

Microsserviços e EDA

A natureza “desacoplada” de microsserviços abre espaço para técnicas e padrões que favorecem software com essa característica.

Nesse cenário, é comum considerarmos na utilização de mecanismos de mensageria e assincronismo para, por exemplo sincronizar bases distintas de dados.

Microsserviços e DevOps

Em nossa interpretação, não é possível pensar em Microsserviços sem adotar práticas avançadas de DevOps. O deploy é mais complexo e a operação também é.

Participamos de uma discussão inteira sobre esse tema no podcast da Lambda3, em dois episódios.


Uma das constantes de sistemas baseados em microsserviços é que ocorre a transferência da complexidade do desenvolvimento para a operação, onde esta pode ser mitigada através da automação.

Pontos de atenção (lições aprendidas)

Ao longo de nossa experiência, estamos colecionando lições aprendidas sobre o que fazer e, principalmente, o que não fazer sobre microsserviços.

De todas as lições aprendidas, sem dúvida, a mais importante é “Ache uma justificativa razoável para o negócio”.

Microsserviços implicam em aumento considerável da complexidade técnica de um software. Se não houver complexidade suficiente no domínio, “a conta não fecha”. Afinal, complexidade desnecessária é custo.

É fundamental estar ciente dos desafios associados ao desenvolvimento de microsserviços para que, no fim do dia, não acabemos apenas construindo monolíticos distribuídos.

Elemar Júnior

Microsoft Regional Director e Microsoft MVP. Atua, há mais de duas décadas, desenvolvendo software e negócios digitais de classe mundial. Teve o privilégio de ajudar a mudar a forma como o Brasil vende, projeta e produz móveis através de software. Hoje, seus interesses técnicos são arquiteturas escaláveis. bancos de dados e ferramentas de integração. Além disso, é fascinado por estratégia e organizações exponenciais.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *