Como aplicativos e microsserviços nativos da nuvem afetam o processo de desenvolvimento
Melhores práticas, como refatoração de código e uso de padrões de design de microsserviço, ajudam desenvolvedores a trabalhar em alta velocidade
Fui um desenvolvedor prático e diretor de tecnologia durante os dias de programação orientada a objetos, plataformas web de três camadas, arquitetura orientada a serviços (SOA) e hospedagem em servidores virtuais no data center. Tanta coisa mudou desde então!
As equipes de desenvolvimento de software mais avançadas estão desenvolvendo microsserviços e permitindo experiências ricas de usuário front-end usando JavaScript do lado do cliente. As opções de hospedagem explodiram e incluem plataforma como serviço (PaaS), contêineres como serviço (CaaS), funções sem servidor e outras arquiteturas. Os aplicativos que os desenvolvedores criam estão aproveitando fluxos de dados em tempo real, conectando-se a modelos de machine learning e fazendo interface com SaaS e sistemas corporativos.
As ferramentas de desenvolvimento de hoje evoluíram significativamente. Eles permitem que equipes de desenvolvimento distribuídas globalmente operem de forma independente, liberem alterações frequentes e respondam a problemas rapidamente. Integração e entrega contínuas (CI/CD), testes contínuos, infraestrutura como código (IaC) e AIops permitem que as equipes automatizem a integração, a implantação, a configuração da infraestrutura e o monitoramento.
As mudanças também incluem transformações culturais e práticas, como a adoção de planejamento contínuo em agile, instrumentação de shift-left testing, abordagem proativa de riscos de segurança e instituição de engenharia de confiabilidade do local.
Procurei vários especialistas para ir a um nível mais profundo e sugerir as melhores práticas sobre como o processo de desenvolvimento muda ao construir e implementar aplicativos nativos da nuvem e microsserviços.
Alta velocidade requer coordenação e consciência de operações
Minha primeira preocupação com as equipes de desenvolvimento que visam a construção de muitos microsserviços pequenos, atômicos ou frequentemente implantados é quando suas velocidades de implantação não levam em conta a colaboração necessária e os guarda-corpos de segurança.
Falei com Jason Walker, CTO da BigPanda, sobre suas experiências com equipes de desenvolvimento que criam, implantam e aprimoram microsserviços com sucesso. Ele reconhece: “O impacto mais significativo é a velocidade, e o tempo de ciclo de desenvolvimento de teste e implantação é drasticamente reduzido. Desenvolvendo na nuvem para um serviço baseado em nuvem e aproveitando um ecossistema de microsserviços para entradas, uma equipe ágil pode se mover muito rapidamente”.
Walker sugere que o ambiente de trabalho deve ajudar as equipes a se manterem no caminho certo e a agregar valor ao negócio enquanto operam em alta velocidade. Ele recomenda várias práticas:
- Os líderes em todos os níveis devem compreender e alinhar as metas estratégicas para evitar que as equipes se desviem dos objetivos de negócios.
- Scrum masters devem adotar métricas ágeis, pontuar histórias com precisão e monitorar a velocidade da equipe ao longo do tempo, observando e acomodando a variabilidade para o planejamento de longo prazo.
- Processos de gerenciamento de conhecimento e entrega de documentação precisos e atualizados devem ser incorporados ao ciclo de vida de desenvolvimento de software para evitar que equipes modulares se dispersem umas das outras e desenvolvam incompatibilidades.
- Uma estratégia de monitoramento acionável é necessária. A telemetria sintética e do cliente podem ser macroindicadores úteis do desempenho geral do serviço, e a relação sinal-ruído no monitoramento deve ser medida.
Refatoração de código aprimora microsserviços
Uma das disciplinas de codificação mais importantes na programação orientada a objetos e SOA é a refatoração de código. As técnicas permitem que os desenvolvedores reestruturem o código à medida que entendem melhor as considerações de uso, fatores de desempenho ou problemas técnicos de dívida.
Refatorar é uma técnica-chave para transformar aplicativos monolíticos em microsserviços. As estratégias de refatoração incluem separar a camada de apresentação, extrair serviços de negócios e refatorar bancos de dados.
Robin Yeman, membro do Conselho Consultivo Estratégico da Project and Team, passou a maior parte de sua carreira trabalhando em sistemas governamentais e de defesa em grande escala. Robin admite: “As maiores barreiras tecnológicas para a utilização de agile na construção ou atualização de sistemas legados complexos são as muitas dependências na arquitetura de software, forçando várias transferências entre as equipes e atrasos na entrega”.
Robin sugere que a refatoração deve se concentrar na redução das dependências. Ela recomenda: “Refatorar a arquitetura de software de grandes sistemas legados para utilizar aplicativos nativos da nuvem e microsserviços reduz as dependências entre os sistemas e as equipes que os suportam”.
A refatoração também melhora os microsserviços de maneiras importantes, como:
- Atualizar os modelos de domínio quando o modelo de negócios evolui;
- Reduzir os serviços para estar em conformidade com o princípio de responsabilidade única;
- Melhorar as mensagens em arquiteturas orientadas a eventos;
- Melhorar a capacidade de observação e validação de erro;
- Lidar com mudanças nos pipelines devops ou na configuração do contêiner.
Kit Merker, COO da Nobl9, oferece este conselho para organizações em transição para aplicativos e microsserviços nativos da nuvem. “Você não pode simplesmente reescrever tudo – você precisa fazer a transição em fases. Uma prática recomendada é definir objetivos claros de nível de serviço que sejam agnósticos de implementação e gerenciem a impressão do usuário sobre seu serviço, mesmo durante a transição para implementações nativas da nuvem”.
Adote padrões de design de microsserviço
Os padrões de projeto sempre foram usados como ferramentas para estruturar o código em torno de conjuntos de problemas comuns. Por exemplo, as categorias de padrões de projeto orientados a objetos são criativas, comportamentais e estruturais; eles são usados para resolver problemas comuns em design de software. Os padrões de design SOA existem há mais de uma década e são um precursor dos padrões de design da API REST e da API em nuvem de hoje.
Usar padrões de design de microsserviço é fundamental para o sucesso a longo prazo. As organizações de tecnologia buscam serviços independentes, resilientes e de provisionamento automático que oferecem suporte ao isolamento de falhas, entrega contínua e um modelo de governança descentralizado. Isso pode ser desafiador se as equipes de desenvolvimento não tiverem uma linguagem comum, arquitetura de microsserviço e estratégia de implementação para desenvolver com padrões de design.
Tyler Johnson, cofundador e CTO da PrivOps, explica que o desenvolvimento de microsserviços é uma estratégia-chave para reduzir a complexidade. Ele diz: “Uma maneira de descrever os aplicativos nativos da nuvem é como um conjunto de sistemas complexos, distribuídos e interativos. Essa complexidade pode rapidamente se tornar incontrolável, e é por isso que uma arquitetura modular de microsserviços padronizada, incluindo ferramentas padronizadas de devsecops, APIs e modelos de dados é necessária”.
Michael Bachman, Arquiteto Global e principal Tecnólogo da Boomi, sugere que o uso do padrão de design de microsserviço composto permite que os desenvolvedores se concentrem na experiência do usuário. Esse padrão de design é particularmente importante quando os desenvolvedores criam aplicativos conectados a serviços multicloud e APIs de plataforma SaaS.
Bachman explica: “O composto é uma coleção de endpoints apresentados por meio de uma visualização abstrata. Os desenvolvedores podem acessar um catálogo de serviços, fazer chamadas para um composto e não se preocupar com o que está por baixo. Estamos nos aproximando do usuário final e possibilitando uma experiência confiável por meio de um serviço composto de alto nível”.
Em resumo, construir aplicativos e microsserviços nativos da nuvem exige que as equipes de desenvolvimento se sobressaiam em práticas de desenvolvimento de software de longa data, como colaboração, refatoração de código e desenvolvimento de serviços reutilizáveis e confiáveis. Como as equipes estão desenvolvendo esses serviços em uma escala significativa, é importante aprender, adaptar e amadurecer essas práticas recomendadas.