¿Qué es exactamente la computación distribuida? [cerrado]

14

¿Qué constituye exactamente la computación distribuida y en qué 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?

    
pregunta rdasxy 19.10.2011 - 05:06

8 respuestas

8
  

¿Qué constituye exactamente la computación distribuida?

La computación distribuida es una inherentemente colección paralela de elementos de procesamiento que se comunican entre sí para abordar uno o más problemas. Esos elementos de procesamiento están lo suficientemente separados unos de otros para que no sea práctico construir un tejido de mensajería confiable y oportuno entre ellos, por lo que resulta imposible que exista un conocimiento global del estado del sistema. Las características particulares de la mensajería con sistemas distribuidos son que los mensajes se perderán, se quedarán confusos, se se demorarán, las soluciones en este espacio deben tomarse cuenta de esto. Por lo tanto, la programación distribuida consiste en 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 referirse a ella cada vez, o almacenar en caché la información y esperar que no quede desactualizada (ya que no pueden contar con que se les informen los cambios). Esta es la arquitectura clásica de cliente / servidor.

Internet computing es computación distribuida, pero sin la capacidad de controlar lo que realmente hacen la mayoría de los nodos distribuidos.

  

¿Varios subprocesos 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 crear el modelo de 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.

Lo que intentas evitar, sin embargo, son bloqueos distribuidos. La falta de mensajes oportunos y confiables elimina absolutamente los protocolos de decisión distribuidos, a menos que uses algo como Paxos protocol , pero eso tiene muchas advertencias. El problema fundamental con la computación distribuida es que "las cosas malas pasan con los mensajes". Los protocolos de nivel relativamente bajo, como el TCP, disminuyen los problemas, pero aún así se pueden despegar.

    
respondido por el Donal Fellows 19.10.2011 - 10:40
6
  

Haz varios hilos paralelos intentando sincronizar para acceder a un   ¿Un recurso constituye un problema en el dominio de la computación distribuida?

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

    
respondido por el Caleb 19.10.2011 - 05:22
6

La computación distribuida es un sistema informático que tiene el procesamiento 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 (sockets TCP, por ejemplo), pero a menudo utilizan 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 deben lidiar las aplicaciones de subprocesos múltiples, los sistemas distribuidos deben manejar las fallas de comunicación y las fallas del nodo de procesamiento. Las transacciones (y la reversión) que requieren la realización de múltiples procesadores también pueden ser complicadas.

Los sistemas distribuidos adoptan muchas formas y actualmente se utilizan 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.

La publicación sobre informática distribuida en Wikipedia merece una lectura.

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

    
respondido por el Jay Elston 19.10.2011 - 09:02
3

Estrictamente hablando, "computación distribuida" es cualquier solución que involucra el procesamiento de 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 de captura para Windows, Unix y otros servidores de sistemas pequeños que se habrían implementado originalmente fuera del centro de datos central. Aunque es más normal que estos sistemas se implementen en el centro de datos en estos días, el término se ha atascado.

    
respondido por el James Anderson 19.10.2011 - 06:27
3

Para responder a su pregunta general acerca de lo que constituye computación distribuida, recomendaría el documento Una nota sobre computación distribuida por 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 en el documento no se mencionan ni mutex ni semáforos, 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 máquinas diferentes, o incluso si están   ejecutándose en la misma máquina pero en diferentes procesos.

Lo único que agregaría es que los mutex 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 lenguaje y la tecnología utilizada. Si está utilizando Erlang o Scala, probablemente use la concurrencia basada en el modelo Actor en lugar de la concurrencia tradicional basada en el bloqueo.

    
respondido por el Matthew Rodatus 19.10.2011 - 13:05
2

La palabra lo dice todo. Debe realizar alguna operación de computación y, si pudiera distribuir partes de esta computación de manera que cada computación funcione independientemente de la otra computación y luego, cuando haya terminado, combine el resultado de cada computación para obtener la respuesta de computación principal. Ejemplo sería: Mapa-Reducir

    
respondido por el Ankur 19.10.2011 - 08:11
1

Tuvimos un curso sobre "sistemas distribuidos" y aunque no recuerdo exactamente la definición, fue como sigue:

  1. se puede ejecutar en varios nodos separados que se comunican a través de mensajes (no se puede compartir la memoria)
  2. los objetos se pueden migrar entre nodos
  3. los objetos mantienen su identidad cuando se migran y pueden abordarse de forma transparente cuando se migran
  4. los objetos no dependen del nodo que los creó
  5. el sistema puede manejar la adición y eliminación de nodos

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

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

Editar: Esa definición es para "sistema distribuido" en el sentido estricto del sistema operativo o el sistema de base de datos y no como un mero 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.

    
respondido por el Jan Hudec 19.10.2011 - 11:48
0

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

    
respondido por el Archimedes Trajano 19.02.2012 - 22:04

Lea otras preguntas en las etiquetas