Introdução
Um dos tópicos de maior buzz na computação hoje é a modernização de aplicações legadas. Com o aumento de tecnologias 5G, Edge Computing e arquitetura serverless, muitas empresas têm dúvidas sobre se – e como – repensar aplicações no cenário digital atual.
A fim de esclarecer algumas dessas questões, apresentaremos uma série de posts que discutem a modernização de aplicações de diferentes perspectivas administrativas e tecnológicas, focando um dos aspectos mais discutidos da modernização: o uso de microsserviços.
Este post começa pelo básico: examinando as diferenças entre microsserviços e aplicações monolíticas; os prós e os contras de cada um, e como os microsserviços lidam com as mudanças constantes tanto de hábitos do consumidor quanto de infraestrutura.
Aplicações Monolíticas
O que são aplicações monolíticas?
No geral, algo monolítico costuma ser de tamanho grande, singular em sua constituição e rigidez inflexível. Aplicações monolíticas, que são construídas e lançadas como unidades únicas, tendem a ter essas mesmas características:
- design decisivo;
- processos fortemente acoplados;
- poucas delimitações entre domínios e módulos; e
- construído e implementado como uma unidade.
Em aplicações monolíticas, o front-end e o back-end são fortemente acoplados e a aplicação é construída usando um único stack de software, com apenas uma linguagem de programação. Todas as funcionalidades são interligadas a uma unidade composta por: um banco de dados, uma interface de usuário para os clientes e uma aplicação para o servidor. A aplicação do servidor é um executável único e lógico que lê e escreve informação de e para um banco de dados e o entrega para o navegador, por onde o usuário vê e interage com ele.
Quais são os desafios da arquitetura monolítica?
Por causa de sua uniformidade, aplicações monolíticas são um início natural para empresas menores que buscam simplificar processos de design, testes e operações. No entanto, quando as aplicações e as funcionalidades escalam, essa escolha de arquitetura pode acabar levando a complexidades inimagináveis.
Um bug em uma parte do sistema pode fazer a aplicação inteira cair, e cada novo reparo ou funcionalidade pode exigir toda uma nova construção. Como monolitos são interligados, as opções disponíveis para mudanças são limitadas à abordagem de “tamanho único”, impedindo o uso de novas ferramentas e plataformas que poderiam fazer o trabalho de forma mais eficiente.
Além disso, aplicações construídas para serem uma unidade devem ser hospedadas como tal: à medida que a base de usuários cresce, novos recursos devem ser disponibilizados para toda a aplicação, no lugar de se ater a gargalos específicos.
- caro para escalar;
- implementações demoradas;
- dependentes de um fornecedor;
- inflexíveis; e
- baixa tolerância a erros.
Assim, o termo “monolítico” geralmente tem conotações negativas na computação, às vezes descrito como uma “grande bola de lama” com uma estrutura irregular ou mal desenhada. Essa conotação negativa aparece rápido em algumas definições, como a da IBM, que descreve aplicações monolíticas como “uma aplicação que cresceu com o tempo, se tornando incontrolável e difícil de entender, além de ter baixa coesão e alta acoplagem”.
Microsserviços
O que são microsserviços?
O termo microsserviço é creditado a Martin Fowler, que descreveu longamente as várias características desse tipo de aplicação no post de blog de 2014:
- Módulos menos acoplados;
- Divididos por competências de negócios;
- Infraestruturas automatizadas;
- Diversidade tecnológica;
- Comunicação por mecanismos leves.
Em contraste à arquitetura monolítica, aplicações de microsserviços consistem de muitos componentes independentes, cada um executando uma única tarefa, como cobranças ou envios. Em vez de acoplagens rígidas, os microsserviços são mais espaçados e interagem uns com os outros via APIs.
Cada microsserviço tem seu próprio ciclo de vida, permitindo que um módulo individual seja desenvolvido, implementado, escalado e gerenciado de forma independente. Como resultado, microsserviços podem ser tecnologicamente diversos, cada um usando sua própria linguagem de programação ou solução de banco de dados.
Um vídeo de 2019 do Google Cloud Next mostra um panorama sucinto dos componentes de um microsserviço:
- API: fornece interação com o serviço;
- recursos computacionais: para que os recursos rodem com uma lógica de negócios;
- armazenamento (storage): banco de dados, sistema de arquivos, cache dentro da memória ou outra solução; e
- time associado: que desenvolve e gerencia o ciclo de vida do serviço.
Esse último ponto fala do duradouro princípio conhecido como Lei de Conway: que uma aplicação produzida por uma organização deve espelhar a estrutura daquela organização. Assim, desenvolvimento monolítico tende a ser segmentado em equipes de UI, servidor e banco de dados. Em contraste, equipes de microsserviços costumam ser segmentados por competências, como pagamentos ou envios, facilitando para resolver problemas dessas funções individuais.
Quais são os desafios dos microsserviços?
Por fim, a maior vantagem dos microsserviços é sua flexibilidade. Desde sua habilidade para usar múltiplas tecnologias até conseguir escalar e ser implementado de forma independente, microsserviços podem se adaptar rapidamente a mudanças na tecnologia, nos usuários e nas necessidades de negócio. A desvantagem dessa flexibilidade é que responder a essas circunstâncias diferentes traz mais complexidade para as aplicações funcionarem.
Como resultado, os microsserviços requerem mais monitoramento e gestão operacional. Escalar monólitos é mais caro, porém mais simples, já que escalar de forma horizontal consiste essencialmente em criar novas instâncias de uma aplicação em múltiplos servidores. Já escalar microsserviços de forma independente requer monitoramento cuidadoso e gestão de recursos para ter certeza de que estão sendo divididos e escalados de forma apropriada.
Escolhendo o design certo
Com diferentes desafios e benefícios em ambas as arquiteturas de aplicações, por que microsserviços são cada vez mais abraçados por empresas digitais? A resposta está nas mudanças em relação às expectativas de usuários e à infraestrutura das aplicações, visto que ambas requerem alto nível de flexibilidade em relação ao modo como as aplicações são construídas e colocadas em produção.
Acomodando novos padrões de uso
Aplicações monolíticas funcionam bem em situações que não requerem muita flexibilidade. No entanto, o uso de dispositivos hoje em dia é muito diferente do que antes do advento dos microsserviços, em que as aplicações precisam ser muito mais ágeis.
Lá em 2013 – antes do artigo seminal do Fowler sobre microsserviços – a Forrester já rejeitava sistemas de entrega de “tamanho único” usados por aplicações monolíticas de três camadas, alegando que era insuficiente para oferecer otimização, customização e o desempenho necessários para acomodar o uso cada vez maior de dispositivos móveis.
Desde então, o número de dispositivos móveis só tem aumentado, com o relatório anual da Cisco observando que dispositivos e conexões crescem a uma taxa 10x maior que o crescimento da população. Já que isso inclui uma variedade grande de dispositivos e capacidades, os tamanhos de telas são mais variados e os padrões de consumo – que incluem qualquer coisa desde checar um email a fazer streaming de um vídeo inteiro em HD –, são cada vez mais difíceis de prever.
Mais recentemente, o App Attention Index de 2019 feito pela AppDynamics, da Cisco, fornece insights adicionais sobre os usuários atuais. Entre suas descobertas, estava um desejo avassalador por conteúdo personalizado, enquanto problemas com funcionalidades limitadas, disponibilidade ruim e respostas lentas estavam no ranking das três questões mais frustrantes para os usuários.
Além disso, a pesquisa descobriu que os usuários têm cada vez menos tolerância a baixo desempenho e estão cada vez mais dispostos a deletar apps ou compartilhar experiências ruins. Dessa forma, a habilidade de uma empresa em lidar com ou responder às necessidades do consumidor é cada vez mais crucial para o seu futuro.
Para resumir, os usuários de hoje:
- usam muito dispositivos móveis;
- possuem dispositivos diversos;
- querem personalizar suas experiências;
- não toleram baixo desempenho; e
- esperam novas funcionalidades e experiências.
Microsserviços são uma forma de oferecer escalabilidade flexível, entrega contínua de novas funcionalidades e maior tolerância a falhas. Além disso, podem se aproveitar de infraestruturas novas, construídas para lidar com as demandas presentes do usuário.
Impulsionando novas infraestruturas
Para atender às mudanças de comportamento do usuário, novas infraestruturas surgiram para oferecer mais mobilidade, personalização, desempenho e inovação. O Edge Computing traz computação e armazenamento para mais perto do usuário final, o que permite baixa latência e programabilidade na Edge – satisfazendo à demanda por melhor performance e conteúdo personalizado.
Além disso, o 5G, nova geração de redes móveis, possibilitará melhorias dramáticas de desempenho mobile. Uma prévia da Qualcomm elenca vários destaques, citando latência em nível de milissegundos e com 100x mais capacidade de lidar com tráfego. Visando o futuro bem próximo, as redes de 5G já estão sendo construídas para uso privado e do consumidor. A Cisco reporta que 10% dos dispositivos móveis e conexões globais vão usar 5G até 2023.
No entanto, para impulsionar por completo essas tecnologias, as aplicações precisam usar a arquitetura de microsserviços. Para descentralizar a armazenagem e as competências computacionais, o Edge Computing requer processos leves e eficientes em termos de recursos. Para entregar desempenho, o 5G usa novos princípios de arquitetura como separação entre planos de controle e de usuário; slicing de redes, e arquitetura baseada em serviços, que requer que sejam o mais modulares, reutilizáveis e interoperáveis quanto possível.
Novas tecnologias precisam de:
- processos desacoplados;
- serviços reutilizáveis;
- uso eficiente de recursos; e
- interoperabilidade.
Microsserviços acomodam as necessidades de ambas as novas tecnologias usando processamento independente e desacoplado que podem ser implementados e escalados de modo flexível.
Conclusão
Por fim, os microsserviços têm a função única de atender às necessidades dos usuários de hoje e das novas tecnologias. No entanto, as empresas devem se certificar de que estejam usando ferramentas que simplifiquem a construção e o funcionamento das aplicações.
A Plataforma de Edge da Azion simplifica tanto para quebrar aplicações monolíticas quanto para construir novas funcionalidades no Edge. Nossa abordagem serverless indica que cuidamos da gestão de infraestrutura, escalando aplicações automaticamente conforme suas necessidades, para que empresas não precisem monitorar e adaptar o uso de seus recursos continuamente.
Embora um modelo serverless reduza os desafios de fragmentar aplicações monolíticas drasticamente, a transição para microsserviços ainda requer alguma consideração para ter certeza de que é executada da melhor forma possível. O próximo post da série ajudará sua empresa a se preparar para a modernização de aplicações e a desenvolver um plano para “enfrentar” esse processo.