Computación distribuida

Sistema con múltiples computadoras en red

La computación distribuida es un campo de la informática que estudia los sistemas distribuidos , definidos como sistemas informáticos cuyos componentes intercomunicados están ubicados en diferentes computadoras en red . [1] [2]

Los componentes de un sistema distribuido se comunican y coordinan sus acciones pasándose mensajes entre sí para lograr un objetivo común. Tres desafíos importantes de los sistemas distribuidos son: mantener la concurrencia de los componentes, superar la falta de un reloj global y gestionar el fallo independiente de los componentes. [1] Cuando un componente de un sistema falla, no falla todo el sistema. [3] Los ejemplos de sistemas distribuidos varían desde sistemas basados ​​en SOA hasta microservicios , juegos en línea multijugador masivos y aplicaciones peer-to-peer . Los sistemas distribuidos cuestan significativamente más que las arquitecturas monolíticas, principalmente debido a las mayores necesidades de hardware adicional, servidores, puertas de enlace, cortafuegos, nuevas subredes, proxies, etc. [4] Además, los sistemas distribuidos son propensos a falacias de computación distribuida . Por otro lado, un sistema distribuido bien diseñado es más escalable, más duradero, más cambiante y más ajustado que una aplicación monolítica implementada en una sola máquina. [5] Según Marc Brooker: "un sistema es escalable en el rango en el que el costo marginal de la carga de trabajo adicional es casi constante". Las tecnologías sin servidor se ajustan a esta definición, pero es necesario considerar el costo total de propiedad, no solo el costo de la infraestructura. [6]

Un programa de computadora que se ejecuta dentro de un sistema distribuido se denomina programa distribuido , [7] y la programación distribuida es el proceso de escribir dichos programas. [8] Hay muchos tipos diferentes de implementaciones para el mecanismo de paso de mensajes, incluido HTTP puro, conectores tipo RPC y colas de mensajes . [9]

La computación distribuida también se refiere al uso de sistemas distribuidos para resolver problemas computacionales. En la computación distribuida , un problema se divide en muchas tareas, cada una de las cuales es resuelta por una o más computadoras, [10] que se comunican entre sí mediante el paso de mensajes. [11]

Introducción

La palabra distribuido en términos como "sistema distribuido", "programación distribuida" y " algoritmo distribuido " originalmente se refería a redes de computadoras donde las computadoras individuales estaban distribuidas físicamente dentro de un área geográfica. [12] Los términos se utilizan hoy en día en un sentido mucho más amplio, incluso refiriéndose a procesos autónomos que se ejecutan en la misma computadora física e interactúan entre sí mediante el paso de mensajes. [11]

Si bien no existe una definición única de un sistema distribuido, [13] las siguientes propiedades definitorias se utilizan comúnmente como:

Un sistema distribuido puede tener un objetivo común, como resolver un gran problema computacional; [16] entonces el usuario percibe el conjunto de procesadores autónomos como una unidad. Alternativamente, cada computadora puede tener su propio usuario con necesidades individuales, y el propósito del sistema distribuido es coordinar el uso de recursos compartidos o proporcionar servicios de comunicación a los usuarios. [17]

Otras propiedades típicas de los sistemas distribuidos incluyen las siguientes:

  • El sistema tiene que tolerar fallos en ordenadores individuales. [18]
  • La estructura del sistema (topología de la red, latencia de la red, número de computadoras) no se conoce de antemano, el sistema puede constar de diferentes tipos de computadoras y enlaces de red, y el sistema puede cambiar durante la ejecución de un programa distribuido. [19]
  • Cada computadora tiene sólo una visión limitada e incompleta del sistema. Cada computadora puede conocer sólo una parte de la información de entrada. [20]

Patrones

A continuación se presentan patrones arquitectónicos comunes utilizados para la computación distribuida: [21]

Computación paralela y distribuida

(a), (b): un sistema distribuido.
(c): un sistema paralelo.

Los sistemas distribuidos son grupos de computadoras en red que comparten un objetivo común para su trabajo. Los términos " computación concurrente ", " computación paralela " y "computación distribuida" tienen mucha superposición, y no existe una distinción clara entre ellos. [22] El mismo sistema puede caracterizarse como "paralelo" y "distribuido"; los procesadores en un sistema distribuido típico funcionan simultáneamente en paralelo. [23] La computación paralela puede verse como una forma particularmente acoplada de computación distribuida, [24] y la computación distribuida puede verse como una forma débilmente acoplada de computación paralela. [13] Sin embargo, es posible clasificar a grandes rasgos los sistemas concurrentes como "paralelos" o "distribuidos" utilizando los siguientes criterios:

  • En la computación paralela, todos los procesadores pueden tener acceso a una memoria compartida para intercambiar información entre procesadores. [25]
  • En la computación distribuida, cada procesador tiene su propia memoria privada ( memoria distribuida ). La información se intercambia mediante el paso de mensajes entre los procesadores. [26]

La figura de la derecha ilustra la diferencia entre sistemas distribuidos y paralelos. La figura (a) es una vista esquemática de un sistema distribuido típico; el sistema se representa como una topología de red en la que cada nodo es una computadora y cada línea que conecta los nodos es un enlace de comunicación. La figura (b) muestra el mismo sistema distribuido con más detalle: cada computadora tiene su propia memoria local y la información solo se puede intercambiar pasando mensajes de un nodo a otro mediante los enlaces de comunicación disponibles. La figura (c) muestra un sistema paralelo en el que cada procesador tiene acceso directo a una memoria compartida.

La situación se complica aún más por los usos tradicionales de los términos algoritmo paralelo y distribuido que no coinciden exactamente con las definiciones anteriores de sistemas paralelos y distribuidos (véase más adelante un análisis más detallado). No obstante, como regla general, la computación paralela de alto rendimiento en un multiprocesador de memoria compartida utiliza algoritmos paralelos, mientras que la coordinación de un sistema distribuido a gran escala utiliza algoritmos distribuidos. [27]

Historia

El uso de procesos concurrentes que se comunican a través del paso de mensajes tiene sus raíces en las arquitecturas de sistemas operativos estudiadas en la década de 1960. [28] Los primeros sistemas distribuidos generalizados fueron las redes de área local como Ethernet , que se inventó en la década de 1970. [29]

ARPANET , uno de los predecesores de Internet , se introdujo a finales de los años 1960, y el correo electrónico ARPANET se inventó a principios de los años 1970. El correo electrónico se convirtió en la aplicación más exitosa de ARPANET, [30] y es probablemente el primer ejemplo de una aplicación distribuida a gran escala . Además de ARPANET (y su sucesora, la Internet global), otras redes informáticas mundiales tempranas incluyeron Usenet y FidoNet de los años 1980, ambas utilizadas para dar soporte a sistemas de discusión distribuidos. [31]

El estudio de la computación distribuida se convirtió en una rama propia de la ciencia informática a finales de los años 1970 y principios de los años 1980. La primera conferencia en el campo, el Simposio sobre Principios de Computación Distribuida (PODC), se remonta a 1982, y su homólogo, el Simposio Internacional sobre Computación Distribuida (DISC), se celebró por primera vez en Ottawa en 1985 como el Taller Internacional sobre Algoritmos Distribuidos en Gráficos. [32]

Arquitecturas

Para la computación distribuida se utilizan diversas arquitecturas de hardware y software. En un nivel inferior, es necesario interconectar varias CPU con algún tipo de red, independientemente de si esa red está impresa en una placa de circuito o formada por dispositivos y cables acoplados de forma flexible. En un nivel superior, es necesario interconectar los procesos que se ejecutan en esas CPU con algún tipo de sistema de comunicación . [33]

El hecho de que estas CPU compartan recursos o no determina una primera distinción entre tres tipos de arquitectura:

La programación distribuida generalmente se clasifica en una de varias arquitecturas básicas: cliente-servidor , tres niveles , n niveles o peer-to-peer ; o categorías: acoplamiento flexible o acoplamiento estrecho . [34]

  • Cliente-servidor : arquitecturas en las que los clientes inteligentes contactan al servidor para obtener datos, luego los formatean y los muestran a los usuarios. La información que ingresa el cliente se envía nuevamente al servidor cuando representa un cambio permanente.
  • Tres niveles : arquitecturas que trasladan la inteligencia del cliente a un nivel intermedio para que se puedan utilizar clientes sin estado . Esto simplifica la implementación de aplicaciones. La mayoría de las aplicaciones web son de tres niveles.
  • n -tier : arquitecturas que se refieren típicamente a aplicaciones web que reenvían sus solicitudes a otros servicios empresariales. Este tipo de aplicación es la principal responsable del éxito de los servidores de aplicaciones .
  • Peer-to-peer : arquitecturas en las que no hay máquinas especiales que proporcionen un servicio o administren los recursos de la red. [35] : 227  En cambio, todas las responsabilidades se dividen uniformemente entre todas las máquinas, conocidas como pares. Los pares pueden servir tanto como clientes como servidores. [36] Ejemplos de esta arquitectura incluyen BitTorrent y la red bitcoin .

Otro aspecto básico de la arquitectura de computación distribuida es el método de comunicación y coordinación del trabajo entre procesos concurrentes. A través de varios protocolos de paso de mensajes, los procesos pueden comunicarse directamente entre sí, normalmente en una relación principal/secundaria. Alternativamente, una arquitectura "centrada en la base de datos" puede permitir que la computación distribuida se realice sin ninguna forma de comunicación directa entre procesos , utilizando una base de datos compartida . [37] La ​​arquitectura centrada en la base de datos en particular proporciona análisis de procesamiento relacional en una arquitectura esquemática que permite la retransmisión del entorno en vivo. Esto permite funciones de computación distribuida tanto dentro como fuera de los parámetros de una base de datos en red. [38]

Aplicaciones

Las razones para utilizar sistemas distribuidos y computación distribuida pueden incluir:

  • La naturaleza misma de una aplicación puede requerir el uso de una red de comunicación que conecte varias computadoras: por ejemplo, datos producidos en una ubicación física y requeridos en otra ubicación.
  • Existen muchos casos en los que, en principio, sería posible utilizar un único ordenador, pero el uso de un sistema distribuido resulta beneficioso por razones prácticas. Por ejemplo:
    • Puede permitir un almacenamiento y una memoria mucho mayores, un procesamiento más rápido y un mayor ancho de banda que una sola máquina.
    • Puede proporcionar más confiabilidad que un sistema no distribuido, ya que no hay un único punto de falla . Además, un sistema distribuido puede ser más fácil de expandir y administrar que un sistema monolítico de un solo procesador. [39]
    • Puede resultar más rentable obtener el nivel de rendimiento deseado utilizando un grupo de varias computadoras de gama baja, en comparación con una sola computadora de gama alta.

Ejemplos

Entre los ejemplos de sistemas distribuidos y aplicaciones de computación distribuida se incluyen los siguientes: [40]

Sistemas distribuidos reactivos

Según el Manifiesto Reactivo, los sistemas distribuidos reactivos son responsivos, resilientes, elásticos y basados ​​en mensajes. Por consiguiente, los sistemas reactivos son más flexibles, están acoplados de forma flexible y son escalables. Para que sus sistemas sean reactivos, se recomienda implementar los Principios Reactivos. Los Principios Reactivos son un conjunto de principios y patrones que ayudan a que sus aplicaciones nativas de la nube, así como las aplicaciones nativas del borde, sean más reactivas. [42]

Fundamentos teóricos

Modelos

Muchas tareas que nos gustaría automatizar mediante el uso de una computadora son del tipo pregunta-respuesta: nos gustaría hacer una pregunta y la computadora debería producir una respuesta. En la informática teórica , estas tareas se denominan problemas computacionales . Formalmente, un problema computacional consta de instancias junto con una solución para cada instancia. Las instancias son preguntas que podemos hacer y las soluciones son las respuestas deseadas a estas preguntas.

La informática teórica busca comprender qué problemas computacionales se pueden resolver mediante el uso de una computadora ( teoría de la computabilidad ) y con qué eficiencia ( teoría de la complejidad computacional ). Tradicionalmente, se dice que un problema se puede resolver mediante el uso de una computadora si podemos diseñar un algoritmo que produzca una solución correcta para cualquier instancia dada. Tal algoritmo se puede implementar como un programa de computadora que se ejecuta en una computadora de propósito general: el programa lee una instancia del problema desde la entrada , realiza algún cálculo y produce la solución como salida . Los formalismos como las máquinas de acceso aleatorio o las máquinas de Turing universales se pueden utilizar como modelos abstractos de una computadora secuencial de propósito general que ejecuta dicho algoritmo. [43] [44]

El campo de la computación concurrente y distribuida estudia cuestiones similares en el caso de múltiples computadoras o de una computadora que ejecuta una red de procesos que interactúan: ¿qué problemas computacionales se pueden resolver en dicha red y con qué eficiencia? Sin embargo, no resulta del todo obvio qué se entiende por "resolver un problema" en el caso de un sistema concurrente o distribuido: por ejemplo, ¿cuál es la tarea del diseñador del algoritmo y cuál es el equivalente concurrente o distribuido de una computadora secuencial de propósito general? [ cita requerida ]

El debate a continuación se centra en el caso de varias computadoras, aunque muchos de los problemas son los mismos para los procesos simultáneos que se ejecutan en una sola computadora.

Se utilizan habitualmente tres puntos de vista:

Algoritmos paralelos en el modelo de memoria compartida
  • Todos los procesadores tienen acceso a una memoria compartida. El diseñador del algoritmo elige el programa que ejecuta cada procesador.
  • Un modelo teórico son las máquinas de acceso aleatorio paralelo (PRAM) que se utilizan. [45] Sin embargo, el modelo PRAM clásico supone un acceso sincrónico a la memoria compartida.
  • Los programas de memoria compartida se pueden extender a sistemas distribuidos si el sistema operativo subyacente encapsula la comunicación entre nodos y unifica virtualmente la memoria en todos los sistemas individuales.
  • Un modelo que se acerca más al comportamiento de las máquinas multiprocesador del mundo real y que tiene en cuenta el uso de instrucciones de máquina, como Compare-and-swap (CAS), es el de memoria compartida asíncrona . Existe una amplia cantidad de trabajos sobre este modelo, un resumen del cual se puede encontrar en la literatura. [46] [47]
Algoritmos paralelos en el modelo de paso de mensajes
  • El diseñador del algoritmo elige la estructura de la red, así como el programa que ejecuta cada ordenador.
  • Se utilizan modelos como circuitos booleanos y redes de ordenación . [48] Un circuito booleano puede considerarse como una red informática: cada compuerta es una computadora que ejecuta un programa informático extremadamente simple. De manera similar, una red de ordenación puede considerarse como una red informática: cada comparador es una computadora.
Algoritmos distribuidos en el modelo de paso de mensajes
  • El diseñador del algoritmo sólo elige el programa informático. Todos los ordenadores ejecutan el mismo programa. El sistema debe funcionar correctamente independientemente de la estructura de la red.
  • Un modelo comúnmente utilizado es un gráfico con una máquina de estados finitos por nodo.

En el caso de algoritmos distribuidos, los problemas computacionales suelen estar relacionados con grafos. A menudo, el grafo que describe la estructura de la red informática es la instancia del problema. Esto se ilustra en el siguiente ejemplo. [49]

Un ejemplo

Consideremos el problema computacional de encontrar una coloración de un gráfico dado G. Diferentes campos podrían adoptar los siguientes enfoques:

Algoritmos centralizados [49]
  • El gráfico G se codifica como una cadena y la cadena se proporciona como entrada a una computadora. El programa informático encuentra una coloración del gráfico, codifica la coloración como una cadena y genera el resultado.
Algoritmos paralelos
  • Nuevamente, el gráfico G está codificado como una cadena. Sin embargo, varias computadoras pueden acceder a la misma cadena en paralelo. Cada computadora puede concentrarse en una parte del gráfico y producir un color para esa parte.
  • El enfoque principal está en la computación de alto rendimiento que explota la potencia de procesamiento de múltiples computadoras en paralelo.
Algoritmos distribuidos
  • El grafo G es la estructura de la red informática. Hay un ordenador por cada nodo de G y un enlace de comunicación por cada borde de G. Inicialmente, cada ordenador solo conoce a sus vecinos inmediatos en el grafo G ; los ordenadores deben intercambiar mensajes entre sí para descubrir más sobre la estructura de G. Cada ordenador debe producir su propio color como salida.
  • El objetivo principal es coordinar el funcionamiento de un sistema distribuido arbitrario. [49]

Si bien el campo de los algoritmos paralelos tiene un enfoque diferente al de los algoritmos distribuidos, existe mucha interacción entre ambos campos. Por ejemplo, el algoritmo Cole-Vishkin para la coloración de gráficos [50] se presentó originalmente como un algoritmo paralelo, pero la misma técnica también se puede utilizar directamente como un algoritmo distribuido.

Además, un algoritmo paralelo se puede implementar en un sistema paralelo (usando memoria compartida) o en un sistema distribuido (usando paso de mensajes). [51] El límite tradicional entre algoritmos paralelos y distribuidos (elegir una red adecuada vs. ejecutar en una red dada) no se encuentra en el mismo lugar que el límite entre sistemas paralelos y distribuidos (memoria compartida vs. paso de mensajes).

Medidas de complejidad

En los algoritmos paralelos, otro recurso además del tiempo y el espacio es la cantidad de computadoras. De hecho, a menudo existe un equilibrio entre el tiempo de ejecución y la cantidad de computadoras: el problema se puede resolver más rápido si hay más computadoras ejecutándose en paralelo (ver aceleración ). Si un problema de decisión se puede resolver en tiempo polilogarítmico utilizando una cantidad polinómica de procesadores, entonces se dice que el problema pertenece a la clase NC . [52] La clase NC se puede definir igualmente bien utilizando el formalismo PRAM o circuitos booleanos: las máquinas PRAM pueden simular circuitos booleanos de manera eficiente y viceversa. [53]

En el análisis de algoritmos distribuidos, se suele prestar más atención a las operaciones de comunicación que a los pasos computacionales. Quizás el modelo más simple de computación distribuida sea un sistema sincrónico donde todos los nodos operan en forma sincronizada. Este modelo se conoce comúnmente como el modelo LOCAL. Durante cada ronda de comunicación , todos los nodos en paralelo (1) reciben los últimos mensajes de sus vecinos, (2) realizan cálculos locales arbitrarios y (3) envían nuevos mensajes a sus vecinos. En tales sistemas, una medida central de complejidad es el número de rondas de comunicación sincrónica requeridas para completar la tarea. [54]

Esta medida de complejidad está estrechamente relacionada con el diámetro de la red. Sea D el diámetro de la red. Por un lado, cualquier problema computable se puede resolver de manera trivial en un sistema distribuido sincrónico en aproximadamente 2 D rondas de comunicación: simplemente se reúne toda la información en una ubicación ( D rondas), se resuelve el problema y se informa a cada nodo sobre la solución ( D rondas).

Por otro lado, si el tiempo de ejecución del algoritmo es mucho menor que D rondas de comunicación, entonces los nodos en la red deben producir su salida sin tener la posibilidad de obtener información sobre partes distantes de la red. En otras palabras, los nodos deben tomar decisiones globalmente consistentes basadas en la información que está disponible en su vecindario local D. Se conocen muchos algoritmos distribuidos con un tiempo de ejecución mucho menor que D rondas, y comprender qué problemas se pueden resolver con dichos algoritmos es una de las preguntas centrales de investigación en el campo. [55] Normalmente, un algoritmo que resuelve un problema en tiempo polilogarítmico en el tamaño de la red se considera eficiente en este modelo.

Otra medida comúnmente utilizada es el número total de bits transmitidos en la red (cf. complejidad de la comunicación ). [56] Las características de este concepto se capturan típicamente con el modelo CONGEST(B), que se define de manera similar al modelo LOCAL, pero donde los mensajes individuales solo pueden contener B bits.

Otros problemas

Los problemas computacionales tradicionales parten de la base de que el usuario formula una pregunta, un ordenador (o un sistema distribuido) procesa la pregunta, produce una respuesta y se detiene. Sin embargo, también hay problemas en los que se requiere que el sistema no se detenga, como el problema de los filósofos que cenan y otros problemas similares de exclusión mutua . En estos problemas, se supone que el sistema distribuido debe coordinar continuamente el uso de los recursos compartidos para que no se produzcan conflictos ni bloqueos .

También existen desafíos fundamentales que son exclusivos de la computación distribuida, por ejemplo, aquellos relacionados con la tolerancia a fallas . Algunos ejemplos de problemas relacionados incluyen problemas de consenso , [57] tolerancia a fallas bizantinas , [58] y autoestabilización . [59]

Mucha investigación también se centra en comprender la naturaleza asincrónica de los sistemas distribuidos:

Tenga en cuenta que en los sistemas distribuidos, la latencia debe medirse a través del "percentil 99" porque "mediana" y "promedio" pueden ser engañosos. [63]

La elección de coordinador (o elección de líder ) es el proceso de designar un único proceso como organizador de alguna tarea distribuida entre varios ordenadores (nodos). Antes de que se inicie la tarea, todos los nodos de la red desconocen qué nodo actuará como "coordinador" (o líder) de la tarea o no pueden comunicarse con el coordinador actual. Sin embargo, después de ejecutar un algoritmo de elección de coordinador, cada nodo de la red reconoce un nodo particular y único como coordinador de la tarea. [64]

Los nodos de la red se comunican entre sí para decidir cuál de ellos pasará al estado de "coordinador". Para ello, necesitan algún método que rompa la simetría entre ellos. Por ejemplo, si cada nodo tiene identidades únicas y comparables, los nodos pueden comparar sus identidades y decidir que el nodo con la identidad más alta es el coordinador. [64]

La definición de este problema se atribuye a menudo a LeLann, quien lo formalizó como un método para crear un nuevo token en una red de anillo de tokens en la que el token se ha perdido. [65]

Los algoritmos de elección de coordinadores están diseñados para ser económicos en términos de total de bytes transmitidos y tiempo. El algoritmo sugerido por Gallager, Humblet y Spira [66] para grafos generales no dirigidos ha tenido un fuerte impacto en el diseño de algoritmos distribuidos en general y ganó el Premio Dijkstra por un artículo influyente en computación distribuida.

Se han sugerido muchos otros algoritmos para diferentes tipos de grafos de red , como anillos no dirigidos, anillos unidireccionales, grafos completos, cuadrículas, grafos de Euler dirigidos y otros. Korach, Kutten y Moran sugirieron un método general que desvincula la cuestión de la familia de grafos del diseño del algoritmo de elección del coordinador. [67]

Para llevar a cabo la coordinación, los sistemas distribuidos emplean el concepto de coordinadores. El problema de elección de coordinadores consiste en elegir un proceso de entre un grupo de procesos en diferentes procesadores de un sistema distribuido para que actúe como coordinador central. Existen varios algoritmos de elección de coordinador central. [68]

Propiedades de los sistemas distribuidos

Hasta ahora, el enfoque se ha centrado en el diseño de un sistema distribuido que resuelva un problema determinado. Un problema de investigación complementario es el estudio de las propiedades de un sistema distribuido determinado. [69] [70]

El problema de la detención es un ejemplo análogo en el campo de la computación centralizada: se nos da un programa de computadora y la tarea es decidir si se detiene o se ejecuta indefinidamente. El problema de la detención es indecidible en el caso general y, naturalmente, comprender el comportamiento de una red de computadoras es al menos tan difícil como comprender el comportamiento de una computadora. [71]

Sin embargo, hay muchos casos especiales interesantes que son decidibles. En particular, es posible razonar sobre el comportamiento de una red de máquinas de estados finitos. Un ejemplo es determinar si una red dada de máquinas de estados finitos que interactúan (asincrónicas y no deterministas) puede llegar a un punto muerto. Este problema es PSPACE-completo , [72] es decir, es decidible, pero no es probable que exista un algoritmo eficiente (centralizado, paralelo o distribuido) que resuelva el problema en el caso de redes grandes.

Véase también

Notas

  1. ^ ab Tanenbaum, Andrew S.; Steen, Maarten van (2002). Sistemas distribuidos: principios y paradigmas. Upper Saddle River, NJ: Pearson Prentice Hall. ISBN 0-13-088893-1Archivado desde el original el 12 de agosto de 2020. Consultado el 28 de agosto de 2020 .
  2. ^ "Programas distribuidos". Textos en informática . Londres: Springer London. 2010. pp. 373–406. doi :10.1007/978-1-84882-745-5_11. ISBN 978-1-84882-744-8. ISSN  1868-0941. Los sistemas constan de una serie de componentes distribuidos físicamente que funcionan de forma independiente utilizando su almacenamiento privado, pero que también se comunican de vez en cuando mediante el paso explícito de mensajes. Estos sistemas se denominan sistemas distribuidos.
  3. ^ Dusseau y Dusseau 2016, págs. 1–2.
  4. ^ Ford, Neal (3 de marzo de 2020). Fundamentos de la arquitectura de software: un enfoque de ingeniería (1.ª ed.). O'Reilly Media. pp. 146–147. ISBN 978-1492043454.
  5. ^ Monolito a microservicios Patrones evolutivos para transformar su monolito . O'Reilly Media. ISBN 9781492047810.
  6. ^ Creación de aplicaciones sin servidor en Knative . O'Reilly Media. ISBN 9781098142049.
  7. ^ "Programas distribuidos". Textos en informática . Londres: Springer London. 2010. pp. 373–406. doi :10.1007/978-1-84882-745-5_11. ISBN 978-1-84882-744-8. ISSN  1868-0941. Los programas distribuidos son descripciones abstractas de sistemas distribuidos. Un programa distribuido consiste en una colección de procesos que funcionan simultáneamente y se comunican mediante el paso explícito de mensajes. Cada proceso puede acceder a un conjunto de variables que son distintas de las variables que pueden ser modificadas por cualquier otro proceso.
  8. ^ Andrews (2000). Dolev (2000). Ghosh (2007), pág. 10.
  9. ^ Magnoni, L. (2015). "Mensajería moderna para sistemas distribuidos (sic)". Journal of Physics: Conference Series . 608 (1): 012038. doi : 10.1088/1742-6596/608/1/012038 . ISSN  1742-6596.
  10. ^ Godfrey (2002).
  11. ^ ab Andrews (2000), pág. 291–292. Dolev (2000), pág. 5.
  12. ^ Lynch (1996), pág. 1.
  13. ^Ab Ghosh (2007), pág. 10.
  14. ^ Andrews (2000), págs. 8-9, 291. Dolev (2000), pág. 5. Ghosh (2007), pág. 3. Lynch (1996), págs. xix, 1. Peleg (2000), pág. xv.
  15. ^ Andrews (2000), pág. 291. Ghosh (2007), pág. 3. Peleg (2000), pág. 4.
  16. Ghosh (2007), págs. 3–4. Peleg (2000), pág. 1.
  17. ^ Ghosh (2007), pág. 4. Peleg (2000), pág. 2.
  18. Ghosh (2007), págs. 4, 8. Lynch (1996), págs. 2-3. Peleg (2000), pág. 4.
  19. ^ Lynch (1996), pág. 2. Peleg (2000), pág. 1.
  20. ^ Ghosh (2007), pág. 7. Lynch (1996), pág. xix, 2. Peleg (2000), pág. 4.
  21. ^ Fundamentos de la arquitectura de software: un enfoque de ingeniería . O'Reilly Media. 2020. ISBN 978-1492043454.
  22. ^ Ghosh (2007), pág. 10. Keidar (2008).
  23. ^ Lynch (1996), pág. xix, 1–2. Peleg (2000), pág. 1.
  24. ^ Peleg (2000), pág. 1.
  25. ^ Papadimitriou (1994), Capítulo 15. Keidar (2008).
  26. ^ Véanse las referencias en la Introducción.
  27. ^ Bentaleb, A.; Yifan, L.; Xin, J.; et al. (2016). "Algoritmos paralelos y distribuidos" (PDF) . Universidad Nacional de Singapur. Archivado (PDF) desde el original el 26 de marzo de 2017 . Consultado el 20 de julio de 2018 .
  28. ^ Andrews (2000), pág. 348.
  29. ^ Andrews (2000), pág. 32.
  30. ^ Peter (2004), La historia del correo electrónico Archivado el 15 de abril de 2009 en Wayback Machine .
  31. ^ Banks, M. (2012). De camino a la Web: La historia secreta de Internet y sus fundadores. Apress. pp. 44–5. ISBN 9781430250746Archivado desde el original el 20 de enero de 2023. Consultado el 20 de julio de 2018 .
  32. ^ Tel, G. (2000). Introducción a los algoritmos distribuidos. Cambridge University Press. pp. 35–36. ISBN 9780521794831Archivado desde el original el 20 de enero de 2023. Consultado el 20 de julio de 2018 .
  33. ^ Ohlídal, M.; Jaroš, J.; Schwarz, J.; et al. (2006). "Diseño evolutivo de esquemas de comunicación OAB y AAB para redes de interconexión". En Rothlauf, F.; Branke, J.; Cagnoni, S. (eds.). Aplicaciones de la computación evolutiva . Springer Science & Business Media. págs. 267–78. ISBN 9783540332374.
  34. ^ "Sistemas informáticos distribuidos y en tiempo real" (PDF) . ISSN  2278-0661. Archivado desde el original (PDF) el 2017-01-10 . Consultado el 2017-01-09 . {{cite journal}}: Requiere citar revista |journal=( ayuda )
  35. ^ Vigna P, Casey MJ. La era de las criptomonedas: cómo Bitcoin y la cadena de bloques están desafiando el orden económico global St. Martin's Press 27 de enero de 2015 ISBN 9781250065636 
  36. ^ Quang Hieu Vu; Mihai Lupu; Beng Chin Ooi (2010). Computación entre pares: principios y aplicaciones . Heidelberg: Springer. pág. 16. ISBN 9783642035135.OCLC 663093862  .
  37. ^ Lind P, Alm M (2006), "Un sistema de química virtual centrado en bases de datos", J Chem Inf Model , 46 (3): 1034–9, doi : 10.1021/ci050360b, PMID  16711722.
  38. ^ Chiu, G (1990). "Un modelo para la asignación óptima de bases de datos en sistemas informáticos distribuidos". Actas. IEEE INFOCOM'90: Novena Conferencia Anual Conjunta de las Sociedades de Computación y Comunicaciones del IEEE .
  39. ^ Elmasri y Navathe (2000), sección 24.1.2.
  40. ^ Andrews (2000), pág. 10–11. Ghosh (2007), pág. 4–6. Lynch (1996), pág. xix, 1. Peleg (2000), pág. xv. Elmasri y Navathe (2000), sección 24.
  41. ^ Haussmann, J. (2019). "Procesamiento paralelo rentable de problemas de estructura irregular en entornos de computación en la nube". Journal of Cluster Computing . 22 (3): 887–909. doi :10.1007/s10586-018-2879-3. S2CID  54447518.
  42. ^ Desarrollo de aplicaciones reactivas . Manning. 2018. ISBN 9781638355816.
  43. ^ Toomarian, NB; Barhen, J.; Gulati, S. (1992). "Redes neuronales para aplicaciones robóticas en tiempo real". En Fijany, A.; Bejczy, A. (eds.). Sistemas de computación paralela para robótica: algoritmos y arquitecturas . World Scientific. pág. 214. ISBN 9789814506175Archivado desde el original el 1 de agosto de 2020. Consultado el 20 de julio de 2018 .
  44. ^ Savage, JE (1998). Modelos de computación: exploración del poder de la computación . Addison Wesley. pág. 209. ISBN 9780201895391.
  45. ^ Cormen, Leiserson y Rivest (1990), sección 30.
  46. ^ Herlihy y Shavit (2008), Capítulos 2–6.
  47. ^ Linch (1996)
  48. ^ Cormen, Leiserson y Rivest (1990), secciones 28 y 29.
  49. ^ abc TULSIRAMJI GAIKWAD-PATIL Facultad de Ingeniería y Tecnología, Nagpur Departamento de Tecnología de la Información Introducción a los sistemas distribuidos[1]
  50. ^ Cole y Vishkin (1986). Cormen, Leiserson y Rivest (1990), Sección 30.5.
  51. ^ Andrews (2000), pág. ix.
  52. ^ Arora y Barak (2009), sección 6.7. Papadimitriou (1994), sección 15.3.
  53. ^ Papadimitriou (1994), sección 15.2.
  54. ^ Lynch (1996), págs. 17-23.
  55. ^ Peleg (2000), Secciones 2.3 y 7. Linial (1992). Naor y Stockmeyer (1995).
  56. ^ Schneider, J.; Wattenhofer, R. (2011). "Comercio de bits, mensajes y complejidad temporal de algoritmos distribuidos". En Peleg, D. (ed.). Computación distribuida . Springer Science & Business Media. págs. 51–65. ISBN 9783642240997Archivado desde el original el 1 de agosto de 2020. Consultado el 20 de julio de 2018 .
  57. ^ Lynch (1996), Secciones 5-7. Ghosh (2007), Capítulo 13.
  58. ^ Lynch (1996), págs. 99-102. Ghosh (2007), págs. 192-193.
  59. ^ Dolev (2000). Ghosh (2007), Capítulo 17.
  60. ^ Lynch (1996), Sección 16. Peleg (2000), Sección 6.
  61. ^ Lynch (1996), Sección 18. Ghosh (2007), Secciones 6.2–6.3.
  62. ^ Ghosh (2007), Sección 6.4.
  63. ^ Fundamentos de aplicaciones intensivas en datos Análisis de datos a gran escala bajo el capó . 2021. ISBN 9781119713012.
  64. ^ ab Haloi, S. (2015). Conceptos básicos de Apache ZooKeeper. Packt Publishing Ltd. págs. ISBN 9781784398323Archivado desde el original el 20 de enero de 2023. Consultado el 20 de julio de 2018 .
  65. ^ LeLann, G. (1977). "Sistemas distribuidos: hacia un enfoque formal". Procesamiento de la información . 77 : 155·160 – vía Elsevier.
  66. ^ RG Gallager , PA Humblet y PM Spira (enero de 1983). "Un algoritmo distribuido para árboles de expansión de peso mínimo" (PDF) . ACM Transactions on Programming Languages ​​and Systems . 5 (1): 66–77. doi :10.1145/357195.357200. S2CID  2758285. Archivado (PDF) desde el original el 26 de septiembre de 2017.{{cite journal}}: CS1 maint: varios nombres: lista de autores ( enlace )
  67. ^ Korach, Ephraim; Kutten, Shay ; Moran, Shlomo (1990). "Una técnica modular para el diseño de algoritmos eficientes de búsqueda de líderes distribuidos" (PDF) . ACM Transactions on Programming Languages ​​and Systems . 12 (1): 84–101. CiteSeerX 10.1.1.139.7342 . doi :10.1145/77606.77610. S2CID  9175968. Archivado (PDF) desde el original el 18 de abril de 2007. 
  68. ^ Hamilton, Howard. «Algoritmos distribuidos». Archivado desde el original el 24 de noviembre de 2012. Consultado el 3 de marzo de 2013 .
  69. ^ "¿Cuáles son los principales problemas no resueltos en los sistemas distribuidos?". cstheory.stackexchange.com . Archivado desde el original el 20 de enero de 2023. Consultado el 16 de marzo de 2018 .
  70. ^ "Cómo los grandes datos y los sistemas distribuidos resuelven los problemas de escalabilidad tradicionales". theserverside.com . Archivado desde el original el 17 de marzo de 2018 . Consultado el 16 de marzo de 2018 .
  71. ^ Svozil, K. (2011). "Indeterminismo y aleatoriedad a través de la física". En Hector, Z. (ed.). Aleatoriedad a través de la computación: algunas respuestas, más preguntas . World Scientific. págs. 112-3. ISBN 9789814462631Archivado desde el original el 1 de agosto de 2020. Consultado el 20 de julio de 2018 .
  72. ^ Papadimitriou (1994), sección 19.3.

Referencias

Libros
Artículos
  • Cole, Richard; Vishkin, Uzi (1986), "Lanzamiento de moneda determinista con aplicaciones para la clasificación óptima de listas paralelas", Información y Control , 70 (1): 32–53, doi : 10.1016/S0019-9958(86)80023-7.
  • Keidar, Idit (2008), "Distributed computing column 32 – The year in review", ACM SIGACT News , 39 (4): 53–54, CiteSeerX  10.1.1.116.1285 , doi :10.1145/1466390.1466402, S2CID  7607391, archivado desde el original el 2014-01-16 , consultado el 2009-08-20.
  • Linial, Nathan (1992), "Localidad en algoritmos de grafos distribuidos", SIAM Journal on Computing , 21 (1): 193–201, CiteSeerX  10.1.1.471.6378 , doi :10.1137/0221015.
  • Naor, Moni ; Stockmeyer, Larry (1995), "¿Qué se puede calcular localmente?" (PDF) , SIAM Journal on Computing , 24 (6): 1259–1277, CiteSeerX  10.1.1.29.669 , doi :10.1137/S0097539793254571, archivado (PDF) desde el original el 2013-01-08.
Sitios web
  • Godfrey, Bill (2002). "Una introducción a la computación distribuida". Archivado desde el original el 2021-05-13 . Consultado el 2021-05-13 .
  • Peter, Ian (2004). "La historia de Internet según Ian Peter". Archivado desde el original el 20 de enero de 2010. Consultado el 4 de agosto de 2009 .

Lectura adicional

Libros
  • Attiya, Hagit y Jennifer Welch (2004), Computación distribuida: fundamentos, simulaciones y temas avanzados , Wiley-Interscience Libro de bolsillo  de la editorial .
  • Christian Cachin; Rachid Guerraoui; Luís Rodrigues (2011), Introducción a la programación distribuida segura y confiable (2. ed.), Springer, Bibcode :2011itra.book.....C, ISBN 978-3-642-15259-7
  • Coulouris, George; et al. (2011), Sistemas distribuidos: conceptos y diseño (quinta edición) , Addison-Wesley Libro de bolsillo  de la editorial .
  • Faber, Jim (1998), Java Distributed Computing, O'Reilly, archivado desde el original el 24 de agosto de 2010 , consultado el 29 de septiembre de 2010: Java Distributed Computing por Jim Faber, 1998 Archivado el 24 de agosto de 2010 en Wayback Machine
  • Garg, Vijay K. (2002), Elementos de computación distribuida , Wiley-IEEE Press Libro de bolsillo  de la editorial .
  • Tel, Gerard (1994), Introducción a los algoritmos distribuidos , Cambridge University Press
  • Chandy, Mani ; et al. (1988), Diseño de programas paralelos , Addison-Wesley ISBN  0201058669
  • Dusseau, Remzi H.; Dusseau, Andrea (2016). Sistemas operativos: tres piezas sencillas, Capítulo 48 Sistemas distribuidos (PDF) . Archivado desde el original (PDF) el 31 de agosto de 2021 . Consultado el 8 de octubre de 2021 .
Artículos
  • Keidar, Idit; Rajsbaum, Sergio, eds. (2000–2009), "Distributed computing column", ACM SIGACT News , archivado desde el original el 2014-01-16 , consultado el 2009-08-16.
  • Birrell, AD; Levin, R.; Schroeder, MD; Needham, RM (abril de 1982). "Grapevine: Un ejercicio en computación distribuida" (PDF) . Comunicaciones de la ACM . 25 (4): 260–274. doi :10.1145/358468.358487. S2CID  16066616. Archivado (PDF) desde el original el 2016-07-30.
Ponencias de congresos
  • Rodríguez, Carlos; Villagra, Marcos; Baran, Benjamin (2007). "Algoritmos de equipos asincrónicos para la satisfacibilidad booleana". 2007 2nd Bio-Inspired Models of Network, Information and Computing Systems . págs. 66–69. doi :10.1109/BIMNICS.2007.4610083. S2CID  15185219.
  • Medios relacionados con Computación distribuida en Wikimedia Commons
Obtenido de "https://es.wikipedia.org/w/index.php?title=Computación_distribuida&oldid=1249313583"