Por que é hora de migrar de monólitos para microsserviços
Publicados: 2022-04-07À medida que os aplicativos se tornam mais complexos, desenvolvedores e engenheiros procuram maneiras de criar soluções de software flexíveis e escaláveis. Nesse sentido, 60% das empresas de tecnologia, incluindo gigantes como Spotify e Amazon, mudaram para microsserviços.
De acordo com essa tendência, qualquer empresa de tecnologia com visão de futuro deve considerar a mudança de uma arquitetura monolítica para microsserviços.
Mas antes de iniciar o processo de migração, você deve desenvolver uma estratégia clara e viável para garantir uma transição tranquila. Neste artigo, você conhecerá os benefícios e desafios da migração para microsserviços.
Uma breve visão geral de monólitos e microsserviços
Uma arquitetura monolítica é um sistema no qual todas as operações, armazenamento de dados e processamento de solicitações são tratados por uma base de código universal.
Tradicionalmente, os monólitos contêm uma interface de usuário do lado do cliente, um aplicativo do lado do servidor e um banco de dados. O aplicativo do lado do servidor recebe e processa solicitações, executa a lógica de domínio, retorna dados do banco de dados e os apresenta ao solicitante (cliente) na interface do usuário.
Embora os ecossistemas monolíticos existam principalmente em aplicativos legados, alguns desenvolvedores ainda usam esse modelo de arquitetura para programas de software simples e aplicativos de prova de conceito.
Por outro lado, os microsserviços referem-se à arquitetura de software que contém vários serviços responsáveis por operações específicas. A arquitetura de microsserviços também é conhecida como arquitetura orientada a serviços (SOA).
A seguir estão os principais atributos de uma arquitetura de microsserviços:
- Responsabilidade única . Cada serviço lida com uma operação exclusivamente.
- Independência. Apesar de trabalhar em conjunto com outros microsserviços, cada serviço funciona como uma entidade separada. Você pode implantar, reutilizar e atualizar cada um deles independentemente.
- Pontos de extremidade inteligentes. Cada microsserviço constituinte segue uma lógica de domínio exclusiva e se comunica via HTTP, AMQP ou TCP.
- Design orientado por domínio. Esta abordagem centra-se na programação de um modelo que possui uma rica compreensão dos processos e regras de um domínio.
- Modularidade. Os microsserviços são modulares porque contêm componentes ou módulos substituíveis dentro do ecossistema. Como resultado, as equipes podem dimensionar e atualizar diferentes unidades de forma independente.
- Prova de falha. O uso de microsserviços elimina pontos únicos de falha do sistema. Se um módulo apresentar defeito, os outros microsserviços permanecerão funcionais.
Motivos para migrar para microsserviços
Se sua empresa está em dúvida sobre a migração para microsserviços, sua hesitação é compreensível. Vamos discutir algumas razões convincentes pelas quais a transição para uma SOA faz sentido.
Melhora a escalabilidade
Os monólitos são difíceis de dimensionar porque as alterações em um módulo exigem uma redistribuição completa de todo o aplicativo. Mas com microsserviços, as equipes podem tornar o sistema mais escalável sem interromper outras funcionalidades.
A Netflix mudou de uma arquitetura monolítica para uma SOA para tornar seu sistema mais escalável. À medida que o grupo de usuários da empresa continuava a se expandir, os desenvolvedores previram que o ecossistema de desenvolvimento existente não seria mais capaz de lidar com o influxo de dados e conteúdo.
Para isso, os engenheiros da Netflix começaram a desacoplar serviços, como codificação de vídeo e registro de usuários, como módulos independentes.
Aumenta a flexibilidade
A rigidez e a falta de agilidade nos monólitos dificultam a adaptação às plataformas e tecnologias modernas. Por outro lado, os microsserviços dão aos engenheiros mais espaço de manobra para experimentar e integrar novas tecnologias.
O eBay adotou APIs RESTful como parte dos esforços da empresa para abandonar sua arquitetura monolítica desatualizada. Ao fazer isso, a empresa conseguiu implantar uma biblioteca de componentes que alimentava funcionalidades como o Modo Escuro.
Aumenta a produtividade
Ao trabalhar com monólitos, os engenheiros só podem trabalhar dentro dos limites da arquitetura central. Mas com os microsserviços, várias equipes podem trabalhar simultaneamente no mesmo aplicativo. Consequentemente, isso garante o uso eficiente de tempo e recursos, aumentando a produtividade em toda a linha.
Diminui o time-to-market
Embora os monólitos sejam mais fáceis de construir, eles só funcionam para aplicativos simples, software de prova de conceito (PoC) e produtos viáveis mínimos (MVPs).
Ao trabalhar em aplicativos complexos, como aplicativos de compartilhamento de viagens, os monólitos podem interromper a linha do tempo, limitando o alcance da liberdade que os engenheiros podem desfrutar.
Alternativamente, usar um SOA adiciona graus extras de liberdade, aumenta a eficiência dos processos e, portanto, reduz o tempo de colocação no mercado.
Reforça a segurança
Bugs em uma arquitetura monolítica tornam todo o sistema vulnerável a falhas e possíveis ataques de malware (DDOS, SQL injections, etc.). Mas essas vulnerabilidades são menos críticas ao usar microsserviços.
Embora os vários módulos de uma SOA introduzam vários pontos de ataque, a falha de uma unidade não significa a ruína de todo o ecossistema.
Simplifica as operações de manutenção
Depurar um monólito complexo é uma tarefa cansativa para desenvolvedores, especialmente ao trabalhar com uma base de código antiga. Mesmo que a equipe possa identificar o defeito com facilidade, eles ainda precisam reimplantar toda a infraestrutura.
No entanto, você pode reduzir o esforço gasto na reimplantação migrando para microsserviços. Você só precisa corrigir e reimplantar os módulos afetados em vez de toda a arquitetura do aplicativo.
Uma desvantagem de usar uma SOA é que você pode se esforçar para descobrir o ponto exato de falha em sistemas complexos de várias camadas. Mas com ferramentas de monitoramento modernas como o Netsparker, você pode rastrear essas falhas rapidamente.
Promove a comunicação e o crescimento das equipes
Quando um aplicativo depende de monólitos, cada equipe precisa se concentrar em um aspecto específico da arquitetura, o que leva a redundâncias, gargalos burocráticos e prazos estendidos.
Por outro lado, os microsserviços dependem de APIs para se comunicar. Para atingir esse objetivo, as equipes precisam gerar funções que funcionem interna e externamente.
Quando a Amazon passou de monolitos para microsserviços, a empresa criou suas próprias APIs de serviço da web para se comunicar com o resto do mundo.
As grandes armas estão fazendo isso
Sim, pular na onda nem sempre é a melhor abordagem de negócios para o desenvolvimento de software. Mas, como mencionamos, impulsionadores de inovação como a Amazon estão defendendo os microsserviços. Essa adesão dos gigantes da tecnologia torna atraente a ideia de adotar uma arquitetura orientada a serviços.

Mas antes de mudar de monolitos para microsserviços, avalie os prós e os contras de cada modelo caso a caso.
Desafios da migração de monolíticos para microsserviços
Dados da O'Reilly mostram que cerca de 62% das empresas registraram algum nível de sucesso após a migração para microsserviços.
No entanto, empresas como Shopify ainda mantêm uma versão modular de sua arquitetura monolítica porque isso os ajuda a maximizar a produtividade. E mudar para uma SOA apresenta alguns obstáculos que toda equipe deve considerar antes de migrar.
Aqui estão os principais desafios para mover seu aplicativo de monólitos para microsserviços.
Torna o sistema mais complexo
Adicionar mais módulos à arquitetura existente torna o gerenciamento mais complicado. Em vez de se concentrar em uma única base de código, agora você precisa se preocupar com várias bases de código executando diferentes operações. E não apenas isso, a documentação continuará aumentando à medida que novos módulos ou microsserviços entram no sistema.
Complica os processos de teste
Com os microsserviços, agora você precisa se preocupar em depurar o código para vários servidores distribuídos em vez de se concentrar em apenas um. Esse obstáculo prolonga os esforços de revisão de código e atrasa a implementação de novas alterações antes da implantação.
Requer novos conjuntos de habilidades
Ao adicionar novos módulos, você precisa encontrar desenvolvedores e engenheiros que possam trabalhar com a linguagem de programação subjacente. Sua equipe de DevOps precisará atualizar seus conjuntos de habilidades ou contratar novos membros da equipe para preencher a lacuna de habilidades.
Aumenta o custo de desenvolvimento
Como agora você precisa adicionar mais serviços, expandir os esforços de teste e aprimorar os conjuntos de habilidades, o custo geral da migração aumentará. Em alguns casos, como o Spotify mostrou, manter o monólito e fazer as atualizações necessárias é a opção mais econômica.
A melhor estratégia para migrar monolitos para microsserviços
A migração para microsserviços não é uma abordagem infalível de forma alguma. Erros e falta de preparação podem destruir o aplicativo, levando a projetos abandonados e desperdício de recursos.
Por isso, reunimos as melhores práticas para garantir uma migração tranquila para microsserviços.
Monte uma equipe multifuncional
O erro mais comum que a maioria das empresas comete é mergulhar no esforço de migração antes de colocar a equipe certa no lugar.
Ao contrário da arquitetura monolítica tradicional, trabalhar com microsserviços requer os esforços de equipes multifuncionais compostas por desenvolvedores, especialistas em controle de qualidade e engenheiros.
Considere criar uma estratégia de DevOps refinada para criar, testar e implantar aplicativos ao migrar para microsserviços. E se os membros de sua equipe não tiverem a habilidade de realizar o procedimento de migração, este é o momento perfeito para aprimorá-los.
Identifique os componentes dependentes
Com uma equipe formada, seus engenheiros podem começar a desconstruir a arquitetura monolítica, prestando atenção especial aos pipelines de entrega contínua e ao sistema de gerenciamento de API.
Além disso, sua equipe deve priorizar os componentes que podem ser desacoplados sem afetar os aplicativos voltados para o cliente que dependem do monolito para serem executados. Ferramentas como o Sonargraph Explorer podem ajudá-lo a delinear as dependências dos componentes com base em uma hierarquia estabelecida.
Desacoplar componentes
Durante a migração, você nunca deve desacoplar todos os componentes de uma vez. A melhor estratégia envolve desacoplar os serviços de borda antes de avançar para aqueles profundamente embutidos no monólito existente.
Começar com casos extremos permite que sua equipe “falhe cedo” e desenvolva todos os pré-requisitos operacionais antes de passar para componentes de missão crítica.
O especialista em tecnologia Martin Fowler propõe recursos de dissociação que passam por mudanças frequentes – como personalização do cliente em um sistema de gerenciamento de varejo.
Use APIs para sua interface de usuário remota
Durante a migração, os usuários ainda irão interagir com seu aplicativo. Para garantir que eles possam acessar o software, use uma API para lidar com todos os casos de acesso a dados. Além disso, a API unificada deve ser compatível com versões anteriores.
De acordo com o design orientado por domínio (DDD) de Eric Evan, a API deve fornecer uma camada anticorrupção para traduzir as solicitações entre os subsistemas que compõem os aplicativos monolíticos e de microsserviços.
Migrar um monólito para macrosserviços e depois para microsserviços
Dividir uma arquitetura monolítica em muitos microsserviços cria um sistema distribuído ultracomplexo que será um pesadelo para depurar.
Para evitar esse trabalho pesado desnecessário, comece quebrando o monólito em grandes partes (macrosserviços) que compartilham os mesmos repositórios de dados e, em seguida, divida-os em unidades independentes menores (microsserviços).
Por exemplo, se você tiver um monólito para um aplicativo de pedidos de alimentos, um macrosserviço pode lidar com “Pedidos”, enquanto os microsserviços constituintes podem gerenciar subtarefas como classificação, pagamento e envio.
Você pode usar o modelo Richardson Maturity para desacoplar serviços baseados em REST.
Testar e implantar
Em todas as etapas, sempre realize testes para depurar o aplicativo e detectar falhas de lógica dentro da arquitetura. Use técnicas de teste de integração para estabelecer uma relação entre os dados migrados e os pedaços restantes no monólito.
Você também pode testar os controles de acesso para garantir que os usuários não estejam visualizando dados do banco de dados antigo. Depois, você pode implantar os microsserviços recém-criados.
Uma excelente abordagem para implantar microsserviços é o modelo de arquitetura evolucionária. Sob essa abordagem, sua equipe pode introduzir desenvolvimentos incrementais nas principais práticas de engenharia. Este modelo evolucionário está apto para o ecossistema de desenvolvimento de software em constante mudança.
Conclusão
Migrar de monólitos para microsserviços parece uma tarefa fácil para as empresas de desenvolvimento de software hoje. Mas antes de migrar seu aplicativo de monolitos para microsserviços, esforce-se para entender os benefícios e os possíveis desafios. Reúna a equipe certa para lidar com o procedimento de migração sem interromper a experiência do usuário e as operações internas.
Por fim, sempre teste cada novo componente e recurso na nova arquitetura de microsserviço antes da implantação.