Está en la página 1de 18

INSTITUTO POLITÉCNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA


UNIDAD CULHUACAN

INGENIERÍA EN COMPUTACIÓN

ALUMNO:
CONTRERAS VIDAL EMMANUEL

PROFESORA:
SALAS JIMENEZ VERONICA

GRUPO:
8CM12

UNIDAD 1: ARQUITECTURA DE UN SISTEMA


DISTRIBUIDO

2023
1.1 INTRODUCCION A LOS SISTEMAS DISTRIBUIDOS

La arquitectura de un sistema distribuido es un enfoque fundamental en la informática moderna que se


refiere a la estructura y organización de sistemas de software que funcionan en múltiples nodos de
cómputo interconectados.

Los sistemas distribuidos se refieren a un conjunto de computadoras independientes que están


interconectadas a través de una red y tienen la capacidad de colaborar entre sí. Estos sistemas
permiten que varias computadoras trabajen juntas para lograr objetivos comunes.

Definición: Un sistema distribuido es una colección de computadoras independientes que, desde la


perspectiva del usuario, actúan como una sola computadora. Esta definición resalta la ilusión de
unicidad que proporciona un sistema distribuido.

Características: Los sistemas distribuidos son conocidos por su capacidad de compartir recursos,
escalabilidad, y tolerancia a fallos. Estas características les permiten adaptarse a las demandas
cambiantes y garantizar la disponibilidad.

Evolución: A lo largo del tiempo, los sistemas distribuidos han evolucionado en términos de tecnología
y aplicaciones. Han pasado de sistemas centralizados a entornos más distribuidos y descentralizados.

Protocolo y Middleware: Los protocolos y middleware son esenciales para la comunicación y


coordinación entre las computadoras en un sistema distribuido. Facilitan la interoperabilidad y la gestión
de recursos compartidos.

Base de Datos Distribuida: En sistemas distribuidos, las bases de datos pueden estar distribuidas en
múltiples nodos, lo que permite un acceso eficiente a la información desde diferentes ubicaciones.

Desarrollo: El desarrollo de aplicaciones para sistemas distribuidos requiere consideraciones


especiales, como la gestión de la concurrencia y la sincronización de datos.

1.2 CARACTERISTICAS DE LOS SISTEMAS DISTRIBUIDOS

Los sistemas distribuidos son una arquitectura informática que se compone de múltiples dispositivos
de hardware o software que cooperan para lograr un objetivo común. Sus características clave son:

1.2.1 Heterogeneidad

La heterogeneidad en los sistemas distribuidos se refiere a la diversidad y diferencia que puede existir
entre los elementos que componen una red de computadoras interconectadas. Aquí se exploran
algunos aspectos clave de la heterogeneidad en los sistemas distribuidos:

Componentes Heterogéneos: En un sistema distribuido, los componentes como hardware, software y


sistemas operativos pueden ser diversos. Esto significa que diferentes tipos de dispositivos y recursos
pueden estar conectados a la red.

Desafíos de Integración: La heterogeneidad plantea desafíos en términos de integración. Los sistemas


deben ser capaces de comunicarse y trabajar juntos de manera efectiva, a pesar de las diferencias en
los componentes.
Interoperabilidad: La interoperabilidad es esencial para superar la heterogeneidad. Se deben utilizar
estándares y protocolos comunes para garantizar que los dispositivos heterogéneos puedan
comunicarse sin problemas.

Seguridad: La diversidad de componentes puede introducir desafíos de seguridad. Es importante


implementar medidas de seguridad sólidas para proteger la integridad y confidencialidad de los datos
en un entorno heterogéneo.

Tolerancia a Fallos: La heterogeneidad puede aumentar la tolerancia a fallos, ya que un sistema


distribuido puede seguir funcionando incluso si un componente específico falla.

1.2.2 Extensibilidad

La extensibilidad en los sistemas distribuidos se refiere a la capacidad de un sistema para ser ampliado
o extendido, permitiendo la incorporación de nuevos componentes, tecnologías o funcionalidades sin
interrumpir el funcionamiento actual.

Adaptabilidad: Los sistemas distribuidos deben ser adaptables a medida que cambian los requisitos y
las tecnologías. La extensibilidad permite agregar nuevas características para mantenerse actualizado.

Mantenimiento Facilitado: La extensibilidad facilita el mantenimiento a largo plazo, ya que las


actualizaciones y mejoras pueden implementarse sin afectar la operación en curso.

Innovación Continua: La extensibilidad fomenta la innovación continua, ya que se pueden incorporar


nuevas tecnologías y capacidades a medida que evolucionan.

Seguridad: La extensibilidad debe gestionarse con cuidado para evitar vulnerabilidades de seguridad.
Se deben implementar medidas adecuadas para proteger el sistema contra amenazas.

Evolución Gradual: La extensibilidad permite una evolución gradual en lugar de una reescritura
completa, lo que ahorra tiempo y recursos.

1.2.3 Seguridad

La seguridad en un sistema distribuido es un aspecto fundamental para garantizar la integridad,


confidencialidad y disponibilidad de los datos y recursos en un entorno distribuido. Los sistemas
distribuidos se caracterizan por tener múltiples nodos interconectados que pueden estar ubicados en
diferentes ubicaciones geográficas, lo que los hace más propensos a una variedad de amenazas y
desafíos de seguridad. Aquí hay algunas consideraciones clave para garantizar la seguridad en un
sistema distribuido:
Autenticación: Asegurarse de que los usuarios y los nodos en el sistema estén autenticados de
manera adecuada. Esto implica verificar la identidad de las entidades que acceden al sistema, ya sea
mediante contraseñas, tokens, certificados u otros mecanismos de autenticación.
Autorización: Definir y aplicar políticas de autorización que determinen qué recursos y datos pueden
acceder y manipular los usuarios y los nodos. Esto garantiza que solo las entidades autorizadas
tengan acceso a la información y los recursos necesarios.
Control de acceso: Implementar mecanismos de control de acceso para restringir el acceso no
autorizado a recursos críticos. Esto puede incluir el uso de listas de control de acceso, roles y
permisos.
Encriptación: Utilizar técnicas de encriptación para proteger la confidencialidad de los datos en
tránsito y en reposo. Esto incluye la encriptación de comunicaciones, el almacenamiento seguro de
claves y la encriptación de datos sensibles.
Seguridad en la comunicación: Asegurarse de que las comunicaciones entre los nodos sean seguras.
Esto implica el uso de protocolos seguros como HTTPS, SSH o VPN para proteger la integridad y la
confidencialidad de los datos transmitidos.
Detección y prevención de intrusiones: Implementar sistemas de detección y prevención de
intrusiones (IDS/IPS) para identificar y responder a actividades sospechosas o maliciosas en el
sistema distribuido.
Auditoría y registro: Registrar todas las actividades importantes en el sistema distribuido para permitir
la monitorización, la detección de incidentes y la auditoría de seguridad.
Gestión de claves: Implementar una gestión segura de claves para garantizar que las claves de
encriptación se almacenen y se distribuyan de manera segura.
Actualizaciones y parches: Mantener todos los componentes del sistema distribuido actualizados con
los últimos parches de seguridad y actualizaciones de software para mitigar vulnerabilidades
conocidas.
Plan de respuesta a incidentes: Preparar un plan de respuesta a incidentes que describa cómo
abordar y mitigar posibles incidentes de seguridad en el sistema distribuido.
Formación y concienciación: Capacitar a los usuarios y al personal de administración sobre las
mejores prácticas de seguridad y concienciar sobre los riesgos de seguridad.
Evaluación de riesgos: Realizar evaluaciones regulares de riesgos para identificar nuevas amenazas
y evaluar la efectividad de las medidas de seguridad existentes.
1.2.4 Escalabilidad
La escalabilidad en un sistema distribuido se refiere a la capacidad del sistema para crecer y
adaptarse eficientemente a cambios en la carga de trabajo y el número de usuarios o nodos sin que
esto afecte negativamente su rendimiento y su capacidad de operación. La escalabilidad es un factor
crítico en el diseño y la implementación de sistemas distribuidos, ya que permite que el sistema
continúe funcionando de manera efectiva a medida que crece.
A continuación, se presentan algunos conceptos y estrategias clave relacionados con la escalabilidad
en sistemas distribuidos:
Escalabilidad vertical: Implica aumentar la capacidad de un nodo existente, como agregar más
recursos (CPU, memoria, almacenamiento) a un servidor. Sin embargo, tiene un límite práctico y
puede ser costoso.
Escalabilidad horizontal: Implica agregar más nodos al sistema distribuido para manejar una carga de
trabajo mayor. Esto es altamente efectivo para escalabilidad y se puede lograr fácilmente mediante la
adición de servidores o máquinas virtuales.
Partición y distribución de datos: Dividir los datos en fragmentos o particiones y distribuirlos entre
múltiples nodos. Esto permite que los nodos trabajen de manera independiente en subconjuntos de
datos, lo que mejora la escalabilidad en términos de procesamiento y almacenamiento.
Balanceo de cargas: Utilizar algoritmos de balanceo de carga para distribuir las solicitudes de los
usuarios de manera equitativa entre los nodos disponibles. Esto evita la sobrecarga de un nodo
específico y garantiza un uso eficiente de los recursos.
Desacoplar componentes: Diseñar el sistema de manera que los componentes estén desacoplados y
puedan crecer de manera independiente. Esto permite escalar los componentes que experimentan
una mayor carga sin afectar al sistema en su conjunto.
Escalabilidad elástica: Implementar la capacidad de agregar o quitar recursos automáticamente en
función de la carga actual. Esto se puede lograr mediante la administración de contenedores y la
infraestructura como código.
Cache y almacenamiento en memoria: Utilizar cachés y almacenamiento en memoria para reducir la
carga en las bases de datos y acelerar las operaciones de lectura.
Diseño asíncrono: Utilizar operaciones asincrónicas y paralelas para procesar solicitudes y tareas en
lugar de operaciones bloqueantes. Esto mejora la capacidad de respuesta y la eficiencia del sistema.

1.2.5 Control de errores

El control de errores en sistemas distribuidos es crucial para garantizar un funcionamiento confiable y


robusto en un entorno donde los componentes pueden fallar o haber errores de comunicación.

Tolerancia a Fallos: Los sistemas distribuidos deben ser capaces de tolerar fallas de componentes
individuales sin que ello afecte significativamente el sistema en su conjunto. Esto implica la capacidad
de detectar, aislar y recuperarse de fallos.

Detección de Errores: Se utilizan técnicas para detectar errores y anomalías en la comunicación y el


procesamiento de datos. Esto incluye la verificación de la integridad de los datos transmitidos.

Recuperación: En caso de fallos, los sistemas deben contar con mecanismos de recuperación que
permitan restaurar el estado operativo normal. Esto puede incluir la redundancia de datos o
componentes.

Transparencia: Los sistemas distribuidos pueden ofrecer transparencia en cuanto al control de errores,
lo que significa que los usuarios pueden no ser conscientes de las fallas o recuperaciones que ocurren
en segundo plano.

Estrategias de Comunicación: Las estrategias de comunicación incluyen la sincronización, la


confirmación de la recepción de datos y la gestión de colisiones para prevenir errores en la transferencia
de información.

Seguridad: El control de errores también está relacionado con la seguridad. Se deben implementar
medidas para prevenir y detectar ataques que podrían comprometer la integridad de los datos.

Documentación y Monitoreo: Un aspecto importante del control de errores es la documentación de


procedimientos de recuperación y la implementación de sistemas de monitoreo para identificar
problemas rápidamente.

1.2.6 Concurrencia

La concurrencia en sistemas distribuidos se refiere a la capacidad de múltiples procesos o hilos para


ejecutarse simultáneamente en un entorno distribuido.
Utilización Eficiente de Recursos: La concurrencia permite aprovechar al máximo los recursos
disponibles en la red. Múltiples tareas pueden ejecutarse en paralelo, lo que mejora la eficiencia y el
rendimiento del sistema.

Independencia de Localización: Los procesos concurrentes pueden ejecutarse en diferentes


ubicaciones geográficas, lo que es fundamental en sistemas distribuidos donde los componentes
pueden estar dispersos.

Coordinación y Sincronización: La concurrencia también implica la necesidad de coordinar y sincronizar


los procesos para evitar conflictos y garantizar la consistencia de los datos compartidos.

Carencia de Reloj Global: En sistemas distribuidos, la falta de un reloj global complica la coordinación
entre procesos concurrentes. Se utilizan algoritmos y técnicas específicas para abordar este desafío.

Paralelismo: La concurrencia a menudo se confunde con el paralelismo. Si bien ambos conceptos


involucran ejecución simultánea, el paralelismo se refiere a la ejecución simultánea real de tareas,
mientras que la concurrencia se refiere a la posibilidad de ejecución simultánea.

1.2.7 Transparencia

La transparencia en sistemas distribuidos se refiere a la capacidad de ocultar la complejidad de la


distribución de componentes y recursos a los usuarios y programadores de aplicaciones. Aquí se
destacan los puntos clave relacionados con la transparencia en sistemas distribuidos:

Ocultación de Detalles: La transparencia busca ocultar al usuario y al programador los detalles y la


ubicación de los componentes en un sistema distribuido. Esto facilita la interacción con el sistema sin
necesidad de comprender su complejidad interna.

Separación de Preocupaciones: Permite separar las preocupaciones del usuario de las complejidades
técnicas del sistema. Los usuarios pueden centrarse en su trabajo sin preocuparse por la ubicación de
los recursos.

Facilita la Escalabilidad: La transparencia permite que el sistema distribuido sea escalable sin que los
usuarios finales noten cambios en su funcionalidad. Se pueden agregar más recursos o componentes
de manera transparente.

Mejora la Tolerancia a Fallos: Al ocultar detalles de la ubicación de recursos, la transparencia puede


contribuir a la tolerancia a fallos, ya que los usuarios pueden seguir trabajando incluso si un componente
falla.

Simplifica la Programación: Los programadores pueden centrarse en el desarrollo de aplicaciones sin


preocuparse por la complejidad de la infraestructura distribuida, lo que simplifica el proceso de
programación.

Proporciona Consistencia: La transparencia garantiza que los datos y recursos compartidos se


mantengan consistentes y disponibles para todos los usuarios, independientemente de su ubicación.

1.3 MODELOS ARQUTECTÓNICOS

Cliente-Servidor

El modelo cliente-servidor en sistemas distribuidos es una arquitectura ampliamente utilizada que se


basa en la división de las tareas entre dos tipos de componentes: el cliente y el servidor. En este
modelo, los roles están claramente definidos. El cliente solicita servicios o recursos, mientras que el
servidor proporciona estos servicios o recursos en respuesta a las solicitudes del cliente. La
comunicación entre el cliente y el servidor se realiza a través de protocolos de red. El cliente envía
solicitudes al servidor, que las procesa y responde con los resultados. El cliente y el servidor pueden
estar en diferentes ubicaciones físicas y ejecutarse en sistemas distintos. Esto permite la distribución
de la carga y la escalabilidad. El modelo es escalable, lo que significa que es posible agregar más
clientes o servidores según las necesidades sin afectar el funcionamiento del sistema.

El servidor es el punto central que proporciona acceso a recursos compartidos, como bases de datos
o servicios, lo que garantiza la integridad y la consistencia de los datos.

Dividir las aplicaciones en componentes cliente y servidor facilita el desarrollo, ya que los equipos
pueden trabajar en paralelo en diferentes partes del sistema.

Ejemplos Comunes:

Ejemplos de aplicaciones cliente-servidor incluyen aplicaciones web (navegador como cliente, servidor
web como servidor) y sistemas de correo electrónico (cliente de correo y servidor de correo).

Servicios proporcionados por múltiples servidores

Los servicios proporcionados por múltiples servidores son fundamentales para la distribución de tareas
y recursos por lo que, en un entorno distribuido, múltiples servidores pueden ofrecer diversos servicios.
Estos servidores pueden estar ubicados en diferentes lugares físicos y pueden ejecutarse en diferentes
plataformas.

Algunos aspectos clave para tener en cuenta son los siguientes:

Redundancia: La redundancia de servicios es posible mediante múltiples servidores que ofrecen el


mismo servicio. Esto garantiza la disponibilidad y la tolerancia a fallos.

Balanceo de Carga: Se pueden utilizar algoritmos de balanceo de carga para distribuir las solicitudes
de los clientes entre varios servidores. Esto mejora el rendimiento y evita la sobrecarga de un servidor
específico.

Distribución Geográfica: Los servicios pueden distribuirse geográficamente para reducir la latencia y
acelerar el acceso a los datos o recursos.

Interacción Cliente-Servidor: Los clientes interactúan con estos servidores a través de protocolos de
red estándar, solicitando servicios o recursos específicos.

Servidores Proxy y Caches

Los servidores proxy y la caché son componentes clave en los sistemas distribuidos, y afectan
significativamente su funcionamiento:

1. Servidor Proxy:

Un servidor proxy, o simplemente proxy, es un intermediario entre los clientes y los servidores de
destino. Actúa como un servidor representante que recibe solicitudes de los clientes y las reenvía a los
servidores adecuados.
Los servidores proxy pueden utilizarse para diversos fines, como el almacenamiento en caché de
contenido web, el filtrado de tráfico, la ocultación de direcciones IP de los clientes y la mejora de la
seguridad.

En sistemas distribuidos, los servidores proxy a menudo se utilizan para mejorar el rendimiento al
almacenar en caché datos o recursos comunes, reduciendo así la carga en los servidores de origen y
acelerando la entrega de contenido a los clientes.

2. Caché:

La caché es una memoria de acceso rápido que almacena datos utilizados con frecuencia para acelerar
su recuperación. En sistemas distribuidos, la caché se utiliza para almacenar copias temporales de
datos o recursos para reducir la latencia y mejorar la eficiencia.

Los servidores de caché pueden estar distribuidos en múltiples ubicaciones geográficas para
proporcionar datos cercanos a los clientes, lo que reduce la carga en los servidores centrales y mejora
la experiencia del usuario.

En sistemas distribuidos, la caché también se utiliza para mantener copias locales de datos, lo que
reduce la necesidad de acceder a servidores remotos y mejora la capacidad de respuesta del sistema.

PROCESOS DE IGUAL A IGUAL

Los procesos de igual a igual (peer-to-peer o P2P) son un enfoque fundamental en los sistemas
distribuidos donde los nodos en la red colaboran directamente entre sí sin la necesidad de un servidor
centralizado.

Definición de P2P

Un sistema P2P, que significa "Peer-to-peer" o "de igual a igual," es una red de computadoras en la
que los nodos (computadoras o dispositivos) interactúan entre sí directamente, sin depender de
servidores centralizados. En un sistema P2P, cada nodo tiene roles tanto de cliente como de servidor,
lo que significa que pueden compartir recursos y servicios con otros nodos en la red.

Principales características de un sistema P2P:

Descentralización: La descentralización es una característica fundamental de los sistemas P2P o "Peer-


to-peer." En un sistema P2P, la descentralización significa que no existe un servidor central o una
autoridad que coordine las interacciones entre nodos (computadoras) en la red. En cambio, todos los
nodos son iguales y tienen la capacidad de actuar tanto como servidores como clientes.

Principales aspectos de la descentralización en sistemas P2P:

Igualdad: Todos los nodos en la red P2P tienen igualdad de roles y derechos. No hay una jerarquía
clara de servidores y clientes.

Intercambio directo: Los nodos pueden comunicarse y compartir recursos directamente entre sí
sin pasar por un servidor central. Esto permite un intercambio eficiente y directo de datos.

Recursos compartidos: Los nodos pueden compartir archivos, ancho de banda, potencia de
procesamiento u otros recursos directamente entre ellos.

Escalabilidad: La escalabilidad es una característica importante de los sistemas P2P (Peer-to-Peer).


En un sistema P2P, la escalabilidad se refiere a la capacidad de la red para crecer y manejar un mayor
número de nodos o usuarios sin que esto afecte negativamente su rendimiento.

Principales aspectos de la escalabilidad en sistemas P2P:

Escalabilidad horizontal: Los sistemas P2P pueden escalar horizontalmente, lo que significa
que, al agregar más nodos a la red, el rendimiento de la red mejora. Esto se debe a que cada
nuevo nodo aporta recursos adicionales, como capacidad de almacenamiento y ancho de
banda, lo que distribuye la carga de trabajo de manera más efectiva.

Mayor número de nodos: A medida que la red P2P crece en tamaño, también aumentan los
recursos totales del sistema, lo que contribuye a su escalabilidad. Cuantos más nodos estén
conectados, mejor será el funcionamiento de la red.

División de carga: La escalabilidad en sistemas P2P se basa en la idea de dividir la carga de


trabajo entre numerosos nodos en lugar de depender de un servidor central. Esto permite un
mejor rendimiento y una mayor disponibilidad de recursos.

Resistencia a fallos: La resistencia a fallos es una característica clave de los sistemas P2P (Peer-to-
Peer) que les permite mantener la operatividad incluso en situaciones adversas. A continuación, se
destacan aspectos clave relacionados con la resistencia a fallos en sistemas P2P:

Tolerancia a fallos de red: Los sistemas P2P a menudo implementan esquemas de tolerancia a
fallos de red que les permiten adaptarse a problemas de conectividad y mantener la
comunicación entre pares, incluso cuando algunos nodos enfrentan dificultades de conexión.

Redundancia y almacenamiento distribuido: Muchos sistemas P2P utilizan redundancia y


almacenamiento distribuido para asegurarse de que los datos estén disponibles incluso si
algunos nodos fallan. Esto implica que los archivos pueden estar fragmentados y almacenados
en múltiples ubicaciones, lo que mejora la disponibilidad.

Ausencia de un único punto de fallo: Los sistemas P2P se caracterizan por no depender de un
servidor central. Esto significa que no hay un único punto de fallo en la red, lo que mejora
significativamente su resistencia a los problemas.

Autoorganización: La autoorganización inherente a los sistemas P2P permite a la red adaptarse


a la pérdida de nodos y reorganizarse para mantener la operatividad.

Distribución geográfica: La distribución geográfica de los nodos en una red P2P también
contribuye a su resistencia a fallos, ya que los problemas locales no afectan a toda la red.

1.4 MODELOS FUNDAMENTALES

Los modelos de sistemas, a pesar de sus diferencias, comparten propiedades esenciales, incluyendo
la comunicación entre procesos a través del envío de mensajes en una red de computadoras.

Los modelos se centran en requisitos de diseño relacionados con el rendimiento, la fiabilidad y la


seguridad de los procesos y las redes.

Los modelos simplifican sistemas complejos al abstraer elementos esenciales, lo que facilita la
comprensión y el razonamiento sobre el comportamiento del sistema.
Se destaca la importancia de conocer y comprender qué hacen nuestros diseños y en qué se basan.
Esto permite determinar si un diseño funcionará en un sistema específico y demostrar propiedades del
sistema mediante técnicas matemáticas.

Estas propiedades son aplicables a cualquier sistema que cumpla con las premisas establecidas en el
modelo.

Los aspectos de los sistemas distribuidos que queremos capturar en nuestros modelos fundamentales
están destinados a ayudarnos a discutir y razonar sobre:

Interacción: Enfoca la comunicación y coordinación entre procesos mediante el paso de mensajes en


sistemas distribuidos, reconociendo desafíos como los retrasos en la comunicación y la sincronización
de procesos independientes debido a diferencias en la percepción del tiempo.

Fallo: Aborda la importancia de identificar y clasificar fallos en sistemas distribuidos, incluyendo fallos
de hardware y software, con el objetivo de analizar sus posibles efectos y diseñar sistemas capaces de
mantener su funcionamiento incluso en presencia de fallos.

Seguridad: Señala la vulnerabilidad de los sistemas distribuidos a ataques tanto desde el exterior como
desde el interior, y enfatiza la necesidad de definir y clasificar los posibles modos de ataque. Esto
proporciona la base para analizar amenazas y diseñar sistemas resistentes a ellas.

MODELO DE INTERACCIÓN

En sistemas distribuidos, múltiples procesos interactúan de manera compleja. Pueden cooperar para
proporcionar servicios o lograr objetivos comunes.

Los sistemas distribuidos son más complejos que programas simples controlados por algoritmos
secuenciales. Requieren algoritmos distribuidos que describen los pasos que deben seguir todos los
procesos del sistema, incluyendo la transmisión de mensajes entre ellos.

La velocidad y la sincronización de los procesos y la transmisión de mensajes no pueden preverse


fácilmente en sistemas distribuidos.

Cada proceso en un sistema distribuido tiene su propio estado, que consta de datos a los que puede
acceder y actualizar. Este estado es privado y no puede ser accedido ni actualizado por otros procesos.

Prestaciones de los canales de comunicaciones.

Las características de rendimiento de los canales de comunicación en sistemas distribuidos,


destacando tres aspectos principales:

Latencia: Se refiere al tiempo que lleva que un mensaje enviado por un proceso llegue a otro. Incluye
el tiempo de transmisión de bits a través de la red, el tiempo de acceso a la red (mayor cuando está
congestionada) y el tiempo empleado por los servicios de comunicación del sistema operativo.

Ancho de banda: Es la cantidad total de información que puede transmitirse en un período de tiempo
determinado en una red de computadoras. Cuando muchos canales de comunicación utilizan la red,
deben compartir el ancho de banda disponible.

Fluctuación (jitter): Se refiere a las variaciones en el tiempo que se necesita para completar la entrega
de una serie de mensajes. Esto es especialmente importante para los datos multimedia, ya que las
fluctuaciones pueden causar distorsiones en la reproducción de audio u otros medios.

Relojes de computadores y eventos de temporización.

la sincronización de relojes en sistemas distribuidos y cómo los relojes de diferentes computadoras


pueden tener valores de tiempo diferentes debido a las derivas de reloj y las tasas de deriva variables.

Cada computadora en un sistema distribuido tiene su propio reloj interno, y los procesos locales
obtienen el valor del tiempo actual de estos relojes.

Incluso si dos procesos leen sus relojes al mismo tiempo, sus relojes locales pueden mostrar valores
de tiempo diferentes debido a las derivas del reloj y las tasas de deriva variables.

La tasa de deriva del reloj se refiere a la proporción en que el reloj de una computadora difiere del reloj
de referencia perfecto.

Para corregir los tiempos del reloj de las computadoras, se pueden utilizar enfoques como receptores
de radio que obtienen lecturas de tiempo de un GPS. Sin embargo, esto puede no ser práctico para
cada computadora, por lo que una computadora con una fuente de tiempo precisa, como un GPS,
puede enviar mensajes de temporización a otras computadoras en la red.

La concordancia final entre los tiempos de los relojes locales está influenciada por los retrasos variables
en la transmisión de mensajes.

Dos variantes del modelo de interacción.

Sistemas Distribuidos Síncronos: En estos sistemas, se imponen límites conocidos tanto en el tiempo
de ejecución de cada etapa de un proceso como en el tiempo de recepción de mensajes y las tasas de
deriva de los relojes. Aunque es difícil obtener valores realistas y garantizados para estos límites,
modelar un algoritmo como un sistema síncrono puede proporcionar una idea de su comportamiento
en un sistema distribuido real. Esto es útil para detectar fallos y garantizar ciertas condiciones en el
rendimiento.

Sistemas Distribuidos Asíncronos: En estos sistemas, no se imponen restricciones en la velocidad de


procesamiento, los retardos de transmisión de mensajes o las tasas de deriva de relojes. En otras
palabras, no se hacen suposiciones sobre los intervalos de tiempo involucrados en la ejecución. Esto
se asemeja al modelo de Internet, donde no hay límites intrínsecos en la carga de servidores o la red.
Los sistemas distribuidos reales a menudo son asíncronos debido a la necesidad de compartir recursos
como procesadores y canales de comunicación. Sin embargo, algunos problemas de diseño, como la
entrega oportuna de datos multimedia, requieren un enfoque síncrono.

Ordenamiento de eventos.

En sistemas distribuidos, es importante determinar si un evento en un proceso ocurrió antes, después


o concurrentemente con otro evento en otro proceso. Esto puede ser difícil debido a los retardos en la
comunicación de mensajes y la asincronía de los relojes en diferentes computadoras.

Como ejemplo en un intercambio de mensajes en una lista de correo, donde los mensajes pueden
llegar en un orden diferente debido a los retardos en la red. La sincronización perfecta de relojes no es
realista en sistemas distribuidos, por lo que se propone un modelo de tiempo lógico desarrollado por
Lamport para ordenar eventos sin depender completamente de relojes precisos.
El tiempo lógico asigna números a eventos para representar su ordenamiento, de modo que eventos
más recientes tienen números mayores. Esto permite inferir el orden en que ocurrieron los eventos,
incluso si los relojes no están perfectamente sincronizados. El texto también menciona ejemplos de
asignación de números a eventos en procesos diferentes para ilustrar cómo funciona el ordenamiento
lógico.

MODELO DE FALLO

El modelo de fallo en sistemas distribuidos ayuda a comprender y clasificar los posibles problemas que
pueden surgir en los procesos y la comunicación, incluyendo fallos por omisión, fallos arbitrarios y fallos
de temporización.

Fallos por omisión

Los "fallos por omisión" se refieren a situaciones en las que los procesos o los canales de comunicación
en un sistema distribuido no pueden realizar las acciones que se esperaba que realizaran.

Fallos por omisión de procesos: Un ejemplo importante de fallo por omisión de procesos es cuando un
proceso sufre un "fracaso" o "crash", lo que significa que se detiene abruptamente y no realiza más
acciones de programa. Esto se conoce como fallo-parada (fail-stop) si otros procesos pueden detectar
con certeza que ha fallado. Por lo general, se utiliza un mecanismo de timeout para detectar estos
fallos, lo que implica que, si un proceso no responde en un tiempo determinado, se considera que ha
fallado. Sin embargo, en un sistema asíncrono, los timeouts pueden indicar simplemente que un
proceso no está respondiendo, sin garantizar que se haya producido un fallo.

Fallos por omisión de comunicaciones: Estos fallos se refieren a problemas en las primitivas de
comunicación, como el envío y la recepción de mensajes. Un ejemplo es la pérdida de mensajes, donde
un canal de comunicación no transporta un mensaje desde el emisor al receptor. Esto puede ocurrir
debido a la falta de espacio en un búfer de recepción intermedio o errores en la red que no permiten
que el mensaje pase correctamente.

Los fallos pueden ser categorizados según su severidad, y la mayoría de los fallos en sistemas
distribuidos se consideran benignos. Esto incluye los fallos por omisión, fallos de temporización y fallos
de rendimiento. Los fallos benignos son aquellos que no causan un colapso completo del sistema, pero
aún pueden afectar su funcionamiento normal.

Los "fallos arbitrarios" se refieren a la peor categoría de fallos posibles, en la que pueden ocurrir
cualquier tipo de error o comportamiento inesperado en un proceso o canal de comunicación en un
sistema distribuido.

Fallos arbitrarios

Fallos arbitrarios en procesos: En el caso de los procesos, esto significa que pueden omitir pasos
necesarios para su funcionamiento adecuado o realizar pasos que no deberían realizar. En otras
palabras, los fallos arbitrarios en los procesos implican que pueden comportarse de manera
impredecible y no necesariamente responder de manera coherente a las invocaciones o peticiones.
Estos fallos son particularmente difíciles de detectar, ya que no siguen un patrón fijo y pueden variar
ampliamente.
Fallos arbitrarios en canales de comunicación: En cuanto a los canales de comunicación, esto significa
que los contenidos de los mensajes pueden estar corruptos, los mensajes pueden ser inexistentes o,
en casos extremos, algunos mensajes auténticos pueden ser entregados más de una vez. Sin embargo,
es menos común experimentar fallos arbitrarios en los canales de comunicación, ya que el software de
comunicación generalmente está diseñado para detectar y rechazar mensajes fallidos. Por ejemplo, se
utilizan sumas de comprobación (checksums) para detectar mensajes corruptos y números de
secuencia para detectar mensajes faltantes o duplicados.

Fallos de temporización.

Los fallos de temporización son problemas que surgen en sistemas distribuidos síncronos cuando se
imponen límites de tiempo a la ejecución de procesos, la entrega de mensajes y la velocidad del reloj.
Cualquier incumplimiento de estos límites puede resultar en la falta de disponibilidad de respuestas
para los clientes dentro de un intervalo de tiempo dado.

En contraste, en sistemas distribuidos asíncronos, un servidor sobrecargado puede responder


lentamente, pero no se considera un fallo de temporización, ya que no se garantizan tiempos
específicos de respuesta.

Los sistemas operativos de tiempo real se diseñan específicamente para garantizar la temporización,
pero son más complejos de crear y pueden requerir hardware redundante. En cambio, la mayoría de
los sistemas operativos de propósito general, como UNIX, no tienen restricciones de tiempo real.

La importancia de la temporización se destaca en los computadores multimedia que manejan canales


de audio y vídeo, ya que la transferencia de grandes cantidades de datos de video requiere un reparto
sin fallos de temporización, lo que puede implicar requisitos especiales tanto en el sistema operativo
como en el sistema de comunicación.

Enmascaramiento de fallos.

El enmascaramiento de fallos en sistemas distribuidos implica la construcción de servicios fiables a


partir de componentes que pueden tener fallos. Esto se logra ocultando los fallos o convirtiéndolos en
fallos más manejables. Un ejemplo es el uso de sumas de comprobación para corregir mensajes
dañados. Además, se pueden utilizar protocolos de retransmisión para ocultar fallos por omisión.

Fiabilidad y comunicación uno a uno.

La comunicación fiable en un canal con fallos por omisión se basa en la validez y la integridad de los
mensajes. La validez garantiza que todos los mensajes salientes lleguen eventualmente a su destino,
mientras que la integridad asegura que los mensajes recibidos sean idénticos a los enviados y que no
haya duplicados. Las amenazas a la integridad pueden provenir de protocolos que no rechazan
mensajes duplicados y de usuarios malintencionados que insertan mensajes falsos. Se pueden
implementar medidas de seguridad para mantener la integridad frente a tales amenazas.

MODELO DE SEGURIDAD
El modelo arquitectónico sirve como base para el modelo de seguridad en sistemas distribuidos. La
seguridad se logra protegiendo los procesos, los canales de comunicación y los objetos encapsulados
contra el acceso no autorizado. La protección se centra en objetos, pero se aplica a todos los tipos de
recursos.

Protección de objetos.

Los objetos se administran mediante un servidor que permite a los usuarios lanzar programas cliente
para realizar operaciones sobre ellos. Los derechos de acceso especifican quién puede realizar estas
operaciones en un objeto. Los usuarios son beneficiarios de estos derechos, y se asocia a cada
invocación y resultado una autoridad llamada principal, que puede ser un usuario o un proceso. El
servidor verifica la identidad del principal y los derechos de acceso antes de ejecutar una operación.

Asegurar procesos y sus interacciones.

En cuanto a la seguridad en las interacciones entre procesos que envían mensajes, se reconoce que
los mensajes están expuestos a ataques, ya que la red y el servicio de comunicación son vulnerables.
Esto es especialmente crítico en aplicaciones que manejan información financiera, confidencial o
clasificada. Se plantea la necesidad de analizar y detectar amenazas a los procesos y mensajes en
estos sistemas y se sugiere un modelo para el análisis de amenazas de seguridad.

Amenazas a procesos

El enemigo en la seguridad de sistemas distribuidos es capaz de enviar y leer mensajes entre procesos,
lo que puede llevar a ataques como la suplantación de identidad o la interceptación de mensajes. Estas
amenazas se dividen en tres categorías: amenazas a procesos, amenazas a los canales de
comunicación y denegación de servicio.

Para protegerse contra estas amenazas, se utilizan técnicas de seguridad como la criptografía y la
autenticación. La criptografía se utiliza para mantener los mensajes seguros, mientras que la
autenticación verifica la identidad de los emisores de mensajes. Además, se construyen canales
seguros que garantizan la privacidad, integridad y autenticidad de los datos transmitidos.

También hay otras amenazas, como los ataques de denegación de servicio y el código móvil, que
pueden dificultar las actividades de los usuarios autorizados. El diseño de sistemas seguros debe
considerar todas estas amenazas y evaluar los riesgos y consecuencias de cada una para equilibrar la
efectividad y el costo de las medidas de seguridad necesarias.

1.5 RECURSOS DE COMUNICACIÓN

15.1 Protocolos TCP/IP

El Protocolo TCP/IP, que significa Protocolo de Control de Transmisión/Protocolo de Internet, es un


conjunto de protocolos de comunicación utilizados para la interconexión de dispositivos en redes de
computadoras y la transmisión de datos a través de Internet. Fue desarrollado originalmente en los
años 70 y 80 para ser el estándar de comunicación en la red ARPANET, que posteriormente evolucionó
para convertirse en la base de la infraestructura de Internet tal como la conocemos hoy.

El conjunto de protocolos TCP/IP consta de varios protocolos individuales que trabajan juntos para
permitir la comunicación de datos en una red. Los dos protocolos principales dentro de TCP/IP son:

TCP (Protocolo de Control de Transmisión): TCP es un protocolo orientado a la conexión y confiable


que se utiliza para la transferencia de datos entre dispositivos en una red. Proporciona una
comunicación segura y confiable al garantizar que los datos se entreguen en el orden correcto y que
no se pierdan o se corrompan en el proceso. TCP también maneja la segmentación y reensamblaje de
datos en paquetes para su transmisión a través de la red.

IP (Protocolo de Internet): IP es el protocolo que se encarga de enrutar los paquetes de datos a través
de la red y de identificar los dispositivos en la red mediante direcciones IP únicas. IPv4 (versión 4) e
IPv6 (versión 6) son dos versiones del protocolo IP que se utilizan en Internet. IPv4 es la versión más
común, pero debido a la creciente demanda de direcciones IP y la limitación de direcciones en IPv4, se
ha adoptado gradualmente IPv6 para abordar esta limitación.

La relación entre el Protocolo TCP/IP y los sistemas distribuidos es significativa porque TCP/IP es el
protocolo de comunicación fundamental que subyace en la mayoría de las redes y sistemas
distribuidos. Los sistemas distribuidos son entornos en los que múltiples computadoras o dispositivos
trabajan juntos de manera cooperativa y coordinada para lograr un objetivo común. TCP/IP facilita la
comunicación y el intercambio de datos entre los componentes distribuidos de estos sistemas.

En un sistema distribuido, los componentes pueden estar físicamente dispersos en diferentes


ubicaciones geográficas, pero TCP/IP permite que se comuniquen y compartan información de manera
eficiente y segura a través de redes locales e Internet. Los sistemas distribuidos a menudo utilizan
aplicaciones y servicios que se basan en TCP/IP para proporcionar comunicación y conectividad
confiable entre los nodos del sistema, lo que facilita la colaboración y el intercambio de datos en
entornos distribuidos.

1.5.2 Servicios y puertos

En el contexto de TCP/IP, un servicio se refiere a una aplicación o función específica que se ejecuta en
un dispositivo o servidor en una red. Los servicios son programas o procesos que ofrecen
funcionalidades específicas a otros dispositivos o usuarios en la red.

Cada servicio tiene una identificación única conocida como número de puerto, que se utiliza para dirigir
las solicitudes entrantes a la aplicación o servicio correcto en el dispositivo destino. Por ejemplo, el
servicio web utiliza el puerto 80 para recibir solicitudes HTTP.

Puertos (Ports):

En TCP/IP, un puerto es un número que se asigna a un servicio específico en un dispositivo o servidor.


Los puertos van desde el número 0 hasta el 65535.

Los puertos se dividen en dos categorías principales: puertos bien conocidos (well-known ports) y
puertos registrados (registered ports). Los puertos bien conocidos van del 0 al 1023 y están reservados
para servicios ampliamente utilizados y estandarizados, como HTTP (puerto 80) o FTP (puerto 21). Los
puertos registrados van del 1024 al 49151 y se utilizan para servicios registrados en la IANA (Internet
Assigned Numbers Authority). Los puertos restantes, del 49152 al 65535, se utilizan para puertos
dinámicos y privados.
Cuando un dispositivo envía datos a otro dispositivo en una red, especifica un número de puerto de
origen (source port) y un número de puerto de destino (destination port) en el encabezado de la
comunicación. Estos números de puerto permiten a los dispositivos en la red dirigir los datos al servicio
correcto en el dispositivo destino.

Los puertos son esenciales para la multiplexación y la demultiplexación de datos en una red, lo que
significa que múltiples servicios pueden funcionar en el mismo dispositivo y compartir la misma
dirección IP, ya que se diferencian por sus números de puerto.

1.5.3 Procesos y dominios

Procesos

En el contexto de sistemas distribuidos, un proceso se refiere a un programa o aplicación en ejecución


en un dispositivo o nodo de la red. Los procesos son la unidad básica de ejecución en un sistema
operativo y pueden ser programas de software que realizan tareas específicas.

Los procesos pueden comunicarse entre sí a través de la red mediante la transmisión de mensajes o
datos. En un sistema distribuido, varios procesos pueden ejecutarse en diferentes dispositivos y
colaborar para lograr una tarea común.

Los procesos pueden ser tanto servidores como clientes. Los servidores proporcionan servicios o
recursos a otros procesos, mientras que los clientes utilizan esos servicios o recursos.

Los procesos en un sistema distribuido pueden ser locales (ejecutándose en el mismo dispositivo) o
remotos (ejecutándose en dispositivos diferentes en la red).

Dominios:

Un dominio en el contexto de sistemas distribuidos se refiere a un ámbito o conjunto de recursos y


procesos que comparten una característica común o una política de seguridad específica.

Los dominios se utilizan para establecer límites y restricciones de acceso en un sistema distribuido. Los
recursos y procesos dentro de un dominio pueden tener ciertos permisos y políticas de acceso
compartidos, y estos pueden diferir de un dominio a otro.

Los dominios son útiles para la administración de la seguridad y el control de acceso en un sistema
distribuido. Pueden utilizarse para definir quién tiene acceso a qué recursos y servicios dentro del
sistema.

En un sistema distribuido, es común que existan múltiples dominios que representen diferentes niveles
de seguridad o diferentes departamentos de una organización. Cada dominio tiene su propia política
de seguridad y conjunto de reglas de acceso.

Es decir, los procesos son las unidades de ejecución de programas en un sistema distribuido, mientras
que los dominios son ámbitos o conjuntos de recursos y procesos que comparten políticas de seguridad
comunes. Los procesos colaboran y se comunican en un sistema distribuido, mientras que los dominios
establecen límites y restricciones de acceso para garantizar la seguridad y la administración adecuada
de los recursos y servicios en la red distribuida. Estos conceptos son esenciales para la administración
y la seguridad efectiva en entornos de sistemas distribuidos.
REFERENCIAS

Tema 1: INTRODUCCIÓN A LOS SISTEMAS DISTRIBUIDOS. (2003). Departamento de informática

Universidad de Valladolid. Recuperado 1 de septiembre de 2023, de

https://www.infor.uva.es/~fdiaz/sd/2004_05/doc/SD_TE01_20050221.pdf

Sistemas Distribuidos Modulo 1. (2020). Departamento de Ciencias e Ingeniería de la Computación

Universidad Nacional del Sur. Recuperado 1 de septiembre de 2023, de

https://cs.uns.edu.ar/~sd/data/apuntes/SD-2020-mod%2002.pdf

Lopez Fuentes, F. se A. (2015). Sistemas distribuidos [PDF]. Juan Carlos Rosas Ramírez.

http://dccd.cua.uam.mx/libros/archivos/03IXStream_sistemas_distribuidos.pdf

Echaiz, J., & Ardenghi, J. R. (s. f.). Carga Compartida en Sistemas Distribuidos Heterogeneos.

SEDICI. Recuperado 1 de septiembre de 2023, de

http://sedici.unlp.edu.ar/bitstream/handle/10915/21318/Documento_completo.pdf?sequence=1

&isAllowed=y

Sistemas distribuidos. (s. f.). cinvestav. Recuperado 1 de septiembre de 2023, de

https://www.tamps.cinvestav.mx/~vjsosa/clases/sd/sistemas_distribuidos_panorama.pdf

Tanenbaum, A. S. (1996). "Sistemas Operativos Distribuidos.

SISTEMAS DISTRIBUIDOS CON COMPONENTES. (s. f.). UV. Recuperado 1 de septiembre de 2023,

de https://www.uv.mx/iiesca/files/2013/01/distribuidos1999-2000.pdf
MUÑOZ ESCOÍ, Concurrencia y sistemas distribuidos. Valencia: Universidad Politécnica F.D. [et al] (2012).

Coulouris, G., Dollimore, J., & Kindberg, T. (2001). Sistemas distribuidos: conceptos y diseño (3.a

ed.). ADDISON WESLEY.

También podría gustarte