0% encontró este documento útil (0 votos)
43 vistas15 páginas

Inv. Unidad 1

Este documento proporciona una introducción a los sistemas distribuidos. Explica que un sistema distribuido es un conjunto de programas informáticos que utilizan recursos computacionales en varios nodos de cálculo para lograr un objetivo común. Luego describe las características, ventajas, inconvenientes y casos de uso comunes de los sistemas distribuidos. Finalmente, detalla los objetivos y tipos principales de sistemas distribuidos, como los clusters, redes y nube, así como algunas arquitecturas comunes.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
43 vistas15 páginas

Inv. Unidad 1

Este documento proporciona una introducción a los sistemas distribuidos. Explica que un sistema distribuido es un conjunto de programas informáticos que utilizan recursos computacionales en varios nodos de cálculo para lograr un objetivo común. Luego describe las características, ventajas, inconvenientes y casos de uso comunes de los sistemas distribuidos. Finalmente, detalla los objetivos y tipos principales de sistemas distribuidos, como los clusters, redes y nube, así como algunas arquitecturas comunes.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 15

Portada

índice
Introducción
Unidad 1. Introducción a Los Sistemas Distribuidos.

1.1 Sistema Distribuido

Un sistema distribuido es un conjunto de programas informáticos que utilizan recursos


computacionales en varios nodos de cálculo distintos para lograr un objetivo
compartido común. Este tipo de sistemas, también denominados "computación
distribuida" o "bases de datos distribuidas", usan nodos distintos para comunicarse y
sincronizarse a través de una red común. Estos nodos suelen representar dispositivos
de hardware físicos diferentes, pero también pueden representar procesos de software
diferentes u otros sistemas encapsulados recursivos. La finalidad de los sistemas
distribuidos es eliminar los cuellos de botella o los puntos de error centrales de un
sistema.

Los sistemas de computación distribuida tienen las características siguientes:

Recursos compartidos: Los sistemas distribuidos pueden compartir hardware,


software o datos.

Procesamiento simultáneo: Varias máquinas pueden procesar la misma función a la


vez.

Escalabilidad: La capacidad computacional y de procesamiento puede escalarse hacia


arriba según sea necesario cuando se añaden máquinas adicionales.

Detección de errores: Los errores se pueden detectar más fácilmente.

Transparencia: Un nodo puede acceder a otros nodos del sistema y comunicarse con
ellos.

Ventajas, inconvenientes y riesgos de los sistemas distribuidos

Los sistemas distribuidos suelen contribuir a mejorar la fiabilidad y el rendimiento del


sistema. La fiabilidad se mejora eliminando los puntos de error centrales y los cuellos
de botella. Los nodos de un sistema distribuido ofrecen redundancia, de modo que, si
un nodo falla, hay otros que pueden sustituirlos y reparar el error. El rendimiento se
mejora porque los nodos pueden escalarse fácilmente en sentido horizontal y vertical.
Si un sistema se somete a una carga extensiva, pueden añadirse nodos adicionales
para ayudar a absorber dicha carga. También es posible aumentar la capacidad de un
nodo concreto para gestionar una carga extensiva.
Sin embargo, uno de los inconvenientes que presentan estos sistemas puede ser la
"expansión del desarrollo", que implica que los sistemas acaban siendo excesivamente
complejos y difíciles de mantener. Esta mayor complejidad puede complicar a los
equipos las tareas de organización, gestión y mejora de estos sistemas. Parte de la
dificultad puede ser entender la relación que hay entre los distintos componentes o
quién posee un componente de software concreto. Esto hace que sea difícil saber
cómo modificar los componentes para maximizar su rendimiento y evitar que ello tenga
un impacto negativo no solo en los componentes dependientes, sino también en los
clientes. Cuando un sistema distribuido tiene varios repositorios, puede que sea
necesario utilizar herramientas especializadas como Atlassian Compass para gestionar
y organizar el código del sistema.

Casos de uso de los sistemas distribuidos

Muchas aplicaciones modernas utilizan sistemas distribuidos. Las aplicaciones web y


móviles con mucho tráfico son sistemas distribuidos. Los usuarios se conectan
siguiendo un modelo cliente-servidor, donde el cliente es un navegador web o una
aplicación móvil. El servidor es pues su propio sistema distribuido. Los servidores web
modernos siguen un patrón de sistema por capas. Se utiliza un equilibrador de carga
para delegar las solicitudes a muchos nodos lógicos de servidor que se comunican a
través de sistemas de cola de mensajes.

Kubernetes es una herramienta muy utilizada en los sistemas distribuidos porque


puede crear un sistema distribuido a partir de una colección de contenedores. Los
contenedores crean nodos del sistema distribuido y Kubernetes orquesta la
comunicación de red entre esos nodos, además de gestionar el escalado dinámico
horizontal y vertical de los nodos en el sistema.

1.2 Objetivos de un sistema distribuido

Un sistema distribuido tiene como objetivos elevar la eficiencia y evitar los errores y los
cuellos de botella.

Este tipo de sistemas consisten, básicamente, en un conjunto de programas


informáticos entre los cuales se distribuyen las tareas. Dichos programas son
albergados y ejecutados en nodos, que en conjunto conforman clústers. Cada nodo es
capaz de ejecutar aplicaciones diferentes, correr distintos sistemas operativos y
gestionar diversas bases de datos y servidores.

La idea es que, distribuyendo el trabajo, todos los nodos colaboren para alcanzar un
mismo objetivo en común, mayor y más relevante que la suma de todas las partes.

Debido a esto, si bien cada nodo puede funcionar de forma independiente, muchas
veces se los puede poner a procesar una misma tarea en conjunto.
Algunos de los principales objetivos de los sistemas distribuidos incluyen:

Disponibilidad: Garantizar que el sistema esté disponible y funcional en todo


momento, incluso si algunos de sus componentes o nodos experimentan fallas. Esto se
logra mediante la redundancia y la replicación de datos y servicios en diferentes
permanecen.

Escalabilidad: Permitir que el sistema se adapte eficientemente a cambios en la carga


de trabajo o en los recursos disponibles. Esto podría implicar agregar o quitar nodos
según sea necesario para mantener el rendimiento y la capacidad de respuesta.

Tolerancia a fallos: Diseñar el sistema para que pueda funcionar correctamente a


pesar de fallos parciales o temporales en los componentes individuales. La tolerancia a
fallos puede incluir la recuperación automática, la detección de fallos y la reasignación
de tareas.

Rendimiento: Mejorar la velocidad y eficiencia del sistema distribuido en comparación


con un sistema centralizado. Esto implica la optimización de la comunicación y la
minimización de la latencia entre los nodos.

Consistencia: Garantizar que los datos y recursos compartidos mantengan un estado


coherente en todo el sistema, incluso cuando múltiples usuarios o nodos intenten
acceder o modificar estos recursos simultáneamente.

Transparencia: Proporcionar a los usuarios y aplicaciones una vista unificada del


sistema, ocultando la complejidad de la distribución y la comunicación entre nodos.
Esto puede incluir la transparencia de acceso, ubicación, migración y replicación.

Eficiencia en el uso de recursos: Use eficientemente los recursos disponibles, como


el ancho de banda de red, la capacidad de almacenamiento y el poder de
procesamiento, para lograr un rendimiento óptimo y reducir los costos operativos.

Seguridad: Garantizar la integridad, confidencialidad y autenticidad de los datos y las


comunicaciones en el sistema distribuido. Esto implica implementar mecanismos de
autenticación, cifrado y control de acceso.

Interoperabilidad: Permitir que diferentes sistemas distribuidos o componentes


desarrollados por diferentes proveedores funcionen juntos de manera coherente. Esto
se logra mediante el uso de estándares y protocolos comunes.

Facilidad de desarrollo y mantenimiento: Diseñar el sistema de manera que sea


manejable en términos de desarrollo de software, implementación y mantenimiento
continuo. Esto incluye la capacidad de actualizar componentes sin interrumpir el
funcionamiento general.

Estos objetivos pueden variar según las necesidades específicas de cada sistema
distribuido, pero en general, buscan optimizar la utilización de recursos, mejorar la
confiabilidad y la eficiencia, y proporcionar una experiencia transparente y coherente
para los usuarios y aplicaciones que interactúan con el sistema.

Generalmente, cuando las aplicaciones se ejecutan sobre una única unidad


informática, existe la posibilidad de que, con el tiempo, los niveles de potencia o de
almacenamiento requeridos empiecen a irse de las manos.

1.3 Tipos De Sistemas Distribuidos.

Los sistemas distribuidos son piezas de software que sirven para coordinar las
acciones de varias computadoras. Esta coordinación se logra mediante el intercambio
de mensajes, es decir, con trozos de datos que transmiten información.

Los sistemas distribuidos requieren componentes concurrentes, una red de


comunicación y un mecanismo de sincronización. Permiten compartir recursos,
incluyendo el software, por los sistemas conectados a una red. Por tanto, el sistema se
basa en una red que conecta las computadoras y maneja el enrutamiento de los
mensajes.

Tipos de sistemas distribuidos

Computación en cluster
Es un conjunto de computadoras similares conectadas a través de una red de área
local de alta velocidad. Se usa frecuentemente para la programación en paralelo,
donde un solo programa intensivo en cómputo se ejecuta en paralelo en varias
computadoras.

Cada cluster consiste de un conjunto de nodos de cómputo que son monitoreados y


administrados por uno o más nodos llamados maestros.

Computación en red
Se compone de nodos con marcadas diferencias en hardware y tecnología de red. La
tendencia actual a tener una configuración específica de nodos para ciertas tareas ha
llevado a que haya una mayor diversidad, que es lo más frecuente en la computación
en red.
Computación en la nube
Es un conjunto de recursos virtualizados alojados en el centro de datos de un
proveedor de la nube. Los clientes pueden establecer una infraestructura virtualizada
para aprovechar una variedad de servicios en la nube.

Para el usuario, pareciera que está alquilando su propia computadora exclusiva. Sin
embargo, en realidad es probable que la esté compartiendo con otros clientes. Lo
mismo se aplica al almacenamiento virtual.

Estos recursos virtualizados pueden configurarse dinámicamente, permitiendo así la


escalabilidad. Si se necesitan más recursos informáticos, el sistema puede adquirir
más

1.4 Arquitecturas De Los Sistemas Distribuidos

Existen varios arquitecturas para sistemas distribuidos, cada una con sus propias
características y enfoques para abordar los desafíos de la distribución de recursos y la
cooperación entre componentes. A continuación, te presento algunas de las
arquitecturas más comunes de sistemas distribuidos:

Arquitectura Cliente-Servidor: En esta arquitectura, los componentes del sistema se


dividen en dos categorías: los clientes y los servidores. Los clientes solicitan servicios o
recursos a los servidores, que los proporcionan. Los servidores pueden ser dedicados
a tareas específicas, como manejar bases de datos o servicios web, mientras que los
clientes pueden ser aplicaciones o usuarios que consumen esos servicios.

En el modelo básico cliente-servidor, los procesos en un sistema distribuido están


divididos en dos grupos, que posiblemente se traslapan. Un servidor es un proceso que
implemente un servicio específico, por ejemplo, un servicio de sistema de archivos
distribuido o de base de datos. Un cliente es un proceso que solicita un servicio a un
servidor, enviándole una petición y subsecuentemente esperando la respuesta del
servidor. La interacción cliente-servidor, también conocida como solicitud-respuesta, se
muestra en la Figura 3.

Figura 3. Interacción general entre un cliente y un servidor.


La comunicación entre un cliente y un servidor puede ser implementada por medio de
un simple protocolo no orientado a la conexión (sin conexión) cuando la red subyacente
es suficientemente confiable como es el caso de muchas redes de área local (LANs).
En estos casos, cuando un cliente solicita un servicio, empaca simplemente el mensaje
para el servidor, identificando el servicio que requiere y anexando los datos de entrada
necesarios. El mensaje es posteriormente enviado al servidor. El servidor se encuentra
continuamente en espera de recibir solicitudes, tras lo cual las procesa, empaqueta los
resultados en un mensaje de respuesta, y finalmente envía este mensaje al cliente.

Una variante de la arquitectura Cliente-Servidor son los servicios proporcionados por


múltiples servidores Ejemplos: muchos servicios de comercio Web están
implementados en diferentes servidores.

La motivación son el desempeño (ej. cnn.com, servidores para descarga, etc.) y la


confiabilidad

Los servidores mantienen bases de datos replicadas o distribuidas. La siguiente figura


muestra este caso.

Arquitectura Peer-to-Peer (P2P): En esta arquitectura, todos los nodos participantes


pueden actuar tanto como clientes como servidores. Los recursos se comparten entre
los nodos, lo que permite un alto grado de descentralización. Los sistemas P2P son
útiles especialmente para compartir archivos o recursos en redes distribuidas, como en
las redes de intercambio de archivos.

Arquitectura de Capas: Esta arquitectura organiza los componentes en capas, cada


una con una funcionalidad específica. Cada capa se comunica con las capas adictivas
a través de interfaces bien definidas. Esto facilita la modularidad y el desarrollo, ya que
cada capa puede ser desarrollada y modificada de forma independiente.
Arquitectura Orientada a Servicios (SOA): En SOA, los componentes se exponen
como servicios independientes que pueden ser invocados a través de interfaces
estándar, como servicios web. Los servicios son interoperables y se pueden combinar
para crear aplicaciones más complejas y flexibles.

Arquitectura de Microservicios: Similar a SOA, los microservicios se dividen en una


aplicación en componentes pequeños e independientes, llamados microservicios. Cada
microservicio se enfoca en una tarea específica y se comunica con otros microservicios
a través de interfaces definidas. Esto permite una escalabilidad y mantenibilidad más
sencillas.

Arquitectura de Bus de Servicio: En esta arquitectura, los componentes se conectan


a través de un bus de servicio centralizado. Los mensajes se envían y reciben a través
de este bus, lo que permite la comunicación entre componentes sin que estén
directamente acoplados.

Arquitectura de Middleware: El middleware es un software que actúa como


intermediario entre diferentes aplicaciones y sistemas. Proporcionar servicios de
comunicación, gestión de datos y coordinación entre los componentes distribuidos.

Arquitectura Basada en Eventos: En esta arquitectura, los componentes se


comunican a través de la emisión y recepción de eventos. Cuando ocurre un evento en
un componente, otros componentes interesados pueden ser notificados y reaccionar en
consecuencia.

Arquitectura Basada en Componentes: Los sistemas distribuidos basados en


componentes dividen las aplicaciones en componentes reutilizables y autónomos.
Estos componentes pueden ser distribuidos y reconfigurados según sea necesario para
adaptarse a los cambios en el sistema.

Arquitectura de Núcleo y Satélite: En esta arquitectura, existe un núcleo central que


coordina y controla las actividades de varios nodos satélite. El núcleo puede ser
responsable de la gestión de recursos y la toma de decisiones, mientras que los nodos
satélite ejecutan tareas específicas.

Cada una de estas arquitecturas tiene sus ventajas y desafíos, y la elección de la


arquitectura adecuada exige los requisitos específicos del sistema, como la
escalabilidad, la disponibilidad, la seguridad y la complejidad.

La organización de los sistemas distribuidos depende mayormente de los componentes


de software que constituyen al sistema. Estas arquitecturas de software establecen
como son organizados varios componentes del software y cómo interactúan entre ellos.

La implementación de un sistema distribuido requiere de la división e identificación de


los componentes de software y su instalación en máquinas reales. La implementación e
instalación final de la arquitectura de software se conoce como arquitectura de
software.

Existen varias configuraciones de componentes y conectores que definen el estilo


arquitectónico de un sistema distribuido. Los estilos más importantes son:

• Arquitecturas en capas
• Arquitecturas basadas en objetos
• Arquitecturas centradas en datos

La idea básica tras el estilo arquitectónico en capas es simple: los componentes


están organizados en forma de capas, en la que un componente en una determinada
capa puede llamar a componentes en la capa inmediata inferior. Una observación clave
es que el control generalmente fluye de capa en capa: las peticiones van de arriba
abajo y los resultados de abajo a arriba, tal como se puede observar en la Figura 1(a).

Una organización, por mucho más suelta, se tiene en arquitecturas basadas en


objetos, tal como se muestra en la Figura 1(b). En esencia, cada objeto corresponde a
lo que hemos definido como componente, y estos componentes están conectados
mediante un mecanismo RPC. No es de sorprender que esta arquitectura de software
se adapte al modelo cliente-servidor que trataremos más adelante.

Figura 1. (a) estilo arquitectónico en capas; (b) estilo arquitectónico basado en objetos.

Las arquitecturas centradas en datos evolucionan en torno a la idea de que los


procesos se comunican a través de un repositorio o medio común (ver Figura 2). Por
ejemplo, una cantidad importante de aplicaciones distribuidas en las que la
comunicación se establece por medio de un archivo compartido a través de un sistema
de archivos distribuidos.
Figura 2. arquitectura centrada en datos

Implementación de aplicaciones en tres capas

El modelo cliente-servidor ha sido sujeto de muchos debates y controversias a lo largo


de los años. Una de las principales cuestiones es el cómo establecer una clara
distinción entre un cliente y un servidor. No es de sorprender que en muchas ocasiones
esta distinción no es tan clara. Por ejemplo, un servidor de una base de datos
distribuida a través de la web puede actuar continuamente como cliente porque éste
transfiere las solicitudes a varios servidores de archivos responsables de implementar
las tablas de las bases de datos. En este caso, el servidor de base de datos por sí
mismo no hace más que procesar las solicitudes de búsqueda o filtrado. La Figura 4
muestra este caso.

Figura 4. Ejemplo de servidor actuando como cliente.

Sin embargo, considerando que muchas aplicaciones cliente-servidor están orientadas


a facilitar al usuario el acceso a la base de datos, mucha gente ha establecido una
distinción entre los tres niveles siguientes, esencialmente usando el estilo
arquitectónico en capas que se vio previamente:
1. El nivel de interfaz de usuario.
2. El nivel de procesamiento.
3. El nivel de datos.

El nivel de interfaz de usuario contiene todo lo necesario para establecer una interfaz
directa con el usuario, tal como la administración del despliegue de la información. El
nivel de procesamiento típicamente contiene las aplicaciones. El nivel de datos
administra los datos sobre los cuales se está trabajando.

Los clientes normalmente implementan el nivel de interfaz de usuario. Este nivel


consiste en los programas que permiten al usuario final interactuar con las
aplicaciones. Hay una diferencia considerable en que tan sofisticada puede ser una
interfaz de usuario. La más simple no es más que una simple pantalla de caracteres.

Como ejemplo considérese un motor de búsqueda en Internet. La interfaz es muy


simple: un usuario introduce una cadena de palabras claves y subsecuentemente se le
presenta una lista de títulos de páginas web. El extremo opuesto de la operación está
constituido por una gran base de datos de páginas web, las cuales han sido extraídas e
indexadas. El núcleo del motor de búsqueda es un programa que transforma la cadena
de palabras claves que proporcionó el usuario en una o más peticiones de búsqueda a
la base de datos. Subsecuentemente clasifica los resultados en una lista y transforma
esta lista en una serie de páginas HTML. Dentro del modelo cliente-servidor, esta parte
de extracción de información es típicamente localizada en el nivel de procesamiento. La
Figura 5 muestra esta organización.

Figura 5. Organización simplificada en tres niveles diferentes de un motor de


búsqueda.
Conclusión

Referencias

licenciaturas. (3 de Octubre de 2017). Obtenido de


http://aisii.azc.uam.mx/areyes/archivos/licenciatura/sd/U1/Arquitecturas.pdf
Preteco. (2022). Obtenido de https://preteco.com/objetivo-de-un-sistema-distribuido-en-
una-empresa/

zettler, K. (2023). ATLASSIAN. Obtenido de


https://www.atlassian.com/es/microservices/microservices-architecture/
distributed-architecture#:~:text=Un%20sistema%20distribuido%20es%20un,error
%20centrales%20de%20un%20sistema

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy