En el Global Software Architecture Summit estuvimos discutiendo mucho sobre los patrones de la arquitectura de software y decidí escribir un artículo sobre ello, destacando las ideas de los principales arquitectos de software.   

 

En primer lugar, ¿qué son los patrones de la arquitectura de software?

Los patrones arquitectónicos son formas de capturar estructuras de diseño de probada eficacia, para que puedan ser reutilizadas. Los arquitectos de software han estado buscando formas de capturar y reutilizar el conocimiento arquitectónico que han probado ser exitosos en el pasado.

Más específicamente, un patrón arquitectónico es un paquete de decisiones de diseño que se encuentra repetidamente en la práctica, tiene propiedades bien definidas que pueden ser reutilizadas y describe una clase de arquitecturas.

El desarrollo de una arquitectura puede ser visto como un proceso de selección, adaptación y combinación de patrones. El arquitecto de software debe decidir cómo instanciar un patrón, cómo hacerlo encajar en el contexto específico y las limitaciones del problema. Y más adelante lo discutiremos con más detalle.

Mark Richards escribió un libro llamado “Software Architecture Patterns”  según el que existen 5 patrones principales de arquitectura de software: microkernel, microservicios, arquitectura en capas, basada en eventos y basada en el espacio. Si quieres conocer a Mark en persona, dará un taller práctico en Global Software Architecture Summit en Barcelona (Octubre, 1-2 ) o puedes asistir a su workshop en Apium Academy

 

5 patrones principales en Arquitectura de Software

 

1. Patrón Microkernel

El patrón arquitectónico Microkernel también se conoce como un patrón arquitectónico enchufable. Se utiliza típicamente cuando los equipos de software crean sistemas con componentes intercambiables.

Se aplica a los sistemas de software que deben ser capaces de adaptarse a los requisitos cambiantes del sistema. Separa un núcleo funcional mínimo de la funcionalidad ampliada y de las partes específicas del cliente. También sirve de enchufe para conectar estas extensiones y coordinar su colaboración.

 

El patrón de la arquitectura Microkernel es un patrón natural para implementar aplicaciones basadas en productos. Y una aplicación basada en el producto es aquella que está empaquetada y disponible para su descarga en versiones como un típico producto de terceros. Sin embargo, muchas empresas también desarrollan y lanzan sus aplicaciones empresariales internas como productos de software, completas con versiones, notas de lanzamiento y funciones enchufables.

El patrón de arquitectura Microkernel permite añadir características adicionales de la aplicación como plug-ins a la aplicación central, proporcionando extensibilidad así como separación y aislamiento de características.

 

El patrón de la arquitectura Microkernel consta de dos tipos de componentes de arquitectura: un sistema central y módulos enchufables. La lógica de la aplicación se divide entre módulos enchufables independientes y el sistema básico del núcleo, lo que proporciona extensibilidad, flexibilidad y aislamiento de las características de la aplicación y la lógica de procesamiento personalizada. Y el sistema central del patrón de arquitectura del Microkernel contiene tradicionalmente sólo la funcionalidad mínima necesaria para que el sistema sea operativo.

Quizás el mejor ejemplo de la arquitectura del microkernel es el IDE de Eclipse. La descarga del producto básico de Eclipse le proporciona poco más que un editor. Sin embargo, una vez que se empiezan a agregar plugins, se convierte en un producto altamente personalizable y útil.

 

Ventajas: 

  • Gran flexibilidad y extensibilidad
  • Algunas implementaciones permiten añadir plugins mientras la aplicación se está ejecutando
  • Buena portabilidad
  • Facilidad de despliegue
  • Respuesta rápida a un entorno en constante cambio
  • Los módulos enchufables pueden probarse de forma aislada y pueden ser fácilmente burlados por el sistema central para demostrar o hacer un prototipo de una característica particular con poco o ningún cambio en el sistema central.
  • Alto rendimiento ya que puede personalizar y racionalizar las aplicaciones para incluir sólo las características que necesita. 

 

Ideal para:

  1. Aplicaciones que toman datos de diferentes fuentes, los transforman y los escriben a diferentes destinos
  2. Aplicaciones de flujo de trabajo
  3. Solicitudes de programación de tareas y trabajos

 

2. Patrón de Microservicios 

Cuando escribes tu solicitud como un conjunto de microservicios, en realidad estás escribiendo múltiples solicitudes que funcionarán juntas. Cada microservicio tiene su propia responsabilidad y los equipos pueden desarrollarlos independientemente de otros microservicios. La única dependencia entre ellos es la comunicación. A medida que los microservicios se comunican entre sí, tendrás que asegurarte de que los mensajes enviados entre ellos sean compatibles con los anteriores. 

 

Ventajas 

  • Puedes escribir, mantener y desplegar cada microservicio por separado
  • Fácil de escalar, ya que sólo se pueden escalar los microservicios que necesitan ser escalados
  • Es más fácil reescribir las piezas de la aplicación porque son más pequeñas y menos acopladas a otras partes
  • Los nuevos miembros del equipo deben ser rápidamente productivos
  • La aplicación debe ser fácil de entender y modificar
  • Altamente mantenible y comprobable – permite un desarrollo y despliegue rápido y frecuente
  • Desplegable de forma independiente – permite a un equipo desplegar su servicio sin tener que coordinar con otros equipos

 

Ideal para:

  • Sitios web con pequeños componentes
  • Centros de datos corporativos con límites bien definidos
  • El rápido desarrollo de nuevos negocios y aplicaciones web
  • Los equipos de desarrollo que se extienden, a menudo por todo el mundo

 

3.Patrón de arquitectura en capas

El patrón arquitectónico más común es el patrón arquitectónico en capas. Los patrones de arquitectura en capas son patrones de n niveles donde los componentes están organizados en capas horizontales. Este es el método tradicional para diseñar la mayoría de los programas informáticos y está destinado a ser auto-independiente. Esto significa que todos los componentes están interconectados pero no dependen unos de otros. Cada capa del patrón de arquitectura en capas tiene un papel y una responsabilidad específicos dentro de la aplicación. Por ejemplo, una capa de presentación se encargaría de manejar toda la interfaz de usuario y la lógica de comunicación del navegador, mientras que una capa empresarial se encargaría de ejecutar las reglas empresariales específicas asociadas a la solicitud.

Una de las características poderosas del patrón de arquitectura en capas es la separación de las preocupaciones entre los componentes. Los componentes dentro de una capa específica se ocupan sólo de la lógica que pertenece a esa capa.

 

Ventajas

  • Alta comprobabilidad porque los componentes pertenecen a capas específicas de la arquitectura, otras capas pueden ser burladas o desviadas, haciendo que este patrón sea relativamente fácil de comprobar.. 
  • Alta facilidad de desarrollo porque este patrón es muy conocido y no es excesivamente complejo de implementar, además la mayoría de las empresas desarrollan aplicaciones separando conjuntos de habilidades por capas, este patrón se convierte en una elección natural para la mayoría de los desarrollos de aplicaciones empresariales. 
  • Mantenible.
  • Fácil de asignar “roles” separados.
  • Fácil de actualizar y mejorar las capas por separado.

 

Ideal para:

  • Aplicaciones estándar de línea de negocios que hacen más que sólo operaciones CRUD
  • Nuevas aplicaciones que necesitan ser construidas rápidamente
  • Equipos de desarrolladores inexpertos que aún no entienden otras arquitecturas
  • Aplicaciones que requieren normas estrictas de mantenimiento y comprobabilidad

 

4.Event-based pattern

Esta es la arquitectura asíncrona distribuida más común utilizada para desarrollar un sistema altamente escalable. La arquitectura consiste en componentes de procesamiento de eventos de un solo propósito que escuchan los eventos y los procesan asincrónicamente. La arquitectura impulsada por eventos construye una unidad central que acepta todos los datos y luego los delega a los módulos separados que manejan el tipo particular.

 

Ventajas

  • Son fácilmente adaptables a entornos complejos, a menudo caóticos.
  • Escala fácilmente.
  • Son fácilmente ampliables cuando aparecen nuevos tipos de eventos.

 

Ideal para:

  • Sistemas asíncronos con flujo de datos asíncronos.
  • Interfaces de usuario

 

5. Patrón basado en el espacio

El patrón de arquitectura basada en el espacio está diseñado específicamente para abordar y resolver problemas de escalabilidad y concurrencia. También es un patrón de arquitectura útil para las aplicaciones que tienen volúmenes de usuarios concurrentes variables e impredecibles. La alta escalabilidad se logra eliminando la restricción de la base de datos central y utilizando en su lugar cuadrículas de datos replicados en memoria.

La arquitectura basada en el espacio está diseñada para evitar el colapso funcional bajo una gran carga al dividir tanto el procesamiento como el almacenamiento entre múltiples servidores.

 

Ventajas 

  • Responde rápidamente a un entorno en constante cambio. 
  • Aunque las arquitecturas basadas en el espacio no suelen estar desacopladas y distribuidas, son dinámicas, y las sofisticadas herramientas basadas en la nube permiten “empujar” fácilmente las aplicaciones a los servidores, simplificando su despliegue.
  • Se logra un alto rendimiento gracias al acceso a los datos en memoria y a los mecanismos de almacenamiento en caché incorporados en esta pauta.
  • La elevada escalabilidad se debe a que se depende poco o nada de una base de datos centralizada, con lo que se elimina esencialmente este cuello de botella limitante de la ecuación de la escalabilidad.

 

Ideal para:

  • Datos de gran volumen como flujos de clicks y registros de usuarios
  • Datos de bajo valor que pueden perderse ocasionalmente sin grandes consecuencias
  • Redes sociales

 

Espero que este artículo le haya sido útil, si cree que hay otros patrones que deberían estar listados aquí, ¡siéntase libre de compartirlos en la sección de comentarios abajo! Y si tiene alguna pregunta, envíenos un mensaje, estaremos encantados de ayudarle, ya que es nuestra especialidad.