Ciência e Tecnologia

Arquiteturas sustentáveis ​​em um mundo de Agile, DevOps e nuvem

Criar e manter arquiteturas de software que permaneçam sustentáveis ​​ao longo do tempo é um desafio para arquitetos e engenheiros de software. Eles podem tentar atender a todos os requisitos, fornecer todos os recursos e planejar todos os componentes do sistema de uma só vez com grandes projetos iniciais, o que envolve concluir e aperfeiçoar projetos arquitetônicos antes que as implementações sejam iniciadas. Alternativamente, eles podem permitir que o processo Agile conduza o projeto arquitetônico para produzir arquiteturas emergentes, onde as equipes de desenvolvimento começam a fornecer funcionalidade e deixam os projetos arquitetônicos emergirem, com pouco ou nenhum planejamento inicial. Infelizmente, nenhuma dessas abordagens é consistentemente bem-sucedida na entrega de arquitetura sustentável.

 

A abordagem de Arquitetura Contínua (CA) oferece um compromisso significativo entre grandes projetos iniciais e arquiteturas emergentes, bem como um caminho comprovado para alcançar a sustentabilidade da arquitetura de software na era do Agile, DevOps e nuvem.

 

O que é Arquitetura Contínua?

 

A arquitetura contínua é uma abordagem, não uma metodologia formal, que pode ser facilmente adaptada ao seu contexto específico.

 

Ele é baseado nos seis princípios simples a seguir que descrevem como podemos elaborar continuamente arquiteturas de software no mundo atual de Agile, DevOps e nuvem:

 

“Produtos de arquiteto; evoluir de projetos para produtos . Arquitetar produtos é mais eficiente do que apenas desenhar soluções pontuais para projetos e foca a equipe em seus clientes.

 

Concentre-se nos atributos de qualidade, não nos requisitos funcionais . Os requisitos de atributos de qualidade orientam a arquitetura.

 

Adie as decisões de projeto até que sejam absolutamente necessárias . Projete arquiteturas com base em fatos, não em suposições. Não faz sentido projetar e implementar recursos que nunca poderão ser usados ​​- é uma perda de tempo e recursos.

 

Arquiteto para a mudança – aproveite o “poder do pequeno”. Componentes grandes, monolíticos e fortemente acoplados são difíceis de mudar. Em vez disso, aproveite elementos de software pequenos e pouco acoplados.

 

Arquiteto para construir, testar, implantar e operar . A maioria das metodologias de arquitetura se concentra exclusivamente nas atividades de construção de software, mas arquitetos e engenheiros também devem se preocupar com testes, implantação e operação para dar suporte à entrega contínua.

 

Modele a organização de suas equipes após o design do sistema em que você está trabalhando . A maneira como as equipes são organizadas impulsiona a arquitetura e o design dos sistemas em que estão trabalhando.”

 

Esses princípios fornecem um modelo útil, mas não são prescritivos. Eles são complementados pelas seguintes quatro atividades essenciais:

 

“Foco nos atributos de qualidade , que são os principais requisitos transversais que uma boa arquitetura deve atender.

 

Conduza as decisões arquitetônicas , que são a unidade primária de trabalho das atividades arquitetônicas.

 

Conheça a sua dívida técnica , cujo entendimento e gestão é fundamental para uma arquitetura sustentável.

 

Implemente loops de feedback , que nos permitem iterar pelo ciclo de vida de desenvolvimento de software e entender o impacto das decisões de arquitetura. A automação é um aspecto fundamental de loops de feedback eficazes.”

 

Além disso, a arquitetura contínua inclui uma “caixa de ferramentas” arquitetônica que incorpora um conjunto de ferramentas comprovadas, como logs de decisão, árvores de utilitários e táticas arquitetônicas. Arquitetos e engenheiros de software podem estender essa caixa de ferramentas conforme necessário, adicionando ferramentas relevantes para seus contextos.

 

Os requisitos de atributos de qualidade são fundamentais para a sustentabilidade

 

O que entendemos por sustentabilidade no contexto da arquitetura de software? As arquiteturas de software sustentáveis ​​se concentram em atender aos requisitos conhecidos e atuais sem comprometer sua capacidade de atender aos requisitos futuros e desconhecidos. Como os requisitos de atributos de qualidade impulsionam os esforços de design de arquitetura ( Princípio 2 da CA) , focar em atender aos requisitos de atributos de qualidade é uma maneira eficaz de criar arquiteturas sustentáveis.

 

Infelizmente, esses requisitos geralmente não são tão bem documentados e examinados cuidadosamente quanto os requisitos funcionais. Eles podem ser registrados como uma simples lista com marcadores: por exemplo, especificando que “o sistema deve ser rápido” ou “o sistema deve ser escalável”, sem dizer aos arquitetos e engenheiros de software como projetar um sistema que atenda a esses requisitos.

 

Uma maneira melhor de descrever os requisitos de atributos de qualidade é usar ATAM Scenarios and Utility Trees , conforme ilustrado no exemplo a seguir:

 

Essa abordagem depende da compreensão de três propriedades principais para cada cenário:

 

“Estímulo” descreve o que qualquer estímulo externo do sistema, como um usuário ou mesmo uma falha, faria para iniciar o cenário.

“Resposta” representa a resposta esperada do sistema ao estímulo.

“Medição” define ainda mais a resposta ao estímulo, fornecendo um alvo mensurável, que pode ser um intervalo.

Vários atributos de qualidade se tornaram mais importantes para a elaboração de arquiteturas de software sustentáveis ​​na era digital: segurança, escalabilidade, desempenho e resiliência. Eles nem sempre são bem compreendidos ou priorizados por arquitetos e engenheiros de software. No entanto, atender aos requisitos associados a esses atributos de qualidade é um componente-chave do processo de projeto arquitetônico.

 

Decisões arquitetônicas e dívida técnica

 

A condução de decisões arquitetônicas é uma atividade essencial na Arquitetura Contínua, e as decisões arquitetônicas são a unidade primária de trabalho de um profissional. Quase todas as decisões arquitetônicas envolvem compensações. Por exemplo, uma decisão tomada para otimizar a implementação de um requisito de atributo de qualidade, como desempenho, pode impactar negativamente a implementação de outros atributos de qualidade, como usabilidade ou manutenibilidade. Uma decisão arquitetural feita para acelerar a entrega de um sistema de software pode aumentar a dívida técnica, que precisa ser “reembolsada” em algum momento no futuro e pode impactar a sustentabilidade do sistema. Finalmente, todas as decisões de arquitetura afetam o custo do sistema, e pode ser necessário fazer concessões para atender ao orçamento alocado para esse sistema.

 

As compensações geralmente são as menos desfavoráveis, e não as ideais, devido a restrições além do controle da equipe, e as decisões geralmente precisam ser ajustadas com base no feedback recebido das partes interessadas do sistema. Tomar decisões arquitetônicas continuamente, bem como compensações conscientes e ajustá-las conforme necessário, é a chave para criar e manter arquiteturas sustentáveis.

 

É importante manter um registro permanente e preciso das decisões de arquitetura, incluindo todas as restrições associadas, pois criar uma arquitetura sustentável é encontrar a melhor solução (ou seja, boa o suficiente) dentro das restrições dadas à equipe. Também é importante registrar todas as opções consideradas pela equipe, bem como a justificativa para a decisão e suas compensações associadas. A equipe também deve avaliar e registrar o custo de decisões potencialmente reversas antes de finalizá-las, pois pode ser necessário reverter algumas das decisões em algum momento no futuro para manter o sistema sustentável. Princípio CA 3nos lembra de projetar arquiteturas com base em fatos, não em suposições, e os fatos podem mudar com o tempo, impactando as decisões que já tomamos. Por fim, manter o log de decisão no mesmo repositório que o código-fonte garante que o registro de decisão de arquitetura permaneça atual e preciso.

 

Táticas arquitetônicas

 

Selecionar e aplicar táticas de arquitetura é uma excelente abordagem para atender aos requisitos de atributos de qualidade. As táticas arquitetônicas são uma técnica comprovada e originada de pesquisas no Software Engineering Institute/Carnegie Mellon (SEI/CMU) . “ Uma tática de arquitetura é uma decisão de design que afeta o quão bem uma arquitetura de software aborda um atributo de qualidade específico .” As táticas são frequentemente (mas infelizmente nem sempre) documentadas em catálogos para promover a reutilização desse conhecimento entre os arquitetos. Como exemplo, o diagrama a seguir mostra algumas táticas representativas que podem ser usadas para lidar com falhas de escalabilidade:

 

O uso de táticas arquitetônicas ao criar e manter um sistema de software contribui para a sustentabilidade do sistema, pois o design é baseado em blocos de construção comprovados que implementam seus requisitos de atributos de qualidade.

 

Arquitetura de sistemas de software sustentáveis

 

Conforme mencionado na introdução deste artigo, arquitetos e engenheiros de software geralmente têm dificuldade em encontrar um bom compromisso entre o grande design inicial e a arquitetura emergente no contexto atual de Agile, DevOps e nuvem. Quanto projeto de arquitetura deve ser feito inicialmente versus em uma data posterior, quando as primeiras iterações do novo sistema forem entregues e os requisitos de atributos de qualidade puderem ser melhor definidos? Como a equipe desenvolve sua arquitetura “adiantada” para lidar com as inevitáveis ​​mudanças de requisitos que estão se acumulando rapidamente?

 

Para responder a essas perguntas, a abordagem da CA recomenda pensar em termos de “arquitetura mínima viável”, aproveitando o Princípio 3 da CA (“Atrasar decisões de projeto até que sejam absolutamente necessárias”) e iniciar o projeto com um pequeno número de decisões de arquitetura baseadas em requisitos factuais. Seguindo essa abordagem, a equipe cria rapidamente um sistema de software viável que pode ser lançado em um ambiente de produção. Em seguida, eles continuam a tomar decisões de projeto conforme necessário para lidar com novos requisitos ou alterações de requisitos. Além disso, é importante comunicar o plano, o progresso e as decisões a todas as partes interessadas do sistema.

 

Usar uma estratégia de Arquitetura Mínima Viável é uma maneira eficaz de trazer um produto de software ao mercado mais rapidamente com menor custo. Mas o que exatamente queremos dizer com “Arquitetura Mínima Viável?” Em termos simples, a criação de uma arquitetura mínima viável envolve as seguintes etapas:

 

Inicialmente projetando apenas arquitetura suficiente para atender exatamente aos requisitos de atributos de qualidade conhecidos de um sistema de software, a fim de criar rapidamente um sistema viável o suficiente para ser usado em produção.

Em seguida, o MVA pode ser continuamente aumentado para atender a requisitos adicionais ou alterações de requisitos à medida que são definidos ao longo do tempo. Manter o design arquitetônico flexível é essencial, e aproveitar o Princípio 4 da CA ( “Arquiteto para a mudança – aproveite o poder do pequeno” ) é uma excelente maneira de atingir esse objetivo.”

Arquitetos e engenheiros de software tendem a considerar o pior cenário ao arquitetar um sistema. Por exemplo, eles podem avaliar os requisitos de escalabilidade estimando o número máximo de transações que o sistema deve ser capaz de processar sem mencionar qualquer período de tempo durante as conversas com seus parceiros de negócios e, em seguida, adicionar uma “margem de segurança” sobre esse número. No entanto, o número fornecido pela empresa pode ser um palpite otimista. Como resultado, a equipe pode arquitetar o novo sistema para lidar com um número irreal de transações e pode adicionar complexidade desnecessária ao design.

 

É muito melhor começar com uma arquitetura mínima viável com base em estimativas realistas no momento do lançamento e evoluir essa arquitetura com base nos dados de uso reais. Essa abordagem cria um sistema de software mais sustentável e é mais econômico do que projetar um sistema com base no pior cenário. Além disso, as arquiteturas sustentáveis ​​incluem mecanismos para lidar com falhas do sistema e monitorar os principais atributos de qualidade, como escalabilidade e resiliência.

 

Conclusão

 

A arquitetura de software é orientada por requisitos de atributos de qualidade, e alguns deles, incluindo segurança, escalabilidade, desempenho e resiliência, tornaram-se mais importantes para arquiteturas de software sustentáveis ​​na era digital. A arquitetura é agora um fluxo contínuo de decisões que são revisadas continuamente para apoiar a entrega sustentável de produtos de software. A arquitetura tornou-se uma responsabilidade da equipe na era Agile, nuvem e DevOps. Aproveitar uma abordagem contínua à arquitetura, juntamente com uma estratégia de arquitetura mínima viável, aproxima você de atingir esse objetivo.

Mostrar mais

Artigos relacionados

Deixe um comentário

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

Botão Voltar ao topo