Arquitectura, diseño y conocimiento

Hace tiempo escribí sobre el término «arquitectura de software«. Hoy es fácil encontrarse con términos derivados del concepto «arquitectura» en forma mucho más frecuente y especializada como «arquitectura de datos», «arquitectura de sistemas», «arquitectura de nube de cómputo» pero parece que cada vez se tiende a ignorar más a la «arquitectura de cómputo» (cuando debería ser algo del hablar cotidiano del desarrollador de software y de todos los «arquitectos» que pululan en la industria y consultoría de telecomunicaciones, cómputo e informática).

La idea detrás del uso del término «arquitectura» en el terreno de la computación e informática tiene sus raíces en la analogía con la arquitectura tradicional, donde no sólo se habla del diseño y organización de estructuras físicas (la parte ingenieril) sino también la artistica (su apreciación por los sentidos) y funcional (su uso). En el contexto de la computación (primero) e informática (después), «arquitectura» se usa para describir la conceptualización, diseño y organización de sistemas complejos pero se pierde esa estimulación al sentido visual que nos trasmite la majestuosidad de una edificación o un espacio urbanizado (al menos para la mayor parte de la gente, ya que los versados en las cuestiones técnicas de la computación seguramente dirán otra cosa).

El origen de la utilización del término se remonta a la década de 1960, cuando la construcción de computadoras pasó de ser un esfuerzo puramente técnico a requerir una visión más estructurada y planificada. Uno de los primeros usos documentados1 del término fue en 1964 por IBM al lanzar la IBM System/360. Esta computadora fue la primera en introducir la idea de una «arquitectura» en la que diferentes modelos podían compartir una misma estructura lógica de software, lo que permitía la compatibilidad y flexibilidad. Así, la industria de la computación, trasladó la idea de la modularidad y diferentes niveles de diseño de un sistema, en una organización de nivel superior, en una «arquitectura». A nivel de hardware, se refiere a la disposición y relación entre los componentes físicos de un sistema, como la unidad central de procesamiento (CPU), la memoria, y los dispositivos de entrada y salida.

Posteriormente el término fue extendido para cubrir ideas o filosofías de diseño (algunas ya establecidas y otras por venir) sobre cómo estos componentes se organizan y se interconectan para ejecutar instrucciones eficientemente y obtener el mejor desempeño de todo un sistema. Ejemplos clásicos son las arquitecturas de Von Neumann, que describe una estructura en la que el almacenamiento de datos y programas se realiza en una memoria común, permitiendo la secuenciación y ejecución de instrucciones, y la arquitectura de Hardvard (donde las instrucciones y el flujo de datos tienen sus propios canales).

A nivel de software, la arquitectura abarca la estructuración de sistemas y aplicaciones. Aquí, el término «arquitectura de software» se refiere a la organización fundamental de un sistema, incluyendo sus componentes, las relaciones entre ellos y las reglas que rigen su diseño y evolución. La arquitectura de software se ocupa de temas como la modularidad, escalabilidad, interoperabilidad y mantenimiento de sistemas, abarcando patrones de diseño como el cliente-servidor, microservicios y arquitecturas orientadas a eventos. En este ámbito, la arquitectura se vuelve esencial para garantizar que las aplicaciones no solo sean funcionales sino también sostenibles y adaptables a lo largo del tiempo.

Como se señala al inicio, en la actualidad, el término se aplica también a la organización de sistemas distribuidos y a la infraestructura de la nube. La arquitectura en la nube implica la planificación de recursos y servicios distribuidos para garantizar la disponibilidad, seguridad y eficiencia del sistema. Conceptos como la arquitectura orientada a servicios (SOA) y la arquitectura de microservicios han surgido para abordar la complejidad de los sistemas modernos, permitiendo a las empresas desarrollar aplicaciones más ágiles y resilientes. Además, la arquitectura de sistemas distribuidos, como los utilizados en Kubernetes o en la computación sin servidores (serverless), refuerza la importancia de la arquitectura como disciplina para coordinar recursos y servicios de manera efectiva.

Lo anterior a muchos ha hecho olvidar lo importante que es conocer y tener presente la arquitectura del computador. Muchos dirán que eso sólo se limita a cosas de cómputo intenso, científico o de aplicaciones muy específicas y que para el uso cotidiano ya no importa si tenemos un microprocesador CISC, RISC o ARM en nuestro equipos y tal vez sea así para muchos usuarios finales, pero el creciente interés y desarrollo de servicios y uso de aplicaciones derivadas de ciencia de datos e inteligencia artificial hace que tengamos aplicaciones que hacen uso intensivo del hardware mucho más frecuente de lo que la mayoría de la gente cree (sí, esa gente que se la pasa quejándose que su equipo o el servicio es muy lento). Así que el conocimiento de la arquitectura del procesador, y del computador en general, dará conocimiento al desarrollador de software y los múltiples «arquitectos» para que puedan tomar algunas decisiones o acciones en la selección del principal elemento subyacente de aquello en lo que se colocarán sus creaciones: el computador.

Referencias

  1. «IBM System/360«, Wikipedia, web. Visited: 2024.09.14. URL: https://en.wikipedia.org/wiki/IBM_System/360.
  2. Mohamed Aladdin, «Software Architecture – The Difference Between Architecture and Design«, medium.com, web. Published: 2018.07.27; visited: .2024.09.14. URL: https://codeburst.io/software-architecture-the-difference-between-architecture-and-design-7936abdd5830.

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.