Patrones de Arquitectura de Software: PAC y MicroKernel


PAC (Presentación, Abstracción y Control)

El patrón PAC (Presentación, Abstracción y Control) se utiliza para separar una aplicación en diferentes componentes, similar a MVC. PAC introduce el concepto de «agentes» para lograr una mayor modularidad y desacoplamiento. Resulta especialmente útil en sistemas grandes y complejos, donde la modularidad y el desacoplamiento son cruciales.

Componentes:

  • Presentación: Interfaz de usuario.
  • Abstracción: Funcionalidad principal del sistema.
  • Control: Comunicación entre la presentación, la abstracción y otros agentes.

Contexto:

  • Sistemas interactivos desarrollados utilizando agentes.
  • Sistemas interactivos que requieren una separación clara de funcionalidades.
  • Sistemas donde la colaboración entre agentes es crucial.

Requerimientos:

  • Estructurar un sistema interactivo mediante agentes que funcionan de forma integrada.
  • Generar interfaces de usuario flexibles.
  • Separar la presentación de la funcionalidad.
  • Lograr un bajo acoplamiento entre componentes.
  • Definir agentes con interfaces propias de comunicación.
  • Diseñar agentes con estado y datos privados.
  • Facilitar el trabajo cooperativo entre agentes.

Solución:

  • Definir una estructura jerárquica de tres niveles de agentes:
    • Alto nivel: Funcionalidad central del sistema e interfaz global de usuario.
    • Bajo nivel: Manejo de interfaces específicas de usuario.
    • Intermedio: Relación entre los agentes de alto y bajo nivel.
  • Cada agente es responsable de una parte específica de la funcionalidad del sistema.
  • Un agente está compuesto por:
    • Presentación: Aspecto visible del agente. Define la interfaz que expone un agente a otros para la utilización de sus servicios. No se limita exclusivamente a la interfaz de usuario.
    • Abstracción: Modelo de datos interno y operaciones sobre ellos.
    • Control: Conexión entre la presentación y la abstracción, y comunicación con otros agentes. Coordina la comunicación entre la presentación y la abstracción, así como con otros agentes.

Implementación:

  • Definir la funcionalidad central del sistema.
  • Estructurar la jerarquía de agentes.
  • Definir e implementar cada agente, incluyendo su funcionalidad, interfaz, modelo de datos y mecanismo de control.

Análisis:

Ventajas:
  • Asignación de responsabilidades específicas: Cada agente tiene una funcionalidad y responsabilidad específica, lo que simplifica la comprensión del sistema.
  • Funcionamiento independiente: Cada agente funciona de manera autónoma, lo que facilita la mantenibilidad y la incorporación de nuevos agentes.
  • Soporte para multitarea: La arquitectura PAC facilita la implementación de sistemas multitarea.
Desventajas:
  • Complejidad del sistema: La estructura jerárquica y la coordinación entre agentes pueden complicar el sistema.
  • Baja eficiencia: Puede ser menos eficiente que un sistema monolítico debido a la necesidad de coordinación y comunicación entre agentes.
  • Complejidad del mecanismo de control: La gestión de la comunicación y la coordinación entre agentes puede ser compleja.

MicroKernel

El patrón MicroKernel se utiliza para diseñar sistemas operativos y otros sistemas de software donde se busca un alto grado de modularidad, flexibilidad y robustez. Divide el sistema en un núcleo mínimo (microkernel) que proporciona los servicios más básicos y esenciales, y otros componentes o servidores que se ejecutan en el espacio de usuario y manejan las funcionalidades restantes del sistema.

El MicroKernel se basa en un núcleo mínimo que realiza funciones básicas y plugins que permiten que el núcleo se adapte a distintos entornos. Se compone de una estructura mínima (núcleo) y una extendida (plugins). Por ejemplo, si se desea que el sistema pueda reproducir música, se implementaría mediante un plugin.

Contexto:

  • Sistemas que deben adaptarse a cambios en los requerimientos.
  • Sistemas con requisitos cambiantes.
  • Sistemas con interfaces de programación similares.
  • Sistemas basados en el mismo núcleo funcional (ej. Linux).
  • Sistemas como VS Code, donde el editor es el «sistema core» y las extensiones son los módulos.

Problema:

  • Sistemas legacy (sistemas que han perdurado mucho tiempo, ej. Linux) que deben adaptarse a cambios en la infraestructura (hardware/software).
  • Sistemas que deben ser extensibles a nuevas tecnologías.
  • Sistemas que deben ser portables.
  • Sistemas que deben ser adaptables a los cambios a lo largo del tiempo.

Solución:

  • MicroKernel: Componente central (núcleo) que contiene la funcionalidad básica, la administración de recursos y el servicio de comunicación entre componentes. Es independiente de la plataforma donde se ejecutará.
  • Servidores internos: Servicios específicos de la plataforma que interactúan con el MicroKernel.
  • Servidores externos: Interfaz de acceso al núcleo.
  • Adaptadores: Mecanismo de comunicación entre el cliente y el servidor externo.
  • Clientes: Procesos que reciben las solicitudes de los usuarios y interactúan con el sistema a través de los adaptadores.

Análisis:

Ventajas:
  • Adaptabilidad: Permite la adaptación a diferentes entornos y requisitos.
  • Portabilidad: Se puede ejecutar en diferentes plataformas si se diseña de forma independiente del hardware.
  • Flexibilidad: Permite responder a distintas necesidades mediante la inclusión de servidores específicos.
  • Escalabilidad horizontal: Facilita la escalabilidad del sistema.
  • Confiabilidad: La separación de componentes aumenta la confiabilidad del sistema.
Desventajas:
  • Complejidad del sistema: La interacción entre los diferentes componentes puede ser compleja.
  • Baja eficiencia: La comunicación entre componentes puede afectar la eficiencia del sistema.
  • Complejidad de la implementación: La implementación del MicroKernel y sus componentes puede ser compleja.
  • Punto único de falla: El MicroKernel puede ser un punto único de falla, aunque esto depende de cómo esté definido.