¿Qué es exactamente la informática distribuida? [cerrado]

14

¿Qué constituye exactamente la computación distribuida y cómo se diferencia de la computación paralela / concurrente?

¿El uso de mutexes y semáforos en múltiples hilos paralelos que intentan sincronizarse para acceder a un recurso constituye un problema en el dominio de la computación distribuida?

rdasxy
fuente

Respuestas:

8

¿Qué constituye exactamente la informática distribuida?

La computación distribuida es una colección inherentemente paralela de elementos de procesamiento que se comunican entre sí para abordar uno o más problemas. Esos elementos de procesamiento están suficientemente separados entre sí que no es práctico construir una estructura de mensajería confiable y oportuna entre ellos, por lo que es imposible que exista un conocimiento global del estado del sistema. Las características particulares de los mensajes con sistemas distribuidos son que los mensajes se perderán, se confundirán, se retrasarán; las soluciones en este espacio deben tener en cuenta esto. Por lo tanto, la programación distribuida se trata de tratar con redes y mensajes, paralelismo y falta de información global.

El método más sencillo para solucionar los problemas es hacer que un único elemento de procesamiento sea especial, es decir, autoritario para una determinada información. Luego, los otros elementos pueden volver a consultarlo cada vez, o almacenar en caché la información y esperar que no se desactualice (ya que no pueden contar con que se les informe de los cambios). Esta es la arquitectura clásica de cliente / servidor.

La informática en Internet es informática distribuida, pero sin la capacidad de controlar lo que la mayoría de los nodos distribuidos realmente hacen.

¿Múltiples hilos paralelos que intentan sincronizarse para acceder a un recurso constituyen un problema en el dominio de la computación distribuida?

Constituyen una posible solución que es útil al construir el modelo cliente / servidor, pero a un costo de un aumento potencialmente dramático en la contención de recursos. Para las lecturas, eso no es un gran problema (siempre que haya suficiente hardware), pero para las escrituras es un gran problema.

Sin embargo, lo que intenta evitar son bloqueos distribuidos. La falta de mensajería confiable y oportuna mata absolutamente los protocolos de decisión distribuidos, a menos que use algo como el protocolo Paxos , pero eso tiene muchas advertencias. El problema fundamental con la informática distribuida es que "a los mensajes les pasan cosas malas". Los protocolos de nivel relativamente bajo, como TCP, disminuyen los problemas, pero aún puede desatarse.

Compañeros de Donal
fuente
6

¿Múltiples hilos paralelos que intentan sincronizarse para acceder a un recurso constituyen un problema en el dominio de la computación distribuida?

Lo hacen si esos subprocesos podrían ejecutarse en diferentes máquinas, o incluso si se ejecutan en la misma máquina pero en diferentes procesos.

Caleb
fuente
1
Los subprocesos que se ejecutan en diferentes máquinas básicamente no se pueden sincronizar de la manera tradicional de mutexes y semáforos.
Jan Hudec
@ JanHudec Creo que ese fue el punto de la pregunta del entrevistador. Sin instrucciones atómicas de prueba y configuración o de comparación e intercambio o memoria compartida, la informática distribuida debe basarse en la mensajería entre máquinas para la sincronización. Afortunadamente, hay algoritmos que logran esto.
Caleb
No estoy de acuerdo con el "afortunadamente". Los algoritmos son complicados y no toleran fallas, por lo que deben evitarse.
Jan Hudec
5

La informática distribuida es un sistema informático que tiene un procesamiento que se produce en diferentes computadoras (es decir, en un sistema distribuido). Los programas individuales se comunican entre sí a través de una serie de canales de comunicación. Estos canales suelen ser conexiones de red (zócalos TCP, por ejemplo), pero a menudo usan otros protocolos y dispositivos de comunicación (como DeviceNET, BACNet, SECS-2, Modbus, etc.) o incluso protocolos personalizados para un dispositivo específico.

Los sistemas distribuidos suelen ser mucho más complicados que los sistemas diseñados para ejecutarse en una sola computadora. Además de los problemas de concurrencia y bloqueo de recursos con los que tienen que lidiar las aplicaciones de subprocesos múltiples, los sistemas distribuidos necesitan manejar fallas de comunicación y fallas de procesamiento de nodos. Las transacciones (y la reversión) que requieren múltiples procesadores para realizar también pueden ser complicadas.

Los sistemas distribuidos toman muchas formas y actualmente se usan en muchas aplicaciones. Las aplicaciones web son sistemas distribuidos. Un sistema N-Tiered generalmente tiene al menos N procesadores diferentes (con diferentes aplicaciones). Los sistemas distribuidos también se utilizan en muchos sistemas de automatización de fábrica.

El relato de computación distribuida en Wikipedia es digno de una lectura.

En respuesta a su pregunta sobre si una aplicación de subprocesos múltiples constituye una aplicación distribuida, si los subprocesos se ejecutan en una sola computadora, el sistema no se distribuye. Tiene que resolver algunos de los problemas inherentes a los sistemas distribuidos, pero no todos.

Jay Elston
fuente
3

Estrictamente hablando, "computación distribuida" es cualquier solución que implica procesar una sola transacción / solicitud / cálculo en más de una computadora.

También se encontrará con el término "Sistemas Distribuidos", que es un término general para Windows, Unix y otros servidores de sistemas pequeños que originalmente se habrían implementado fuera del centro de datos central. Aunque es más normal que estos sistemas se implementen dentro del centro de datos en estos días, el término se ha estancado.

James Anderson
fuente
3

Para responder a su pregunta general sobre lo que constituye la computación distribuida, recomendaría el documento Una nota sobre computación distribuida de Ann Wollrath, Geoff Wyant, Jim Waldo y Samuel C. Kendall . Cubre la historia reciente de los sistemas distribuidos y sus fallas, y propone que la computación distribuida requiere pensar de manera diferente sobre los problemas involucrados.

Aunque no se mencionan mutexes ni semáforos en el documento, proporciona información valiosa sobre la ingeniería adecuada de un sistema de software distribuido.

En cuanto a por qué su entrevistador preguntó sobre mutexes y semáforos, estaría de acuerdo con @Caleb:

Lo hacen si esos subprocesos podrían ejecutarse en diferentes máquinas, o incluso si se ejecutan en la misma máquina pero en diferentes procesos.

Lo único que agregaría es que los mutexes y los semáforos son primitivas de bloqueo de bajo nivel que le permiten distribuir el trabajo en múltiples dispositivos informáticos, y su funcionamiento es (generalmente) vital para el éxito de la aplicación. Obviamente, depende del idioma y la tecnología utilizada. Si usa Erlang o Scala, probablemente usará la concurrencia basada en el modelo de actor en lugar de la concurrencia tradicional basada en el bloqueo.

Matthew Rodatus
fuente
2

La palabra lo dice todo. Debe realizar algunas operaciones informáticas y si pudiera distribuir partes de esta informática de manera que cada informática funcione independientemente de la otra informática y luego, cuando todo esté hecho, combinará el resultado de cada informática para obtener la respuesta de la informática principal. El ejemplo sería: Map-Reduce

Ankur
fuente
1

Tuvimos un curso sobre "sistemas distribuidos" y aunque no recuerdo exactamente la definición, fue en la línea de:

  1. puede ejecutarse en múltiples nodos separados que se comunican a través de mensajes (no puede compartir memoria)
  2. los objetos se pueden migrar entre nodos
  3. los objetos mantienen su identidad cuando se migran y se pueden abordar de forma transparente cuando se migran
  4. los objetos no dependen del nodo que los creó
  5. el sistema puede manejar agregar y eliminar nodos

(Creo que hubo algunos más y no estoy seguro sobre el último punto)

Ahora en el curso aprendimos cómo implementar transacciones distribuidas y bloqueo distribuido. La lección es que el bloqueo distribuido se implementa básicamente mediante la transacción distribuida, que es al revés en comparación con lo que se hace localmente, y que no es inherentemente tolerante a fallas, lo que en su lugar anula el propósito de tener un sistema distribuido en primer lugar.

Editar: Esa definición es para "sistema distribuido" en el sentido estricto de sistema operativo o sistema de base de datos y en lugar de simplemente sistema cliente-servidor. Cualquier cosa que satisfaga la primera condición puede llamarse distribuida en algunos contextos.

Casualmente, la definición coincide con la diferencia entre los sistemas de control de versiones distribuidos y tradicionales, todos los cuales son al menos cliente-servidor y, a menudo, también se replican.

Jan Hudec
fuente
Ese es en gran medida un estilo particular de computación distribuida. Hay otros, y lo único que realmente comparten es el primer punto. La mensajería es crítica, los demás ... no tanto.
Donal Fellows
1
@DonalFellows: Bueno, este es un sistema distribuido , en un sentido de sistema operativo o de base de datos. Allí la migración y la tolerancia a fallas son los puntos principales para hacerlas. La "informática" distribuida es cualquier cosa que se ejecute en múltiples nodos.
Jan Hudec
Bueno, en ese caso debería haber cubierto el negocio de tomar una decisión. Eso es difícil en un sistema distribuido. (Además, la mayoría de los trabajos académicos que he visto sobre el tema hacen suposiciones totalmente poco realistas sobre la topología gráfica subyacente, dando conclusiones válidas pero inútiles.)
Donal Fellows
@DonalFellows: El curso, por supuesto, cubrió el negocio de tomar decisiones y todo ese arbitraje y dividir las cosas del cerebro (no demasiado profundo, solo fue de nivel introductorio). Pero esa no es la propiedad definitoria del sistema distribuido. Es simplemente un obstáculo que tienes que saltar si quieres crear uno.
Jan Hudec
0

Computación distribuida el término "no comercializador" para la computación empresarial que puede escuchar mucho más en la vida real. Sin embargo, la idea general que otros señalan es "estás usando más de una computadora para hacer el trabajo"

Arquímedes Trajano
fuente