Tecnologia

Como a arquitetura de Microservices colabora com os métodos ágeis?

Avatar do Rogério Marques

Por Rogério Marques

18 setembro 2018 - 14:00 | Atualizado em 29 março 2023 - 17:31


como-arquitetura-de-microservices-colabora-com-os-metodos-ageis

Para inovar no relacionamento com o cliente e para impulsionar e adaptar-se à disrupção digital, as empresas precisam mudar continuamente e em velocidade crescente.

Visando realizar essas mudanças, a utilização dos métodos ágeis tem aumentando bastante. Segundo o relatório anual da VersionOne, que avalia a utilização de métodos ágeis em empresas de todo o mundo, 60% dos entrevistados possuem pelo menos metade de seus times utilizando métodos ágeis e 98% realizaram projetos ágeis com sucesso.

Devido à necessidade de criar e abraçar mudanças de forma rápida, que as metodologias ágeis pregam, torna-se muito difícil ou até impossível realizar o desenho e o desenvolvimento arquitetural completo de uma solução de software. Além disso, mesmo que esse desenho e desenvolvimento da arquitetura sejam feitos gradativamente, a capacidade de se adaptar às mudanças tende a diminuir à medida que o sistema cresce.

Afinal, a arquitetura de software pode contribuir para as práticas ágeis de desenvolvimento?

Para responder a essa pergunta, vamos pensar nos pontos principais das metodologias ágeis, que são:

Seus valores:

  1. Indivíduos e interações, mais que processos e ferramentas.
  2. Software em funcionamento, mais que documentação abrangente.
  3. Colaboração com o cliente, mais que negociação de contratos.
  4. Responder às mudanças, mais que seguir um plano.

E suas práticas:

  1. Nossa maior prioridade é satisfazer o cliente, através da entrega adiantada e contínua de software de valor.
  2. Aceitar mudanças de requisitos, mesmo no fim do desenvolvimento. Processos ágeis se adequam a mudanças, para que o cliente possa tirar vantagens competitivas.
  3. Entregar software funcionando com frequência, na escala de semanas até meses, com preferência aos períodos mais curtos.
  4. Pessoas relacionadas a negócios e desenvolvedores devem trabalhar em conjunto e diariamente, durante todo o curso do projeto.
  5. Construir projetos ao redor de indivíduos motivados. Dando a eles o ambiente e suporte necessário, e confiar que farão seu trabalho.
  6. O Método mais eficiente e eficaz de transmitir informações para, e por dentro de, um time de desenvolvimento é através de uma conversa cara a cara.
  7. Software funcional é a medida primária de progresso.
  8. Processos ágeis promovem um ambiente sustentável. Os patrocinadores, desenvolvedores e usuários, devem ser capazes de manter, indefinidamente, passos constantes.
  9. Contínua atenção à excelência técnica e bom design aumenta a agilidade.
  10. Simplicidade: a arte de maximizar a quantidade de trabalho que não precisou ser feito.
  11. As melhores arquiteturas, requisitos e designs emergem de times auto-organizáveis.
  12. Em intervalos regulares, o time reflete em como ficar mais efetivo, então, se ajustam e otimizam seu comportamento de acordo.

Desta forma, podemos considerar que para contribuir com o desenvolvimento ágil de software, a arquitetura de software deve promover algum(s) desses valores ou práticas.

Se estamos buscando modelos arquiteturais que corroborem com as práticas ágeis, esses devem ser flexíveis e adaptativos, permitindo que seja possível responder às mudanças, realizar entregas adiantadas e contínuas de valor e o máximo de outras características dos métodos ágeis.

Arquitetura de Microservices

Um modelo arquitetural que se aproxima bastante desse cenário é a arquitetura de microservices, que é uma abordagem para desenvolver uma aplicação única como um conjunto de pequenos serviços, cada um rodando seu próprio processo e comunicando-se com mecanismos leves, geralmente uma API de recursos HTTP. Em que há um mínimo de gerenciamento centralizado desses serviços, que podem utilizar diferentes tecnologias como linguagens de programação, armazenamento de dados e frameworks.

O conceito de microservices não é novo, podendo ser considerado uma evolução dos Web Services. Além disso, vincular microservices em aplicativos funcionais é uma evolução da arquitetura orientada a serviços (SOA). Porém, diferentemente da arquitetura SOA, os microservices precisam ser:

  • isolados -> Microservices não devem ser dependentes dos demais.
  • autônomos -> Cada microservice deve possuir tudo que seja necessário para seu funcionamento.
  • elásticos -> Deve ser escalável facilmente.
  • resilientes -> Cada microservice deve ser tolerante a falhas.
  • responsivos -> Baixa latência.

Utilizar uma arquitetura de microservices pode contribuir das seguintes maneiras para o desenvolvimento ágil:

  1. Refactoring controlado
    Um dos princípios do desenvolvimento ágil é que a contínua atenção à excelência técnica e bom design aumentam a agilidade. Uma das maneiras de buscar essa excelência técnica é realizando o refactoring do código. Entretanto essa prática pode se tornar difícil de ser executada à medida que o software cresce.
    Neste sentido, a utilização de microservices faz com que a refactoring seja realizada de maneira controlada, onde cada código modificado interfere apenas na estrutura do microservice em questão, prevenindo que toda a estrutura do sistema seja comprometida.
  2. Rápida adoção de novas tecnologias
    Uma das características do desenvolvimento ágil é abraçar e promover mudanças. Para isso, o desenvolvimento de software precisa estar preparado para adotar novas tecnologias, reaproveitando o máximo de trabalho já realizado.
    A clara separação de responsabilidades, a independência entre os microservices e a descentralização dos metadados da aplicação permitem uma adoção de novas tecnologias de maneira mais rápida.
  3. Maior facilidade para realizar desenvolvimento incremental
    Métodos ágeis possuem como característica o desenvolvimento incremental. Na arquitetura de microservices torna-se mais natural a criação de incrementos, uma vez que cada microservice possui uma única e bem definida responsabilidade, podendo ser construído e implantado independentemente dos demais.
  4. Simplifica o desenvolvimento distribuído
    Em projetos grandes é comum distribuir o desenvolvimento do sistema entre várias equipes, a fim de acelerar as entregas. Esta prática pode se tornar um problema à medida que passa a existir dependência e interferência entre as equipes. É importante observar também que mesmo que seus integrantes estejam em um mesmo local geográfico, diferentes times podem existir, trabalhando juntos em um local geográfico diferente dos demais times. Utilizando microservices, esta distribuição se torna mais simples, uma vez que cada equipe pode atuar em um conjunto específico de microservices, minimizando interferência e dependência entre as mesmas.
  5. Maior empoderamento de cada time
    Em uma arquitetura de microservices, quando se está desenvolvendo um sistema grande, no qual são necessários vários times trabalhando em conjunto, existe uma maior independência entre os times de desenvolvimento. Isto torna-se possível, pois cada um deles pode ser responsável por um conjunto de microservices, fazendo com que cada equipe tenha mais liberdade para tomar decisões sobre os problemas a serem resolvidos.
  6. Feedback mais frequente
    Uma das partes mais importantes do desenvolvimento ágil é o feedback rápido e constante. A utilização de microservices permite que cada pequeno incremento do software seja desenvolvido e implantado de maneira muito rápida e com baixo impacto nos demais serviços já desenvolvidos. Desta forma, é possível obter feedbacks com uma maior frequência.
  7. Maior poder de inovação
    Como cada microservice é independente e possui um propósito simples e bem definido, torna-se mais fácil construir novas soluções sobre microservices já existentes. Desta forma, caso durante o desenvolvimento do software seja identificada alguma nova oportunidade de negócio, ela pode ser explorada utilizando-se dos serviços já existentes para a aplicação atual.
  8. Facilita a execução de iterações curtas e de tempo fixo
    Desenvolvimento ágil requer um baixo acoplamento entre os componentes do software, para que o processo possa ser estruturado em pequenas partes a serem desenvolvidas em iterações curtas e de tempo fixo.
    Aplicações construídas a partir de microservices visam ser tão dissociadas e coesas quanto possível, permitindo estruturar cada iteração em partes pequenas o suficiente para serem curtas e respeitar sua duração fixa de tempo.
  9. Mudanças de metadados mais rápidas
    No desenvolvimento de aplicações muito grandes, em que todos os metadados estão centralizados, torna-se necessária uma análise minuciosa a fim de promover qualquer mudança nesses metadados, pois tal ocorrido pode impactar toda a aplicação.
    Com a implementação de microservices, cada microservice tem domínio exclusivo sobre seus metadados, o que torna qualquer modificação dessa estrutura muito menos complexa de ser realizada por estar garantidamente restrita ao microservice em questão. Isto permite que mudanças sejam incorporadas mais facilmente ao sistema, elevando o grau de agilidade do mesmo.
  10. Maior capacidade de terceirização
    Os métodos ágeis devem promover e abraçar as mudanças. Porém, em alguns casos isto pode significar a necessidade de realização de grande quantidade de trabalho em um tempo inferior ao que a equipe consegue entregar, ou pode exigir a utilização de tecnologias as quais não são de domínio da equipe e não ter tempo de desenvolver essas habilidades internamente. Neste caso uma das soluções seria terceirizar parte do desenvolvimento para ter maior capacidade de entrega e/ou a expertise necessária para responder à mudança. Sem a utilização de microservices, esse trabalho em conjunto torna-se mais difícil devido a dependência entre as várias partes do sistema, o que demandará grande coordenação e dependência entre os times (interno e contratado).

 

Os benefícios identificados estão diretamente relacionados com 5 práticas ágeis (1, 2, 3, 9 e 10) e com um dos 4 valores ágeis (Responder às mudanças, mais que seguir um plano). Essa sinergia entre a arquitetura de microservices e as práticas ágeis é muito benéfica para o desenvolvimento ágil de software e potencializa ainda mais as vantagens trazidas pela utilização de uma arquitetura de microservices, fazendo com que a difícil missão de colocá-las em prática seja ainda mais recompensadora.

Comentários:

Deixe um comentário

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