Dicas e Matérias

Monolithic X Microservices

Ouvi falar que microsserviços é melhor que monolitíco, então já penso que o monolitico em que trabalho precisa de mudança urgente…

Calma, segundo o Ranga Karanam em publicação para o DZone podemos considerar 7 itens antes de fazer a mudança.

1. Grau de Independência

Resultado de imagem para solitary

O quão de independência seus serviços podem ter, cada um terá seu próprio banco e interface sendo totalmente dissociados dos outros ou terá o banco compartilhado para evitar dados inconsistentes.

2. Organização do Código

Resultado de imagem para code organizer

Seu código pode estar organizado com um repositório para cada microserviço ou um repositório mono com os códigos em pastas que representam cada serviço que pode ser mais interessante.

3. Pilha Tecnológica

Imagem relacionada

Já é complicado decidir sobre a lista de tecnologia para a aplicação monolítica, agora essa decisão tem que ser tomada para cada microserviço. Antes de pensar que agora ficou mais fácil, aí pode se tornar algo muito problemático, pense nos serviços cada vez mais heterogêneos, que pode dificultar o movimento das equipes entre os microserviços se estiverem usando tecnologias totalmente diferentes.

4. Complexidade Operacional

Resultado de imagem para complexity

Com os microsserviços vem o aumento da complexidade operacional, pois é necessário repensar as operações de um ponto de vista muito fundamental.

Aspectos que devem ser considerados:

Infraestrutura: A definição de requisitos de infra-estrutura para microsserviços e o provisionamento e manutenção de infra para cada microsserviço acrescenta um grau de complexidade com o qual a maioria dos engenheiros que trabalham com monóliticos não estão acostumados, como esses serviços são ampliados e reduzidos, a infraestrutura precisa ser provisionada e desativada automaticamente, para que você precise de um nível muito sofisticado de automação para fazer jus ao uso.

Balanceamento de carga e dimensionamento: você provavelmente precisará de uma estratégia de dimensionamento que seja muito mais complicada do que para aplicativos monolíticos, que são sempre dimensionados para fora (eixo x). Com microsserviços, você precisará descobrir se precisa escalar todos os serviços ou apenas um subconjunto quando houver um pico na demanda. Sua equipe precisará entender o escalonamento do eixo y, já que a abordagem de microsserviços é consistente com ele e o escalonamento do eixo z para obter os benefícios de x e y. Mais sobre o cubo de escalabilidade.

Descoberta de serviços: O conjunto de instâncias de serviço em um mundo de microsserviços é alterado dinamicamente devido ao dimensionamento e atualizações. Além disso, os serviços têm locais de rede dinâmicos, portanto, você precisa descobrir uma maneira de descobrir novas instâncias de serviço. Se informe sobre serviço no lado do cliente, serviço no lado do servidor e uma lista de Registros de Serviço usados ​​com frequência.

Monitoramento: Isso deve ser configurado e mantido para cada microsserviço, aumentando a complexidade do(s) engenheiro(s). Além disso, a solução de monitoramento precisa lidar com cenários em que um subconjunto de serviços é dimensionado para cima e para baixo.

A própria complexidade operacional deve lhe dar uma pausa antes de decidir migrar para microsserviços. A menos que você esteja ciente dos desafios com microsserviços e tenha um plano para resolvê-los, será uma transição dolorosa.

5. Entrega Contínua

Resultado de imagem para continuous delivery

Concordamos com Martin Fowler quando ele diz isso em seu blog sobre trocas de microservices:

“Ser capaz de implantar rapidamente pequenas unidades independentes é uma grande vantagem para o desenvolvimento, mas coloca uma pressão adicional sobre as operações, já que meia dúzia de aplicativos agora se transformam em centenas de pequenos microservices. Muitas organizações encontrarão a dificuldade de lidar com esse enxame de ferramentas que mudam rapidamente para serem proibitivas.

Isso reforça o importante papel da entrega contínua. Enquanto a entrega contínua é uma habilidade valiosa para os monolíticos, um que quase sempre vale a pena o esforço para obter, torna-se essencial para uma séria configuração de microsserviços”.

Organizações que evangelizam microsserviços, como Netflix e Amazon, têm os recursos para construção de pipelines de entrega contínua personalizados para seus microsserviços, mas, nem toda organização pode se dar ao luxo de fazer isso. Mesmo se você puder pagar, você deve pensar se seu tempo é mais bem gasto na criação de uma automação doméstica frágil que precisa ser personalizada para cada microsserviço ou se você deseja melhorar seu próprio produto.

6. Organização da Equipe

Resultado de imagem para group organizer

Por último, mas não menos importante, você precisará reorganizar sua(s) equipe(s) para garantir que cada microsserviço seja realmente desenvolvido, implantado e mantido de forma independente. Você não pode ter seus engenheiros trabalhando em vários microsserviços, pois isso sempre levará a decisões que otimizam para fatores que não se correlacionam com o que é melhor para cada microsserviço.

Microservices para projetos existentes

Se você quiser mover seus monoliticos existentes para microsserviços, ainda precisará considerar todos os pontos descritos acima. No entanto, existe um desafio adicional específico para o seu caso. Você precisará de uma estratégia que ajude a fazer a transição em etapas.

7. Estratégia para transformar uma arquitetura monolítica em microsserviços

Este é um tópico extenso e merece seu próprio post no blog. Assim como Roma não foi construída em um dia, sua transição levará tempo e dedicação. Em poucas palavras, você precisa fazer o seguinte:

Implementar a entrega contínua para que você tenha a automação certa enquanto o número de serviços começa a crescer

Mover para um sistema de controle de origem distribuído, como o GitHub, para que as equipes possam trabalhar de forma independente sem pisar umas nas outras.

Dockerize seu aplicativo para obter portabilidade e a capacidade de girar os serviços para cima e para baixo em segundos

Sempre crie novas funcionalidades como um microsserviço.

Converta os componentes existentes gradualmente, começando das funções de negócios menos complexas com o menor número de dependências e trabalhando para funções mais complexas.

Adotar microsserviços não é trivial e deve ser feito somente se você vir valor suficiente para seus aplicativos.

Adaptação de https://dzone.com/articles/7-things-to-consider-while-moving-to-a-microservic?fromrel=true