Tipos de Sistemas / Categorías de análisis | Sistemas Paralelos | Sistema Distribuidos |
Características | - Acelera la solución
- Requiere soporte de hardware para la ejecución simultánea de tareas.
- El paralelismo incluye:
- Multiproceso, ejecutando varios procesos a la vez.
- Multihilo, ejecutando varios hilos de control dentro de un mismo proceso.
- Paralelismo a diferentes niveles: grano grueso y grano fino.
- La tolerancia a fallas es limitada.
- Cada procesador cuenta con su propia memoria local en cachés de varios niveles.
- La memoria de un proceso no es compartida con otros. Los hilos comparten la memoria de su proceso.
| - Un sistema distribuido consta de varias máquinas por lo que soporta paralelismo.
- Permite que los recursos disponibles en la red puedan ser utilizados simultáneamente por varios usuarios y/o agentes.
- Sistemas sensibles al tiempo, requieren incluir en su diseño un reloj global para sincronizar los nodos y no afectar la coordinación y resultados del procesamiento.
- Fallos independientes de los componentes: su diseño debe cumplir con la característica de ser redundante, para que aunque un componente del sistema falle de manera independiente, los demás trabajen sin mayor problema, esto permite una mayor resiliencia del sistema.
|
Ventajas | - El resolver un problema más rápido hace viable muchas soluciones.
- Ventaja competitiva, provee una mejora de los tiempos para la producción de nuevos servicios.
- Colaboración y flexibilidad operacional
| - La escalabilidad horizontal del sistema permite aprovechar computadoras pequeñas reduciendo el costo
- Se beneficia de redes cada vez más rápidas y económicas
- Recursos compartidos logra un uso más eficiente de los mismos
- Tolerancia a fallos
|
Desventajas | - No todos los lenguajes de programación soportan hilos, típicamente lenguajes de scripting, aunque hay sus excepciones.
- Lenguajes interpretados puede que no aprovechen los múltiples cores disponibles, a pesar de que soporten concurrencia con el uso de hilos, como es el caso de Python.
- Al tener varios hilos de ejecución, surgen problemas coordinando los hilos, sobre todo en las secciones críticas de los algoritmos, donde hay que obligar a que sólo un hilo usa el recurso compartido a la vez. Se suele revisar desde el diseño del algoritmo a fin de corregirlo.
- Problemas típicos: dead locks, race conditions, starvation (lockouts), violación de la exclusión mutua, unfairness (injusticia al momento de permitirle o no a los hilos ejecutarse), errores de lectura y escritura, y errores transitorios cuando a veces corre y la salida es correcta y otras veces no.
| - Complejidad para administrar el stack tecnologíco. El sistema puede constar de múltiples plataformas, desde apps móviles, web APIs, programas en mainframes. Tienen un stack tecnológico muy extenso que los hace muy difíciles de administrar, actualizar, parchar.
- Complejidad de la seguridad del sistema. Debido al gran número de componentes de diferente tipo, la superficie de ataque es mucho mayor.
- Complejidad del desarrollo. Implica colaboración entre diferentes equipos de desarrollo, frontend y backend. Eso hace complejo acordar la arquitectura y tener una visión end-to-end del sistema.
- Complejidad del diagnóstico de fallas. Las N capas del sistema distribuido pueden crecer de manera caótica, de modo que si hay un fallo, resulta muy difícil diagnosticarlo. Logs aplicativos requieren a su vez un manejo de error muy detallado en el código. Ha surgido Chaos Engineering, que busca mantener la confiabilidad del sistema.
|
Componentes | - CPUs multi núcleo (cores)
- CPUs pueden incluir coprocesadores gráficos en el mismo chip, con su propia memoria para gráficos.
- El sistema debe considerar tarjetas de memoria de la velocidad apropiada. DDR5, va de 4800MHz hasta 7200MHz.
- El sistema debe diseñarse con la cantidad suficiente de memoria RAM, a fin de evitar el uso excesivo de la memoria SWAP al grado que impacte el performance.
- Supercomputadoras: Para aplicaciones intensivas, como puede ser predicción del clima, cores bancarios, telecomunicacione, etc., es común el uso de supercomputadoras, la más rápida del mundo en 2022 es la supercomputadora Frontier, con 8,730,112 cores, 2.5x veces más rápida que la del segundo lugar.
| - Servicios de comunicación
- Sistemas de ficheros distribuidos nombrados.
- Servicios de sincronización y coordinación de procesos
- Memoria compartida distribuida
- Gestión de procesos
- Seguridad de procesos y servicios.
- Sistemas distribuidos muy sensibles a la latencia, por ejemplo, sistemas de trading de ultra baja latencia, o un sistema de cirugía remota, pueden aprovechar las últimas tecnologías de redes ultrarrápidas, y tarjetas de red que soportan anchos de banda de hasta 100 Gbps para ultra baja latencia, por ejemplo las tarjetas Mellanox ConnectX-5 de Nvidia.
- El sistema puede constar de varios tipos de redes para lograr su objetivo: redes móviles, redes ethernet de consumo o empresariales, y redes ultrarrápidas.
|
Funcionamiento / arquitectura | Arquitecturas paralelas a nivel de procesador: - SISD: Single Instruction Stream Data stream. En un ciclo de reloj se ejecuta una instrucción con un solo dato.
- SIMD: Single Instruction stream Multiple Data stream.
- MISD: Multiple Instruction stream Single Data stream.
- MIMD: Multiple Instruction stream, Multiple Data stream. Cualquier CPU o GPU multicore tiene una arquitectura MIMD.
Mecanismos de comunicación entre procesos (IPCs): - Shared-memory: Regiones de memoria soportadas por el OS, para intercambiar datos entre procesos, ya que la memoria de los procesos es independiente entre sí.
- Pipes (tuberías), con y sin nombre (anónimas). Un proceso padre lanza un proceso hijo y se comunican a través del pipe sin nombre. Procesos sin relación padre-hijo pueden usar pipes con nombre.
- Eventos: soportados por el OS para mandar mensajes entre procesos, incluso hacer broadcasting del mensaje.
- Sockets de red: UDP o TCP/IP sobre IPv4o IPv6.
- Sockets locales: no tienen dirección de red, para comunicaciones dentro de la misma máquina.
- Archivos: El OS provee system calls para bloquear el uso del archivo, luego liberar el lock.
- Mapped-memory: Son archivos gestionados sin buffer al estilo del SWAP.
- Otros. Windows agrega más mecanismos para comunicar procesos: el Clipboard, COM, Data Copy, DDE, RPC, etc.
Coordinación de hilos de ejecución: - Semáforos o mutex locks (bloqueos mutuamente exclusivos) para controlar el acceso a datos en la memoria del mismo proceso durante la ejecución de secciones críticas del algoritmo. El OS provee syscalls para controlar los semáforos, obtener y liberar los locks.
| - Conjunto de máquinas conectadas por redes.
- Aprovecha la capacidad de procesamiento local que permite interfaces de usuario, ya sean clientes pesados (thick or fat clients) o ligeros (thin or light weight clients).
- Comparten recursos a nivel de red: bases de datos, periféricos, sensores, etc.
- Procesos disponibles para, Servicio de múltiples usuarios y ejecución paralela de aplicaciones
Varios paradigmas de sistema distribuido (Kahanwal, 2012), y siguen evolucionando: - Cliente-servidor: arquitecturas de 2, 3, y N-capas, incluyendo SOA, microservicios, etc.
- P2P (peer-to-peer): cada nodo es tanto cliente como servidor.
- Clusters: grupo de máquinas master-slave, o multi-master, para evitar puntos de falla únicos. Ejemplos: clusters de Kafka, clusters de Kubernetes. La réplica entre clusters logra redundancia.
- Grid: interconexiones a grandes distancias de clusters, supercomputadoras, workstations, etc.
- Cloud. Varias arquitecturas: public clouds, private clouds, hybrid (on-prem y cloud), multicloud.
- Jungle: interconexión de arquitecturas diversas bajo un modelo distribuido, extremadamente heterogéneo.
- Edge computing y Fog computing se aprovecha el poder de cómputo de los nodos más pequeños, por ejemplo sistemas IoT, smartwatches procesos para extraer información de los sensores.
Arquitecturas de comunicación entre procesos distribuidos, típicamente sobre la red, pero no necesariamente (comunicaciones ópticas con láser o infrarrojos son posibles): - Webservices: SOAP, REST.
- Web APIs: incluyen webservices y RPC.
- Queues: en esta categoría tenemos tecnologías como IBM MQ, RabbitMQ / AMQP)
- Event-driven architectures: tecnologías que soportan data streaming. Kafka, PubSub.
- P2P: peer-to-peer, como las aplicaciones de sharing estilo Mule y Napster.
- Descentralizadas: Blockchain y redes Ethereum.
|