Patrones de Arquitectura
Patrones de Arquitectura
Patrones de Arquitectura
Presentación
Alfredo Fermín de los Santos
2019-8582
Programación II
Patrones de Arquitectura
Patrones a tratar
1.Microkernel
2.Microservicios
3.MVC
4.Cliente Servidor
1.Microkernel
Definición
El estilo arquitectónico de Microkernel o también conocido como arquitectura de Plug-in,
permite crear aplicaciones extensibles, mediante la cual es posible agregar nueva funcionalidad
mediante la adición de pequeños plugins que extienden la funcionalidad inicial del sistema.
Un microkernel es un minimalista. núcleo diseñado para ser lo más pequeño posible. Contiene
solo el código básico necesario para comunicarse con hardware y cargar un sistema operativo.
Desventajas
Escalabilidad: Las aplicaciones basadas en Microkernel son generalmente desarrolladas
para ser ejecutadas en modo Standalone. Si bien existen aplicaciones que implementan el
estilo de Microkernel que son altamente escalables como algunos servidores de
aplicaciones, la realidad es que este no es un estilo arquitectónico que se distinga por
crear aplicaciones altamente escalables.
Alta complejidad: Las aplicaciones basadas en Microkernel son difíciles de desarrollar,
no solo por la habilidad técnica para soportar la agregación de funcionalidad adicional
por medio de Plugins, si no que requiere un análisis muy elaborado para identificar hasta
qué punto puede ser extendida la aplicación sin afectar la esencia del sistema Core.
2.Microservicios
Definición, Descripción
La arquitectura de microservicios es una aproximación para el desarrollo de software que
consiste en construir una aplicación como un conjunto de pequeños servicios, los cuales se
ejecutan en su propio proceso y se comunican con mecanismos ligeros (normalmente una API de
recursos HTTP). Cada servicio se encarga de implementar una funcionalidad completa del
negocio. Cada servicio es desplegado de forma independiente y puede estar programado en
distintos lenguajes y usar diferentes tecnologías de almacenamiento de datos.
La mejor manera de entender la arquitectura de microservicios es imaginarse las capas de
software de la pila del servidor web. El sistema operativo del servidor web puede ser Windows,
Linux o BSD. Hay herramientas para la gestión del centro de datos y el equilibrio de carga de la
red. Es posible elegir Apache, IIS, NGINX, Caddy, Tomcat, etc. para el servidor web. A
continuación, se encuentra la capa para el lenguaje de programación instalado, como PHP,
ASP.net, Python, Ruby, Perl, Java y Go. Después está la capa de los marcos de bases de datos,
como MySQL, MSSQL, PostgreSQL y MongoDB. Otra capa para las utilidades de
almacenamiento en caché, como Varnish, Redis, redes de distribución de contenido (CDN) y las
utilidades de optimización. Otras capas pueden incluir servidores perimetrales, plataformas sin
servidor y la integración de la inteligencia artificial o el aprendizaje automático. Dentro de un
ecosistema de cloud pública existen miles de microservicios que funcionan simultáneamente y
que es necesario gestionar en la red de servicios para facilitar la interoperabilidad, el
enrutamiento y las comunicaciones.
Casos de uso (Aplicaciones o sistemas donde se aplique el patrón)
Netflix: Esta plataforma tiene una arquitectura generalizada que desde hace ya un par de años
(coincidiendo con su “boom” en U.S.A.) se pasó a los microservicios para el funcionamiento de
sus productos. A diario recibe una media de mil millones de llamadas a sus diferentes servicios
(se dice que es responsable del 30% del tráfico de Internet) y es capaz de adaptarse a más de 800
tipos de dispositivos mediante su API de streaming de vídeo, la cual, para ofrecer un servicio
más estable, por cada solicitud que le pedimos, ésta realiza cinco solicitudes a diferentes
servidores para no perder nunca la continuidad de la transmisión.
Amazon: No soporta tantos dispositivos como Netflix, pero tampoco es que sea fundamental
para cubrir su sector. Migró hace tres años a la arquitectura de microservicios siendo una de las
primeras grandes compañías que la implementaban en producción. No hay cifra aproximada de
la cantidad de solicitudes que pueden recibir a diario, pero no son pocas. Entre éstas encontramos
multitud de aplicaciones, las API del servicio web que ofrecen o la propia web de Amazon,
cuyos ingenieros reconocen que habría sido imposible sobre la arquitectura monolítica con la que
trabajaban previamente.
Ebay: Cómo no, una de las empresas con mayor visión de futuro, siendo pionera en la adopción
de tecnologías como Docker o ésta que nos ocupa. Su aplicación principal comprende varios
servicios autónomos, y cada uno ejecutará la lógica propia de cada área funcional que se ofrece a
los clientes
Ventajas
Innovación rápida: cuando es necesario crear funciones nuevas para las aplicaciones de
software, las empresas tanto tradicionales como emergentes pueden presentar
innovaciones en el mercado con mayor rapidez que si utilizan la arquitectura monolítica.
Los clientes que utilizan aplicaciones web y móviles exigen características nuevas. Las
tecnologías innovadoras reciben financiación a través de la adopción por parte de los
usuarios y las empresas. Tanto las empresas emergentes como las grandes empresas de TI
encuentran ventajas al mantenerse a la vanguardia de la programación y el desarrollo
mediante la integración de nuevos microservicios.
Mayores niveles de automatización de los centros de datos: los desarrolladores
prefieren utilizar ciertas plataformas o estándares en su trabajo y esto incluye el uso de
lenguajes de programación y bases de datos en las aplicaciones web o móviles con
microservicios. Los microservicios se conectan a través de procesos controlados
mediante scripts, como las API, que pueden ofrecer mayores niveles de automatización
de los centros de datos.
Desventajas
Las pruebas o testeos pueden resultar complicados debido al despliegue distribuido.
Un gran número de servicios puede dar lugar a grandes bloques de información que
gestionar.
Será labor de los desarrolladores lidiar con aspectos como la latencia de la red, tolerancia
a fallos, balanceo de carga, cantidad de formatos admitidos, etc…
Sistema distribuido puede llegar a significar doble trabajo.
Si se cuenta con un gran número de servicios, integrarlos y gestionarlos puede resultar
muy complejo.
Esta tecnología suele incurrir en un alto consumo de memoria.
Fragmentar una aplicación en diferentes microservicios puede llevar muchas horas de
planificación (y casi podría considerarse un arte).
3.MVC
Definición y descripción
Modelo-vista-controlador (MVC) es un patrón de arquitectura de software, que separa los datos y
principalmente lo que es la lógica de negocio de una aplicación de su representación y el módulo
encargado de gestionar los eventos y las comunicaciones. Para ello MVC propone la
construcción de tres componentes distintos que son el modelo, la vista y el controlador, es decir,
por un lado, define componentes para la representación de la información, y por otro lado para la
interacción del usuario. Este patrón de arquitectura de software se basa en las ideas de
reutilización de código y la separación de conceptos, características que buscan facilitar la tarea
de desarrollo de aplicaciones y su posterior mantenimiento.
4.Cliente Servidor
Definición y descripción
La arquitectura cliente-servidor es un modelo de diseño de software en el que las tareas se
reparten entre los proveedores de recursos o servicios, llamados servidores, y los demandantes,
llamados clientes. Un cliente realiza peticiones a otro programa, el servidor, quien le da
respuesta.
En esta arquitectura la capacidad de proceso está repartida entre los clientes y los servidores,
aunque son más importantes las ventajas de tipo organizativo debidas a la centralización de la
gestión de la información y la separación de responsabilidades, lo que facilita y clarifica el
diseño del sistema.
La separación entre cliente y servidor es una separación de tipo lógico, donde el servidor no se
ejecuta necesariamente sobre una sola máquina ni es necesariamente un solo programa. Los tipos
específicos de servidores incluyen los servidores web, los servidores de archivo, los servidores
del correo, etc. Mientras que sus propósitos varían de unos servicios a otros, la arquitectura
básica seguirá siendo la misma.
Una disposición muy común son los sistemas multicapa en los que el servidor se descompone en
diferentes programas que pueden ser ejecutados por diferentes computadoras aumentando así el
grado de distribución del sistema.
Casos de uso (Aplicaciones o sistemas donde se aplique el patrón)
Navegar una web funciona basándonos en un cliente web (navegador) y un servidor web como
Apache, Nginx o LiteSpeed
Protocolo FTP, funciona de idéntica forma, se utiliza un cliente de FTP (como Filezilla) para
conectar a un servidor FTP (como Pure-FTPD, Proftpd, etc)
SSH: es idéntico también, se utiliza un cliente SSH para conectar al servidor SSH que corre en
una red remota.
Juegos en red: existen clientes que permiten a jugadores online jugar desde sus casas
conectándose a servidores de juegos remotos.
Sistema DNS: el famoso servidor DNS interactúa con clientes DNS también, es decir, basa su
arquitectura en el modelo cliente servidor
Servidor de Correo: donde clientes de correo consultan el correo al servidor de correo remoto,
tanto desde móvil o una computadora de escritorio o laptop.
Ventajas
Centralización del control: los accesos, recursos y la integridad de los datos son controlados por
el servidor de forma que un programa cliente defectuoso o no autorizado no pueda dañar el
sistema. Esta centralización también facilita la tarea de poner al día datos u otros recursos (mejor
que en las redes P2P) …
Escalabilidad: se puede aumentar la capacidad de clientes y servidores por separado. Cualquier
elemento puede ser aumentado (o mejorado) en cualquier momento, o se pueden añadir nuevos
nodos a la red (clientes y/o servidores).
Fácil mantenimiento: al estar distribuidas las funciones y responsabilidades entre varios
ordenadores independientes, es posible reemplazar, reparar, actualizar, o incluso trasladar un
servidor, mientras que sus clientes no se verán afectados por ese cambio (o se afectarán
mínimamente). Esta independencia de los cambios también se conoce como encapsulación.
Existen tecnologías, suficientemente desarrolladas, diseñadas para el paradigma de C/S que
aseguran la seguridad en las transacciones, la amigabilidad de la interfaz, y la facilidad de
empleo.
En las redes C/S los demás clientes no tienen acceso a las IP's por lo que se dificulta el rastreo
y/o hackeo de los usuarios.
Desventajas
La congestión del tráfico ha sido siempre un problema en el paradigma de C/S. Cuando una gran
cantidad de clientes envían peticiones simultáneas al mismo servidor, puede ser que cause
muchos problemas para este (a mayor número de clientes, más problemas para el servidor). Al
contrario, en las redes P2P como cada nodo en la red hace también de servidor, cuantos más
nodos hay, mejor es el ancho de banda que se tiene.
El paradigma de C/S clásico no tiene la robustez de una red P2P. Cuando un servidor está caído,
las peticiones de los clientes no pueden ser satisfechas. En la mayor parte de redes P2P, los
recursos están generalmente distribuidos en varios nodos de la red. Aunque algunos salgan o
abandonen la descarga; otros pueden todavía acabar de descargar consiguiendo datos del resto de
los nodos en la red.
El software y el hardware de un servidor son generalmente muy determinantes. Un hardware
regular de un ordenador personal puede no poder servir a cierta cantidad de clientes.
Normalmente se necesita software y hardware específico, sobre todo en el lado del servidor, para
satisfacer el trabajo. Por supuesto, esto aumentará el coste.
El cliente no dispone de los recursos que puedan existir en el servidor. Por ejemplo, si la
aplicación es una Web, no podemos escribir en el disco duro del cliente o imprimir directamente
sobre las impresoras sin sacar antes la ventana previa de impresión de los navegadores.
En las redes C/S la única forma de obtener la información es a través de la que proporciona el
servidor el cual los clientes no pueden compartir información entre ellos.