En lo que respecta a la disciplina de la arquitectura en el desarrollo de software, nos encontramos ante varios tipos de arquitectura. Cada uno, con sus características y especificidades. En este artículo abordaremos tres tipos de arquitectura, son: Arquitectura de Software, Arquitectura de Soluciones y Arquitectura Corporativa. A pesar de ser arquitecturas diferentes y tener funciones específicas en algún momento del desarrollo, terminan interactuando entre sí. Arquitectura de software Esta arquitectura es la más cercana al código y al desarrollador. Se centra en la organización interna de un sistema y aborda la división del sistema en componentes, tales como: clases, módulos o servicios. También define cuál será la interacción entre ellos, siendo responsable de aspectos como modularidad, escalabilidad, seguridad y reutilización de código. Algunas de las definiciones de esta arquitectura: • Qué lenguaje de programación se adoptará; Por ejemplo: Java o .NET C#. • Qué frameworks y bibliotecas utilizar en la solución: por ejemplo, si elige el lenguaje de programación Java, utilice Spring Boot Framework para facilitar y acelerar el desarrollo de aplicaciones web y microservicios. • Cómo acceder a la capa de datos y cómo se producirá la persistencia, ya sea a través de un marco de mapeo relacional de objetos o manualmente. Si elige un ORM, defina qué herramienta se utilizará; Por ejemplo: Hibernar o EclipseLink. • Qué modelo arquitectónico se utilizará en la implementación y los patrones arquitectónicos apropiados que cumplan con los requisitos del sistema. Por ejemplo: MVC, Arquitectura en Capas, Cliente-Servidor, Hexagonal u Orientada a Servicios. • ¿Cuál es la forma de comunicación entre los componentes del sistema? Por ejemplo: HTTP, REST o mensajería asincrónica. • Cómo se producirá la escalabilidad y cómo se escalará el sistema para manejar los aumentos de carga y demanda; Por ejemplo: equilibrio de carga, escalamiento horizontal/vertical o división de datos. ¿Cuál seguir?
Estos temas enumeran algunos ejemplos de decisiones arquitectónicas que se pueden tomar durante el proceso de definición de una arquitectura de software. No hay una respuesta correcta o incorrecta para estas definiciones. Justo el que mejor se adapta a cubrir una necesidad dentro de un contexto empresarial. Estas decisiones son muy importantes y deben tomarse con muchos antecedentes y cautela, ya que cambiarlas posteriormente afectará toda la estructura del sistema, provocando costos no deseados y retrasos en el proyecto. Por lo que se recomienda realizar Pruebas de Conceptos (POC's) para que las decisiones tomadas sean lo más asertivas posibles y garanticen un sistema robusto, escalable y de alta calidad. Es importante que el arquitecto de software tenga un buen conocimiento técnico y en base a sus experiencias tome la mejor decisión para que el desarrollo sea fluido y cadenciado. Además, el arquitecto debe estar preparado para actuar en tiempos de crisis. A menudo, se le puede pedir que identifique problemas específicos y altamente complejos, como depurar una biblioteca o un marco para tomar una decisión importante y corregir un problema en producción, haciendo que la operación vuelva a funcionar con normalidad. Arquitectura de la solución La arquitectura de la solución se encuentra en una capa superior a la arquitectura del software y es responsable de transformar los requisitos comerciales en componentes de ingeniería que trabajarán juntos para resolver el problema y satisfacer las necesidades comerciales. Abarca la definición de los sistemas involucrados, la integración entre ellos, las interfaces de comunicación y las estrategias para asegurar que la solución en su conjunto funcione de manera efectiva y alcance sus objetivos. Este tipo de arquitectura es ideal para identificar áreas dentro de una organización donde se pueden reducir los costos, mejorar el rendimiento y automatizar los procesos para volverlos más eficientes, optimizados y estandarizados. La principal diferencia entre Arquitectura de Software y Arquitectura de Soluciones es que la primera se ocupa únicamente de cuestiones relacionadas con la ingeniería, mientras que la segunda es responsable de garantizar que un producto de software resuelva un problema comercial específico dentro de la estrategia de una empresa.
Atividades que estão associadas a esta disciplina:
• Compreender e analisar os requisitos do negócio e do sistema para identificar as necessidades e os objetivos da solução; Por exemplo: Entrevistas/workshops, estudos de viabilidade e criação de diagramas de contexto.
• Criar e liderar os processos de integração entre sistemas para atender os requisitos de negócio; Por exemplo: Definição de interfaces, serviços web (API's REST) e Middleware de integração (Kafka).
• Identificar e definir as medidas de segurança necessárias para proteger a solução contra ameaças; Por exemplo: Autenticação, Autorização, Criptografia e proteção de dados sensíveis.
• Colaborar com stakeholders (desenvolvedores, analistas de negócios e gerentes de projeto), para garantir a compreensão e a adoção da arquitetura de soluções; Por exemplo: Comunicação clara das decisões arquiteturais, realização de revisões técnicas e a obtenção de feedback dos envolvidos.
• Identificar os riscos associados à solução e desenvolver estratégia para mitigá-los; Por exemplo: Análise de riscos técnicos, operacionais e segurança.
• Considerar os requisitos de desempenho, como tempo de resposta e capacidade de processamento, e também a capacidade de escalar a aplicação para lidar com picos de aumento de carga; Por exemplo: Uso de caches, escalonamento horizontal, arquitetura de microsserviços ou serviços de mensageria.
Vínculo forte
Podemos concluir que a arquitetura de soluções está na divisão entre o técnico e o negócio, e que há um vínculo forte entre essas duas vertentes, considerando a importância de que a solução técnica está sendo definida para resolver um problema de negócio. As habilidades de comunicação na arquitetura de soluções são imprescindíveis, pois há frequentemente um contato direto com a área de negócio, que normalmente tem o conhecimento técnico muito pequeno ou inexistente, com isso, cabe ao papel do arquiteto de soluções ser capaz de explicar e traduzir de forma simples toda a solução técnica que será construída, de uma forma abstrata o suficiente para que todos entendam. Algo importante a se considerar é o conhecimento necessário para representar a arquitetura através de diagramas, como por exemplo o C4, e que ele possa representar de forma clara os componentes do software, a interface com outros sistemas, o fluxo de dados e demais informações que forem pertinentes tanto para a engenharia quanto para o negócio.
Arquitetura Corporativa
Define-se arquitetura corporativa como uma série de conhecimentos técnicos e habilidades de gestão que integram a tecnologia aos objetivos do negócio, é uma visão mais ampla que abrange a arquitetura de todo o ambiente de tecnologia da informação da organização. Determina os princípios, políticas e os padrões de governança que orientam a estruturação dos sistemas de software e infraestrutura de uma empresa, se concentrando em como os diferentes sistemas e soluções se encaixam dentro do contexto organizacional, garantindo a consistência, a integração e a eficiência dos recursos de TI.A arquitetura corporativa também considera fatores estratégicos e de negócios, alinhando a tecnologia da informação com os objetivos e necessidades da organização. Puede incluir la definición de modelos de procesos de negocio, la gestión de la cartera de sistemas, el gobierno de TI y la definición de políticas de seguridad de la información. Decisiones tomadas dentro de este tipo de arquitectura: • Estandarización del lenguaje de programación y frameworks utilizados en las soluciones dentro de la empresa, delimitando qué tecnologías se habilitarán para su uso; Por ejemplo: usar la pila de Java con Spring Boot Framework en soluciones API. • Estandarización de bases de datos; Por ejemplo: SQLServer y Oracle. • Procesos de control de cambios para auditar publicaciones en un ambiente productivo; Por ejemplo: Controlar accesos y permisos, revisar y aprobar cambios.
• Definir y documentar un modelo de arquitectura con el que trabajará la organización; Por ejemplo: cree un diagrama que ilustre las capas principales de la arquitectura, que abarque las capas de presentación, negocio y datos. • Evaluar la implementación de nuevas tecnologías; Por ejemplo: realización de pruebas de concepto (POC) e investigaciones de mercado. • Implementar soluciones corporativas DevOps; Por ejemplo: Automatización de compilación y empaquetado utilizando Jenkins como transportador CI/CD. Importancia de la arquitectura corporativa Contar con una arquitectura corporativa es muy importante, ya que define estándares que toda la empresa debe adoptar y seguir, y ayuda a alinear los objetivos estratégicos de la organización con sus actividades operativas, ayudando a identificar redundancias, ineficiencias y oportunidades de optimización, permitiendo la simplificación, consolidación y racionalización de recursos resultando en una mayor eficiencia operativa y reducción de costes. La arquitectura corporativa ayuda en la gestión del ciclo de vida de los sistemas de TI, desde la planificación estratégica, el establecimiento de estándares de calidad, gobernanza y cumplimiento hasta el desarrollo, implementación, operación y mantenimiento de sistemas, asegurando una gestión eficaz y sostenible de los activos de TI. Conclusión En este artículo, analizamos los tres tipos principales de arquitectura que existen en el desarrollo de software, los detalles de cada tipo y cómo se relacionan entre sí. Esta división es importante para que cada arquitectura se centre en un área específica para que las tres juntas puedan cubrir todo el ciclo de desarrollo de software. Como hemos visto, la arquitectura de software está más cerca del código y del desarrollador, la arquitectura de soluciones está más enfocada al negocio que la solución pretende resolver y la arquitectura corporativa para definir los estándares tecnológicos que la organización debe adoptar para el software implementado. soluciones. La aplicación de estos tipos de arquitectura varía según el tamaño de la organización, cuanto más grande, más separados y específicos son los tipos de arquitectura, y cuanto más pequeña, menor separación entre los tipos de arquitectura, y muchas veces fusionándose en un solo tipo. . Es importante señalar que, para cada tipo de arquitectura, el arquitecto puede desempeñar un rol diferente, y cada uno con sus habilidades específicas para cada área, pero las habilidades de comunicación, pensamiento crítico, proactividad y resiliencia son comunes a todos los tipos de arquitectura. .