¿Cuáles son las diferencias entre una computadora en clúster y un sistema distribuido?

Excelentes respuestas hasta ahora. Tengo algunos puntos de vista:

  • Costo: con interconexiones especializadas (no una necesidad absoluta) y naturaleza especializada, un sistema de computadora en clúster normalmente costaría más
  • Las computadoras de clúster son de hecho más especializadas y tienen un acoplamiento más estricto en términos del bus. Dicho esto, ¡una vez tuve un clúster de Hadoop con infiniband!
  • Sistema distribuido, esencialmente significa que uno puede aprovechar el poder colectivo de muchas computadoras, conectadas libremente a través de una pila de software (como hadoop o TensorFlow) para realizar muchas formas de tareas de computación paralelas (paralelismo de datos o paralelismo de tareas)
  • Las pilas de sistemas distribuidos son generalmente de código abierto y comúnmente heterogéneas
  • Las pilas del sistema de clúster generalmente son ensambladas por una entidad, especialmente para un solo propósito para el que está construido
  • Sospecho que la semántica entre un clúster y un sistema distribuido está desapareciendo lentamente y se usa indistintamente. ¡Entonces puede que no haya una diferencia después de todo!

Como Avi dice a continuación, esos términos a menudo significan lo que un usuario en particular elige que signifiquen. Pueden tener un significado de ‘ventas’ y uno estrictamente técnico. En el inglés cotidiano, un ‘grupo’ es de cosas cercanas entre sí, mientras que ‘distribuido’ significa cosas más separadas.

Según entiendo el uso actual de TI, las características comunes de los sistemas distribuidos y los clústeres son:

1. Existen varias entidades computacionales autónomas, cada una con su propia memoria local.

2. Las entidades se comunican entre sí por mensaje que pasa

Un sistema puede tener un objetivo común, como resolver un gran problema computacional. Alternativamente, cada computadora puede tener su propio usuario con necesidades individuales y el propósito del sistema es coordinar el uso de recursos compartidos o proporcionar servicios de comunicación a los usuarios.

Las diferencias entre los clústeres (C) y los sistemas distribuidos (D) se resumen a continuación:

Estructura:

C – comprado para realizar una determinada tarea

D: ensamblado a partir de hardware ya disponible

Escala:

C – pequeña escala – no tiene que ser capaz de escalar

C – mediano / grande – capaz de expandirse a una gran cantidad de máquinas

Tarea:
C – especializado – creado para realizar un conjunto de tareas bien definidas

D – general – generalmente tiene que ser entornos informáticos de usuario general

Precio:

C – (relativamente) barato
D – costoso – pero puede ser gratuito para algunos usuarios en circunstancias especiales

Confiabilidad:

C – tan bueno como debe ser

C – alto y tolerante a fallas de cualquier componente individual

Un clúster es un sistema, generalmente administrado por una sola compañía. Los clústeres tienen normalmente una latencia muy baja y consisten en hardware de servidor. Un sistema distribuido puede ser cualquier cosa. Tener JS en el cliente y el código del servidor PHP que forma un sistema ya es llamado sistema distribuido por algunas personas.

En general, cuando trabaja con sistemas distribuidos, trabaja mucho con latencias largas y fallas inesperadas (como se menciona en los sistemas p2p). Al construir un clúster (o un clúster grande que se puede llamar supercomputadora), intenta evitarlo utilizando un hardware más robusto y una mejor interconexión de red (InfiniBand). Pero, sin embargo, un clúster sigue siendo un sistema distribuido.

Los dos son más o menos lo mismo. Algo llamado “clúster” tenderá a tener una gestión operativa mejor o más uniforme en todos los nodos cooperantes, y puede tener una mejor detección (más rápida) y recuperación de fallas que un sistema distribuido que no se llama “clúster”.

Un clúster tenderá a ser “propiedad” de una organización y estará dirigido por un solo órgano administrativo. Es más probable que un sistema distribuido tenga partes propiedad de diferentes organizaciones y que tenga administradores que ni siquiera conocen la existencia de los demás.

En realidad, podría encontrar sistemas que los profesionales pudieran describir en ambos sentidos, pero dos diferencias solían ser el caso (estos son un poco confusos con el aprovisionamiento / devops chef / puppet / salt / ansible y moderno):

1) interconexión

Los clústeres generalmente optan por interconexiones escalables de baja latencia. Infiniband a menudo, a veces ‘solo’ 10 / 40gig Ethernet. Mucho menos sobre-suscripción que el típico cómputo empresarial / web.

2) lo que se está ejecutando

Los clústeres generalmente (solían) ejecutar de 1 a unos pocos trabajos en ellos como un sistema lógico distribuido, generalmente ejecutando el mismo código por aplicación en todos los nodos que ejecutan esa aplicación.

Los sistemas distribuidos más comúnmente ejecutan diferentes capas o componentes de una aplicación en diferentes sistemas (piense en Akamai, sitio web moderno, etc.).