¿Alguna vez te haz preguntado cómo se diseñan los sistemas a gran escala de una empresa?
Antes de iniciar un gran desarrollo de software, tenemos que elegir una arquitectura adecuada que nos proporcione la funcionalidad y los atributos de calidad deseados. Por lo tanto, debemos comprender las distintas arquitecturas antes de aplicarlas a nuestro diseño.
¿Qué es un patrón arquitectónico?
Un patrón arquitectónico es una solución general y reutilizable a un problema común de arquitectura de software en un contexto determinado. Los patrones arquitectónicos son similares a los patrones de diseño de software, pero tienen un alcance más amplio.
En este artículo, voy a explicar brevemente los siguientes 10 patrones arquitectónicos comunes con su uso, pros y contras.
Patrón por capas
Este patrón puede utilizarse para estructurar programas que pueden descomponerse en grupos de subtareas, cada una de las cuales se encuentra en un nivel de abstracción determinado. Cada capa proporciona servicios a la capa inmediatamente superior.
Las 4 capas más comunes de un sistema de información general son las siguientes:
- Capa de presentación (también conocida como capa de interfaz de usuario)
- Capa de aplicación (también conocida como capa de servicio)
- Capa de lógica de negocio (también conocida como capa de dominio)
- Capa de acceso a datos (también conocida como capa de persistencia)
Utilización
- Aplicaciones generales de escritorio.
- Aplicaciones web de comercio electrónico.
Patrón cliente-servidor
Este patrón consta de dos partes: un servidor y varios clientes.
El componente servidor proporcionará servicios a múltiples componentes cliente. Los clientes solicitan servicios al servidor y éste proporciona los servicios pertinentes a dichos clientes. Además, el servidor sigue escuchando las peticiones de los clientes.
Utilización
- Aplicaciones en línea como correo electrónico, intercambio de documentos y banca.
Patrón maestro-esclavo
Este patrón consta de dos partes: maestro y esclavos.
El componente maestro distribuye el trabajo entre componentes esclavos idénticos, y calcula un resultado final a partir de los resultados que devuelven los esclavos.
Utilización
En la replicación de bases de datos, la base de datos maestra se considera la fuente autorizada, y las bases de datos esclavas se sincronizan con ella.
Periféricos conectados a un bus en un sistema informático (unidades maestras y esclavas).
Patrón Pipe-filter
Este patrón puede utilizarse para estructurar sistemas que producen y procesan un flujo de datos. Cada paso de procesamiento está encerrado dentro de un componente de filtro. Los datos que se van a procesar pasan a través de pipes. Estos pipes pueden utilizarse para almacenar o sincronizar datos.
Utilización
- Compiladores. Los filtros consecutivos realizan el análisis léxico, el análisis sintáctico, el análisis semántico y la generación de código.
- Flujos de trabajo en bioinformática.
Patrón Broker
Este patrón se utiliza para estructurar sistemas distribuidos con componentes desacoplados. Estos componentes pueden interactuar entre sí mediante invocaciones a servicios remotos. Un componente broker se encarga de coordinar la comunicación entre los componentes.
Los servidores publican sus capacidades (servicios y características) en un broker. Los clientes solicitan un servicio al broker, y éste redirige al cliente a un servicio adecuado de su registro.
Utilización
- Software de intermediación de mensajes como Apache ActiveMQ, Apache Kafka, RabbitMQ y JBoss Messaging.
Patrón peer-to-peer
En este patrón, los componentes individuales se conocen como peers.
Los peers pueden funcionar como clientes, solicitando servicios a otros peers, y como servidores, proporcionando servicios a otros peers. Un peer puede actuar como cliente, como servidor o como ambos, y puede cambiar su rol dinámicamente con el tiempo.
Utilización
- Redes de intercambio de archivos como Gnutella y G2)
- Protocolos multimedia como P2PTV y PDTP.
- Productos basados en criptomonedas como Bitcoin y Blockchain
Patrón de bus de eventos
Este patrón se ocupa principalmente de los eventos y tiene 4 componentes principales: fuente de eventos, oyente de eventos, canal y bus de eventos. Las fuentes publican mensajes en determinados canales de un bus de eventos. Los oyentes se suscriben a canales concretos. Los oyentes reciben notificaciones de los mensajes que se publican en un canal al que se han suscrito anteriormente.
Utilización
- Desarrollo Android
- Servicios de notificación
Patrón modelo-vista-controlador
Este patrón, también conocido como patrón MVC, divide una aplicación interactiva en 3 partes como:
Modelo: Contiene la funcionalidad central y los datos
Vista: Muestra la información al usuario (puede definirse más de una vista)
Controlador: Gestiona las entradas del usuario.
Esto se hace para separar las representaciones internas de la información de las formas en que la información se presenta al usuario y es aceptada por éste. Esto desacopla los componentes y permite una reutilización eficiente del código.
Utilización
- Arquitectura para aplicaciones World Wide Web en los principales lenguajes de programación.
- Frameworks web como Django y Rails.
Patrón de pizarra (Blackboard)
Este patrón es útil para problemas para los que no se conocen estrategias de solución deterministas. El patrón pizarra consta de 3 componentes principales.
Pizarra: Una memoria global estructurada que contiene objetos del espacio de soluciones
Fuente de conocimiento: Módulos especializados con su propia representación
Componente de Control: Selecciona, configura y ejecuta módulos.
Todos los componentes tienen acceso a la pizarra.
Los componentes pueden producir nuevos objetos de datos que se añaden a la pizarra Y buscan determinados tipos de datos en la pizarra, también pueden encontrarlos mediante la concordancia de patrones con la fuente de conocimiento existente.
Utilización
- Reconocimiento de voz
- Identificación y seguimiento de vehículos
- Identificación de estructuras proteicas
- Interpretación de señales de sonar.
Patrón de intérprete
Este patrón se utiliza para diseñar un componente que interpreta programas escritos en un lenguaje específico. Especifica principalmente cómo evaluar líneas de programas, conocidas como sentencias o expresiones escritas en un lenguaje concreto. La idea básica es tener una clase para cada símbolo del lenguaje.
Uso
- Lenguajes de consulta de bases de datos como SQL.
- Lenguajes utilizados para describir protocolos de comunicación.
Espero que este artículo le haya resultado útil. 😇
Gracias por leer.😃