Diferencia entre revisiones de «Computación distribuida»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
SeroBOT (discusión · contribs.)
m Revertidos los cambios de 62.42.26.89 (disc.) a la última edición de SeroBOT
Etiqueta: Reversión
He realizado cambios en algunos apartados ,creando una introducción y una evolución histórica para ello. Ademas de añadir apartados como,computación paralela distribuida, ejemplos de ello y he añadido información sobre los modelos que hay y las ventajas e inconvenientes de la computación distribuida. También se han añadido las referencias usadas para la información añadida.
Etiquetas: posible promocional Eliminación de categorías Edición visual: cambiado
Línea 1: Línea 1:
==Introducción==
La '''computación distribuida''' o '''informática en malla''' (grid) es un modelo para resolver problemas de computación masiva utilizando un gran número de [[Computadora electrónica|ordenador]]es organizados en [[Cluster (informática)|clústeres]] incrustados en una infraestructura de telecomunicaciones distribuida.
Desde el inicio de la era de la computadora moderna (1945), hasta cerca de 1985, sólo se conocía la [[computación centralizada]].
A partir de la mitad de la década de los ochenta aparecen dos avances tecnológicos fundamentales:
*Desarrollo de microprocesadores poderosos y económicos con arquitecturas de 8, 16, 32 y 64 bits.
*Desarrollo de redes de área local ([[Red de área local|LAN]]) de alta velocidad, con posibilidad de conectar cientos de máquinas a velocidades de transferencia de millones de bits por segundo (mb/seg).
Aparecen los sistemas distribuidos, en contraste con los sistemas centralizados.


Un '''sistema distribuido''' es un sistema en el que los componentes [[hardware]] o [[software]]:
== Sistemas distribuidos ==
Un sistema distribuido se define como una colección de computadoras separadas físicamente y conectadas entre sí por una [[red de comunicaciones]]; cada máquina posee sus componentes de hardware y software que el programador percibe como un solo sistema (no necesita saber qué cosas están en qué máquinas). El programador accede a los componentes de software (objetos) remotos, de la misma manera en que accedería a componentes locales, en un grupo de computadoras que usan un [https://es.wiktionary.org/wiki/middleware middleware] entre los que destacan ([[Remote Procedure Call|RPC]]) y [[Simple Object Access Protocol|SOAP]] para conseguir un objetivo.


*Se encuentran en computadores unidos mediante una red
Los sistemas distribuidos deben ser muy confiables, ya que si un componente del sistema se descompone, otro componente debe ser capaz de reemplazarlo. Esto se denomina ''tolerancia a fallos''.
*Se comunican únicamente mediante paso de mensajes
Los S. O. para sistemas distribuidos han tenido importantes desarrollos, pero todavía existe un largo camino por recorrer.
Los usuarios pueden acceder a una gran variedad de recursos computacionales:
*De [[hardware]] y de [[software]].
*Distribuidos entre un gran número de sistemas computacionales conectados.
Características de un sistema distribuido: <ref >{{cite book |author=G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. |title=Distributed Systems: Concepts and Design (5th Ed)|publisher=Addison-Wesley |year=2011|pages=2|isbn= 0-132-14301-1}}</ref>
*[[Concurrencia]]. En una red de computadores, la ejecución concurrente de un programa es la norma.
*Inexistencia de un reloj global. Necesidad de temporalidad para coordinación/sincronización.
*Fallos independientes.
**Por aislamiento de la red (red)
**Por parada de un computador (hardware)
**Por terminación anormal de un programa (software)


==Evolución Histórica==
El tamaño de un [[sistema]] distribuido puede ser muy variado, ya sean decenas de [[host]]s ([[red de área local]]), centenas de hosts ([[red de área metropolitana]]), o miles, o millones de hosts ([[Internet]]); esto se denomina ''escalabilidad''.
El concepto de transmisión de mensajes se originó a finales de la década de los 60. A pesar de que el [[multiprocesador]] de propósito general y las redes de computadoras no existían en ese momento, surgió la idea de organizar un sistema operativo como una colección de procesos de comunicación donde cada proceso tiene una función específica, en la cual, no pueden interferir otros (variables no compartidas). De esta forma, en los años 70 nacieron los primeros sistemas distribuidos generalizados, las redes de área local ([[Red de área local|LAN]]) como [[Ethernet]] <ref>{{cite book |author=Andrews, Gregory R. |title=Foundations of Multithreaded, Parallel, and Distributed Programming|publisher=Addison–Wesley |year=2000 |pages= 348-349||url=https://archive.org/details/foundationsofmul0000andr}}</ref>.
<ref>{{cita web|url=http://www.dei.uc.edu.py/tai2002/SD/discom.htm|título=Sistemas distribuidos <!--Generado por Muro Bot. Puedes ayudar a rellenar esta plantilla-->|fechaacceso=2009|autor=|enlaceautor=|idioma=|urlarchivo=https://web.archive.org/web/20120112091445/http://www.dei.uc.edu.py/tai2002/SD/discom.htm|fechaarchivo=12 de enero de 2012}}</ref>


Este suceso generó inmediatamente una gran cantidad de lenguajes, algoritmos y aplicaciones, pero no fue hasta que los precios de las LANs bajaron, cuando se desarrolló la computación [[cliente/servidor]].
== Características ==
A finales de la década de 1960 se creó ‘Advanced Research Projects Agency Network’ (ARPANET). Esta agencia fue la espina dorsal de Internet hasta 1990, tras finalizar la transición al protocolo [[TCP/IP]], iniciada en 1983. En los primeros años de 1970, nace el correo electrónico [[ARPANET]], el que es considerado como la primera aplicación distribuida a gran escala. <ref>{{cite book |author=Banks, M. |title=On the Way to the Web: The Secret History of the Internet and its Founders|publisher=Apress |year=2000 |pages= 44-5}}</ref>.
# Para cada uno de los usuarios debe ser similar al trabajo en el [[Computación centralizada|Sistema Centralizado]].
# Seguridad interna en el sistema distribuido.
# Se ejecuta en múltiples computadoras.
# Tiene varias copias del mismo sistema operativo o de diferentes sistemas operativos que proveen los mismos servicios.
# Entorno de trabajo cómodo.
# Dependiente de redes (LAN, MAN, WAN, etc.).
# Compatibilidad entre los dispositivos conectados.
# Transparencia (el uso de múltiples procesadores y el acceso remoto debe ser invisible).<ref>{{cita web|url=http://sistemas.itlp.edu.mx/tutoriales/sistsdist1/u1parte4.htm|título=Sistemas Distribuidos <!--Generado por Muro Bot. Puedes ayudar a rellenar esta plantilla-->|fechaacceso=2009|autor=|enlaceautor=|idioma=|urlarchivo=https://web.archive.org/web/20110325083041/http://sistemas.itlp.edu.mx/tutoriales/sistsdist1/u1parte4.htm|fechaarchivo=25 de marzo de 2011}}</ref>
# Interacción entre los equipos.
# Diseño de software compatible con varios usuarios y sistemas operativos.


Durante las dos últimas décadas se han realizado investigaciones en materia de algoritmos distribuidos y se ha avanzado considerablemente en la madurez del campo, especialmente durante los años ochenta. Originalmente la investigación estaba muy orientada hacia aplicaciones de los algoritmos en redes de área amplia ([[WAN]]), pero hoy en día se han desarrollado modelos matemáticos que permiten la aplicación de los resultados y métodos a clases más amplias de entornos distribuidos.
== Objetivo ==
La computación distribuida ha sido diseñada para resolver problemas demasiado grandes para cualquier [[supercomputadora]] y mainframe, mientras se mantiene la flexibilidad de trabajar en múltiples problemas más pequeños. Por lo tanto, la computación en malla (grid) es naturalmente un entorno multiusuario; por ello, las técnicas de autorización segura son esenciales antes de permitir que los recursos informáticos sean controlados por usuarios remotos.


Existen varias revistas y conferencias anuales que se especializan en los resultados relativos a los algoritmos distribuidos y la computación distribuida. La primera conferencia sobre la materia fue el simposio ‘Principles of Distributed Computing’ (PoDC) en 1982, cuyos procedimientos son publicados por ‘Association for Computing Machinery, Inc’. ‘International Workshops on Distributed Algorithms’ (WDAG) se celebró por primera vez en Ottawa en 1985 y después en Amsterdam (1987) y Niza (1989). Desde entonces, sus actas son publicadas por Springer-Verlag en la serie ‘Lecture Notes on Computer Science’. En 1998, el nombre de esta conferencia cambió a Distributed Computing (DISC). Los simposios anuales sobre teoría de computación (‘SToC’) y fundamentos de informática (FoCS) cubren toda las áreas fundamentales de la informática, llevando a menudo documentos sobre computación distribuida. Las actas de ‘SToC’ son publicadas por ‘Association for Computing Machinery, Inc.’ y los de FoCS por el IEEE. ‘The Journal of Parallel and Distributed Computing (JPDC), ‘Distributed Computing’ e ‘Information Processing Letters’ (IPL) publican algoritmos distribuidos regularmente. <ref>{{cite book |author=Tel, G. |title=Introduction to Distributed Algorithms|publisher=Cambridge University Press |year=2000 |pages= 35-36|isbn=9780521794831}}</ref>.
== Clasificación ==
En términos de funcionalidad, las mallas se clasifican en [[malla computacional|computacionales]] (incluyendo [[mallas de barrido de la CPU]]) y en [[mallas de datos]].
Y en los estados son:


Así fue como nacieron los sistemas distribuidos. <ref>{{cite book |author=Maarten van steen, Andrew S Tanenbaum |title=Distributed systems 3rd edition |year=2001 |pages= 1-2}}</ref>.
=== XML ===
Los [[Servicio Web|servicios web]] basados en [[XML]] ofrecen una forma de acceder a diversos servicios/aplicaciones en un entorno distribuido. Recientemente, el mundo de la informática en malla y los servicios web caminan juntos para ofrecer la malla como un servicio web. La arquitectura está definida por la ''Open Grid Services Architecture (OGSA)''. La versión 3.0 de Globus Toolkit, que actualmente se encuentra en fase alfa, será una implementación de referencia acorde con el estándar OGSA.


==Comparación Computación Paralela-Distribuida==
Las mallas ofrecen una forma de resolver grandes retos, como el plegamiento de las proteínas y descubrimiento de medicamentos, modelización financiera, simulación de terremotos, inundaciones y otras catástrofes naturales, modelización del clima/tiempo, etc. Ofrecen un camino para utilizar los recursos de las tecnologías de la información de forma óptima en una organización.
[[File:Types distributed systems.jpg|thumb|right|300px|(a), (b): a sistema distribuido.<br/>(c): a sistema paralelo.]]


<ref>{{cite book |author=Ghosh, Sukumar |title=Distributed Systems – An Algorithmic Approach|publisher=Chapman & Hall/CRC |year=2007 |pages= 10}}</ref>Al igual que ocurre con los sistemas distribuidos, en los [[Computación paralela|sistemas paralelos]] no existe una definición clara. Lo único evidente es que cualquier sistema en el que los eventos puedan ordenarse de manera parcial se consideraría un [[Computación paralela|sistema paralelo]] y por lo tanto, esto incluiría a todos los sistemas distribuidos y sistemas de [[memoria compartida]] con múltiples hilos de control. De esta forma, se podría decir que los sistemas distribuidos forman una subclase de [[Computación paralela|sistemas paralelos]], donde los espacios de estado de los procesos no se superponen.
== Computación de ciclos redundantes ==
El modelo de computación de ciclos redundantes, también conocido como ''computación zombi'', es el empleado por aplicaciones como [http://setiathome.ssl.berkeley.edu Seti@Home], consistente en que un servidor o grupo de servidores distribuyen trabajo de procesamiento a un grupo de computadoras voluntarias a ceder capacidad de procesamiento no utilizada. Básicamente, cuando dejamos nuestro ordenador encendido, pero sin utilizarlo, la capacidad de procesamiento se desperdicia por lo general en algún protector de pantalla, este tipo de procesamiento distribuido utiliza nuestra computadora cuando nosotros no la necesitamos, aprovechando al máximo la capacidad de procesamiento.


Algunos distinguen los [[Computación paralela|sistemas paralelos]] de los sistemas distribuidos en función de sus objetivos: los sistemas paralelos se centran en el aumento del rendimiento, mientras que los sistemas distribuidos se centran en la tolerancia de fallos parciales.
== Clustering ==
Otro método para crear sistemas de supercomputadoras es el ''[[Algoritmo de agrupamiento|clustering]]''. Un [[Cluster de computadores|''cluster'']] o racimo de computadoras consiste en un grupo de computadoras de relativo bajo costo conectadas entre sí mediante un sistema de red de alta velocidad (gigabit de fibra óptica por lo general) y un [[software]] que realiza la distribución de la carga de trabajo entre los equipos. Por lo general, este tipo de sistemas cuentan con un centro de almacenamiento de datos único.
Los clusters tienen la ventaja de ser sistemas redundantes, al estar fuera de servicio el procesador principal el segundo se dispara y actúa como un Fail Over.


Desde otro punto de vista, en la [[computación paralela]], todos los procesadores pueden tener acceso a una [[memoria compartida]] para intercambiar información entre ellos <ref>{{cite book |author=Papadimitriou, Christos H.|title= Computational Complexity|publisher=Addison–Wesley|year=1994|chapter=15}}</ref> y en la computación distribuida, cada procesador tiene su propia memoria privada, donde la información se intercambia pasando mensajes entre los procesadores.
== Grid ==
La [[Computación grid|computación en grid]] o en malla es un nuevo [[paradigma]] de computación distribuida en el cual todos los recursos de un número indeterminado de [[Computadora electrónica|computadora]]s son englobados para ser tratados como un único [[supercomputadora|superordenador]] de manera transparente.


Luego se podría decir que la computación en paralelo es una forma particular de computación distribuida fuertemente acoplada, <ref>{{cite book |author=Peleg, David |title= Distributed Computing: A Locality-Sensitive Approach|publisher=SIAM|year=2000|pages=1}}</ref> y la computación distribuida una forma de [[computación paralela]] débilmente acoplada <ref>{{cite book |author=Ghosh, Sukumar |title=Distributed Systems – An Algorithmic Approach|publisher=Chapman & Hall/CRC |year=2007 |pages= 10}}</ref>.
Estas computadoras englobadas no están conectadas o enlazadas firmemente, es decir no tienen por qué estar en el mismo lugar geográfico. Se puede tomar como ejemplo el proyecto [[SETI@home|SETI@Home]], en el cual trabajan computadoras alrededor de todo el planeta para buscar vida extraterrestre.


La figura que se encuentra a la derecha ilustra la diferencia entre los sistemas distribuidos y paralelos. La figura a. es un esquema de un sistema distribuido, el cual 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. En la figura b) se muestra el mismo sistema distribuido con más detalle: cada computadora tiene su propia memoria local, y la información sólo puede intercambiarse [[Paso de mensajes|pasando mensajes]] de un nodo a otro utilizando los enlaces de comunicación disponibles. En la figura c) se muestra un sistema paralelo en el que cada procesador tiene acceso directo a una [[memoria compartida]].
=== Seguridad ===
El punto de la seguridad es delicado en este tipo de computación distribuida pues las conexiones se hacen de forma remota y no local, entonces suelen surgir problemas para controlar el acceso a los otros nodos. Esto puede aprovecharse para un ataque de [[DoS]], aunque la red no va a dejar de funcionar porque uno falle. Esa es una ventaja de este sistema grid.


==Aplicaciones y Ejemplos==
== Diferencias entre los distintos tipos de computación distribuida ==
<ref>{{cite book |author=Ghosh, Sukumar |title=Distributed Systems – An Algorithmic Approach|publisher=Chapman & Hall/CRC |year=2007 |pages= 4-6}}</ref> Hay numerosos ejemplos de sistemas distribuidos que se utilizan en la vida cotidiana en una variedad de aplicaciones. La mayoría de los sistemas están estructurados como sistemas cliente-servidor, en los que la máquina servidora es la que almacena los datos o recursos, y proporcionan servicio a varios clientes distribuidos geográficamente. Sin embargo, algunas aplicaciones no dependen de un servidor central, es decir, son sistemas peer-to-peer, cuya popularidad va en aumento. Presentamos aquí algunos ejemplos de sistemas distribuidos:


*[[World Wide Web]]: es un servicio popular que funciona en Internet. Permite que los documentos de una computadora se refieran a información textual o no textual almacenada en otras. Esas referencias aparecen en el monitor del usuario, y cuando el usuario selecciona las que desea, el sistema obtiene el artículo de un servidor remoto utilizando los protocolos adecuados y presenta la información en la máquina cliente.
'''SSI ([[Single System Image]])''': en un SSI todas las computadoras vinculadas dependen de un sistema operativo común, diseñado al efecto. En cambio, un grid es [[heterogéneo]], en el sentido en que las computadoras pueden tener diferentes sistemas operativos.
*Servidor de archivos de red: una red de área local consiste en un número de computadoras independientes conectadas a través de enlaces de alta velocidad. En muchas redes de área local, una máquina aislada en la red sirve como servidor de archivos. Así, cuando un usuario accede a un archivo, el sistema operativo dirige la solicitud de la máquina local al servidor de archivos, el cual comprueba la autenticidad de la solicitud y decide si puede conceder el acceso.
*Red bancaria
*Redes [[peer-to-peer]]
*Sistemas de control de procesos: Las plantas industriales utilizan redes de controladores para inspeccionar la producción y el mantenimiento.
*Redes de sensores: La reducción del costo de los equipos y el crecimiento de la tecnología inalámbrica han dado lugar a nuevas oportunidades en el diseño de sistemas distribuidos de propósito específico, como las redes de sensores, donde cada nodo es un procesador equipado con unos sensores, y es capaz de comunicarse de forma inalámbrica con otros. Estas redes pueden ser utilizadas en una amplia clase de problemas: la vigilancia del campo de batalla, la detección de ataques biológicos y químicos, automatización del hogar, etc.
*[[Grid Computing]]: Es una forma de computación distribuida que soporta la programación paralela en una red de computadoras de tamaño variable. En el extremo inferior, una red de computación puede utilizar una fracción de los recursos computacionales, mientras que en el extremo superior, puede combinar millones de computadoras en todo el mundo para trabajar en proyectos extremadamente grandes. El objetivo es resolver problemas computacionales difíciles con mayor rapidez y menor costo que con los métodos convencionales.


Algunos ejemplos de estos sistemas operativos son:


==Modelos==
* [[Amoeba (Informática)|Amoeba]] (inactivo)
<ref >{{cite book |author=G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. |title=Distributed Systems: Concepts and Design (5th Ed)|publisher=Addison-Wesley |year=2011|pages=38|isbn= 0-132-14301-1}}</ref> Los sistemas destinados a ser utilizados en entornos del mundo real deben estar diseñados para funcionar correctamente en la gama más amplia posible de circunstancias y ante posibles dificultades y amenazas. Las propiedades y los problemas de diseño de sistemas distribuidos pueden ser capturados y discutidos mediante el uso de modelos descriptivos. Cada modelo tiene la intención de proporcionar una descripción abstracta y simplificada pero consistente de un aspecto relevante del diseño del sistema distribuido.
* BProc
* DragonFly BSD (meta a largo plazo)
* Genesis
* Kerrighed
* Mosix/OpenMosix
* Nomad (inactivo)
* OpenSSI
* Plurix
* Sprite (inactivo)
* TruCluster


Algunos aspectos relevantes pueden ser: el tipo de [[Nodo (informática)|nodo]] y de [[Red de computadoras|red]], el número de [[Nodo (informática)|nodos]] y la responsabilidad de estos y posibles fallos tanto en la comunicación como entre los [[Nodo (informática)|nodos]]. Se pueden definir tantos modelos como características queramos considerar en el sistema, pero se suele atender a esta clasificación:
'''[[Cluster de computadores]]''': En un clúster todos los nodos se encuentran en el mismo lugar, conectados por una red local para así englobar todos los recursos. En cambio, en un grid no tienen por qué estar en el mismo espacio geográfico; pueden estar en diferentes puntos del mundo.


<ref >{{cite book |author=G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. |title=Distributed Systems: Concepts and Design (5th Ed)|publisher=Addison-Wesley |year=2011|pages=39-40|isbn= 0-132-14301-1}}</ref>Modelos físicos: Representan la forma más explícita para describir un sistema, identifican la composición física del sistema en términos computacionales, principalmente atendiendo a heterogeneidad y escala. Podemos identificar tres generaciones de sistemas distribuidos:
También suele llamarse GRID al resultado obtenido de englobar las máquinas en una supercomputadora; con un clúster solo se busca mejorar el rendimiento de las máquinas englobándolas en una sola.


:Primeros sistemas distribuidos: Surgen los años 70-80 en respuesta a las primeras redes locales ([[Ethernet]]). El objetivo era brindar calidad de servicio (coordinación y sincronización) desde el inicio, constituyendo el punto básico del que partir en el futuro.
== Referencias ==


:Sistemas distribuidos escalables en Internet: Nacen en base al gran crecimiento de internet en los años 90. Se empieza a implantar un entorno de redes interconectadas, más conocido como red de redes ([[Internet]]), dando lugar a un aumento considerable en cuanto al número de nodos y al nivel de heterogeneidad. Se definen estándares abiertos como [[CORBA]] o el [[servicio web]].
{{listaref}}
* Ian Foster, Carl Kesselman (1999). ''La Grilla 2: Planos para una Nueva Infraestructura Informática (The Grid 2: Blueprint for a New Computing Infrastructure)''. Morgan Kaufmann Publishers. ISBN. [https://web.archive.org/web/20021108154248/http://www.mkp.com/Grids/ Website.]
* Fran Berman, Anthony J.G. Hey, Geoffrey Fox (2003). ''La malla informática: haciendo realidad la Infraestructura Global (Grid Computing: Making The Global Infrastructure a Reality''). Wiley. ISBN. [http://www.grid2002.org/ Online version.]


:Sistemas distribuidos contemporáneos: Los sistemas distribuidos han adquirido nuevas características que también se deben incluir al momento de diseñar e implementar un sistema (extensibilidad, seguridad, concurrencia, transparencia...etc). La aparición de la computación móvil, la [[computación ubicua]] o la [[computación en la nube]] y las arquitecturas de [[Cluster (informatica)|clusters]] hacen necesaria la implementación de elementos computacionales más complejos sujetos a un control centralizado, ofreciendo una amplia variedad de aplicaciones y servicios acorde a su demanda (miles de nodos).
== Véase también ==
* [[BOINC]] / [[Data Distribution Service]]
* [[Anexo:Proyectos que usan BOINC]]
* [[Supercomputadora]]
* [[Programación distribuida]]
* [[Sistema de archivos distribuido]]
* [[Remote Procedure Call|Llamada a procedimiento remoto]]
* [[DCE]]
* [[Andrew S. Tanenbaum]]
* [[Computación grid]]
* [[Sun Grid Engine]]
* [[World Community Grid]]


<ref >{{cite book |author=G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. |title=Distributed Systems: Concepts and Design (5th Ed)|publisher=Addison-Wesley |year=2011|pages=40-42|isbn= 0-132-14301-1}}</ref>Modelos arquitectónicos: El objetivo general de este tipo de modelo es garantizar el reparto de responsabilidades entre componentes del sistema distribuido y la ubicación de dichos componentes. Las principales preocupaciones son determinar la relación entre procesos y hacer al sistema confiable, adaptable y rentable.
{{Control de autoridades}}

[[Categoría:Computación distribuida| ]]
:<ref >{{cite book |author=G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. |title=Distributed Systems: Concepts and Design (5th Ed)|publisher=Addison-Wesley |year=2011|pages=46-51|isbn= 0-132-14301-1}}</ref>Cliente-Servidor: modelo de diseño de software en el que las tareas se reparten entre los proveedores de recursos o servicios, llamados servidores, y los demandantes, llamados clientes. Los clientes realizan peticiones al servidor, otro programa, que le da una respuesta. Pero también un servidor puede ser cliente de otros servidores. Un buen ejemplo sería un servidor web, que es un cliente de servidor [[DNS]].

:Una buena práctica es la replicación para aumentar las prestaciones y disponibilidad, más conocido como [[Espejo (Internet)|servidor espejo]]. Otra opción pueden ser los [[Proxy|servidores proxy]], que usan cachés con los datos más recientes solicitados.
:Derivados: código móvil, agente móvil, computadores en red, clientes ligeros o [[Cloud Computing]].

[[File:Cliente-servidor.png|thumb|Esquema Cliente-Servidor|centro|400px ]]

:[[Peer-to-peer]]: Sistemas de igual a igual, es decir, todos los elementos interconectados tienen el mismo papel. Se trata de un servicio totalmente descentralizado y auto-organizado, facilitando un equilibrio dinámico de las cargas (de almacenamiento y de procesamiento) entre las computadoras del sistema.

[[File:Peer-to-peer.png|thumb|Esquema Peer-to-peer|centro|400px]]

<ref >{{cite book |author=G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. |title=Distributed Systems: Concepts and Design (5th Ed)|publisher=Addison-Wesley |year=2011|pages=61-64|isbn= 0-132-14301-1}}</ref>Modelos fundamentales: Todos los modelos anteriores comparten un diseño y un conjunto de requisitos necesarios para proporcionar confiabilidad y seguridad a los recursos del sistema.
Un modelo fundamental toma una perspectiva abstracta, de acuerdo al análisis de aspectos individuales del sistema distribuido; debe contener sólo lo esencial a tener en cuenta para comprender y razonar sobre algunos aspectos de un comportamiento del sistema.
:Modelos de interacción: analizan la estructura y secuencia de la comunicación entre los elementos del sistema. Cobran importancia las prestaciones del canal de comunicación ([[Latencia]], [[Ancho de banda (informática)|AB]], fluctuación), haciendo imposible predecir el retraso con el que puede llegar un mensaje. En otras palabras, no hay un tiempo global a todo el sistema, la ejecución es “no determinista”. Cada computador tiene su propio reloj interno, lo que conlleva tener que sincronizar los relojes locales de todas las máquinas que componen el sistema distribuido. Para ello existen diferentes mecanismos ([[NTP]], receptores [[GPS]], mecanismos de ordenación de eventos).

:Existen dos tipos de modelos de interacción:

::<ref >{{cite book |author=G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. |title=Distributed Systems: Concepts and Design (5th Ed)|publisher=Addison-Wesley |year=2011|pages=64|isbn= 0-132-14301-1}}</ref>Síncrono: Existen límites conocidos para los tiempos de ejecución de las etapas de los procesos, en el tiempo necesario al transmitir mensajes o en las tasas de deriva de los relojes. Es decir, se pueden establecer límites para aproximarse al comportamiento real del sistema, pero en la práctica, esto no es posible y por lo general, se utilizan estimaciones (timeout).

::<ref >{{cite book |author=G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. |title=Distributed Systems: Concepts and Design (5th Ed)|publisher=Addison-Wesley |year=2011|pages=65|isbn= 0-132-14301-1}}</ref>Asíncrono: No existen limitaciones respecto a los modelos sincrónicos. La mayoría de los sistemas distribuidos son asíncronos.

:<ref >{{cite book |author=G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. |title=Distributed Systems: Concepts and Design (5th Ed)|publisher=Addison-Wesley |year=2011|pages=67|isbn= 0-132-14301-1}}</ref>Modelos de fallos: estudio e identificación de las posibles causas de fallo. Pueden clasificarse según la entidad, dando lugar a fallos de proceso o fallos de comunicación, o según el problema, dando lugar a fallos por omisión o arbitrarios:
::Fallos por omisión en procesos: Fallos del procesamiento, fallo-parada (el proceso para y permanece parado) o detección del fallo por timeout, el proceso no responde (solo en modelos síncronos)
::Fallos por omisión en comunicaciones: fallos en el envío (no se coloca el mensaje en el búfer) o en la recepción (el proceso no recibe el mensaje).

[[File:FalloOmision.png|thumb|Fallo por omisión en comunicaciones.|centro|400px]]

::Fallos arbitrarios o bizantinos: en el proceso (omisiones, se realizan pasos incorrectos en el procesamiento o se omiten arbitrariamente la respuesta a mensajes) o en canales de comunicación (corrupción de mensajes, reparto de mensajes inexistentes o duplicado del reparto de mensajes auténticos).
::Enmascaramiento de fallos: algunos fallos detectados pueden ocultarse o atenuarse. Por ejemplo, [[checksum]] (de fallo arbitrario a fallo por omisión).

:<ref >{{cite book |author=G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. |title=Distributed Systems: Concepts and Design (5th Ed)|publisher=Addison-Wesley |year=2011|pages=71-73|isbn= 0-132-14301-1}}</ref>Modelos de seguridad: La seguridad de un sistema distribuido se puede lograr asegurando los procesos y canales utilizados para sus interacciones y protegiendo los objetos que encapsular contra el acceso no autorizado. Estos modelos proporcionan la base para construir un sistema seguro atendiendo a recursos de todo tipo. Para ello, es clave postular un enemigo que es capaz de enviar cualquier mensaje a cualquier proceso y leer o copiar cualquier mensaje enviado entre un par de procesos.

[[File:AtaqueEnemigo.png|thumb|Ejemplo de ataque|centro|400px]]

Por lo tanto, para que pueda afirmarse que existe una comunicación fiable entre dos procesos debe asegurarse su integridad y su validez.
*Clasificación en función de la estructura de la red y de la memoria.
Cuando hablamos de modelos en un sistema distribuido, nos referimos principalmente al hecho de automatizar tareas, usando un computador, del tipo pregunta-respuesta, es decir, que cuando realicemos una pregunta al computador, este nos debe contestar con una respuesta apropiada. En la [[informática teórica]], este proceso se conoce como [[Problema computacional|problemas computacionales]].
Formalmente, un problema computacional consiste en instancias junto con una solución a cada una de ellas. Las instancias se pueden traducir como preguntas que nosotros hacemos al computador y las soluciones como las respuestas del mismo a nuestras preguntas.
Teóricamente, la informática teórica busca encontrar la relación entre problemas que puedan resolverse mediante un computador ([[teoría de la computabilidad]]) y la eficiencia al realizarlo (teoría de la [[complejidad computacional]]).
Comúnmente, hay tres puntos de vista:
*Algoritmos paralelos en el modelo de memoria compartida.
Un algoritmo paralelo define múltiples operaciones para ser ejecutadas en cada paso. Esto incluye comunicación/coordinación entre las unidades de procesamiento.
Un ejemplo claro para este tipo de modelos sería el modelo de máquinas de acceso aleatorio paralelo ([[PRAM]]) <ref >{{cite article |author=Thomas Ropars |title=Parallel algorithms in shared memory|pages=5|url=https://tropars.github.io/downloads/lectures/PAP/pap_3_shared_memory_algos.pdf}}</ref>.

[[File:ParalelSharedMemoryAlgorithmModel.png|thumb|centro|400px]]

::- Memoria RAM paralela
::- Memoria central compartida
::- Conjunto de unidades de procesamiento (PUs)
::- El número de unidades de procesamiento y el tamaño de la memoria es ilimitado.

Detalles del modelo PRAM
::- Ejecución lock-step
::Es un ciclo de 3 fases:
:# Se leen las celdas de memoria.
:# Se ejecutan los cálculos y computaciones locales.
:# Escribir en la memoria compartida.
::Todas las unidades de procesamiento ejecutan estos pasos sincrónicamente.
:::No hay necesidad de una sincronización explícita.
:Acerca de los accesos simultáneos a la memoria:
::3 Modelos PRAM
:::CREW: Lectura simultánea, escritura exclusiva
:::CRCW: Lectura simultánea, escritura simultánea
:::EREW: Lectura exclusiva, escritura exclusiva

Hay mucha más información acerca de este tipo de algoritmo de una forma más resumida en los siguientes libros. <ref >{{cite book |author=Herlihy & Shavit. |title=The Art of Multiprocessor Programming (1th Ed).|publisher=Addison-Wesley |year=2008|chapter=2-6|isbn= 978-0-12-370591-4}}</ref> <ref >{{cite book |author=Lynch, Nancy A. |title=Distributed Algorithms|publisher=Morgan Kaufmann |year=1996|isbn= 978-1-55860-348-6.}}</ref>

*Algoritmos paralelos en el modelo de paso de mensaje.

[[File:ParalelPassMessageAlgorithmModel.png|thumb|centro|400px]]

::-En este algoritmo el programador imagina varios procesadores, cada uno con su propio espacio de memoria, y escribe un programa para ejecutarlo en cada procesador. Hasta ahora, todo bien, pero la programación paralela por definición requiere la cooperación entre los procesadores para resolver una tarea, que requiere algún medio de comunicación. El punto principal del paradigma de paso de mensajes es que los procesos se comunican enviando mensajes unos a otros. Por lo tanto, el modelo de paso de mensajes no tiene el concepto de un espacio de memoria compartido o de que los procesadores acceden directamente a la memoria de cada uno, cualquier otra cosa que no sea el paso de mensajes queda fuera del alcance del paradigma.
::-En lo que respecta a los programas que se ejecutan en los procesadores individuales, las operaciones de paso de mensajes son sólo llamadas a subrutinas.
::-Se utilizan modelos como los [[Circuitos Logicos|circuitos booleanos]] y las [[Red de ordenamiento|redes de clasificación]].<ref >{{cite book |author=Cormen, Leiserson & Rivest |title=Introduction to algorithms|publisher=MIT Press |year=1990|pages=Sections 28 and 29|isbn=978-0-262-03141-7}}</ref> Un circuito booleano puede ser visto como una red de ordenadores: cada puerta es un ordenador que ejecuta un programa informático extremadamente simple. Del mismo modo, una red de clasificación puede ser vista como una red informática: cada comparador es un ordenador.

*Algoritmos distribuidos en el modelo de paso de mensajes.<ref >{{cite book |author=Raynal, Michel |title=Distributed Algorithms for Message-Passing Systems |year=2013}}</ref>
::El diseñador del algoritmo sólo elige el programa de la computadora. Todas las computadoras 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 estado finito por nodo.


==Ventajas e inconvenientes==

=== Ventajas <ref>{{cite book |author=Ghosh, Sukumar |title=Distributed Systems – An Algorithmic Approach|publisher=Chapman & Hall/CRC |year=2007 |pages= 17|isbn=978-1-58488-564-1}}</ref> ===

'''Ambiente geográficamente distribuido''': En primer lugar, en muchas situaciones, el entorno informático en sí mismo está geográficamente distribuido. Como ejemplo, consideremos una red bancaria. Se supone que cada banco debe mantener las cuentas de sus clientes. Además, los bancos se comunican entre sí para monitorear las transacciones interbancarias, o registrar las transferencias de fondos de los cajeros automáticos geográficamente dispersos. Otro ejemplo común de un entorno informático geográficamente distribuido es la Internet, que ha influido profundamente en nuestra forma de vida. La movilidad de los usuarios ha añadido una nueva dimensión a la distribución geográfica.

'''Speed up''': En segundo lugar, existe la necesidad de acelerar los cálculos. La velocidad de cómputo en los uniprocesadores tradicionales se está acercando rápidamente al límite físico. Mientras que los [[Superescalar|procesadores superescalares]] y VLIW estiran el límite introduciendo un paralelismo a nivel arquitectónico (cuestión de la instrucción), las técnicas no se escalan mucho más allá de un cierto nivel. Una técnica alternativa para obtener más potencia de cálculo es utilizar procesadores múltiples. Dividir un problema entero en subproblemas más pequeños y asignar estos subproblemas a procesadores físicos separados que puedan funcionar simultáneamente es un método potencialmente atractivo para aumentar la velocidad de cálculo. Además, este enfoque promueve una mejor escalabilidad, en la que los usuarios pueden aumentar progresivamente la potencia de cálculo adquiriendo elementos o recursos de procesamiento adicionales. A menudo, esto es más sencillo y económico que invertir en un único uniprocesador superrápido.

'''Compartir recursos''': En tercer lugar, existe la necesidad de compartir los recursos. El usuario de la computadora A puede querer usar una impresora láser conectada con la computadora B, o el usuario de la computadora B puede necesitar un poco de espacio extra en el disco disponible en la computadora C para almacenar un archivo grande. En una red de estaciones de trabajo, es posible que la estación de trabajo A quiera utilizar la potencia de cálculo en reposo de las estaciones de trabajo B y C para aumentar la velocidad de un determinado cálculo. Las [[bases de datos]] distribuidas son buenos ejemplos del intercambio de recursos de [[software]], en los que una gran [[base de datos]] puede almacenarse en varias máquinas anfitrionas y actualizarse o recuperarse sistemáticamente mediante una serie de procesos de [[Agente (software)|agentes]].

'''Tolerancia a fallos''': Cuarto, los poderosos uniprocesadores, o sistemas de computación construidos alrededor de un solo nodo central son propensos a un completo colapso cuando el procesador falla. Muchos usuarios consideran que esto es arriesgado. Sin embargo, están dispuestos a transigir con una degradación parcial del rendimiento del sistema, cuando un fallo paraliza una fracción de los muchos elementos de procesamiento o enlaces de un sistema distribuido. Esta es la esencia de la degradación gradual. La otra cara de este enfoque es que, al incorporar elementos de procesamiento redundantes en un sistema distribuido, se puede aumentar potencialmente la fiabilidad o la disponibilidad del sistema. Por ejemplo, en un sistema que tiene triple redundancia modular (TMR), se utilizan tres unidades funcionales idénticas para realizar el mismo cómputo, y el resultado correcto se determina por mayoría de votos. En otros sistemas distribuidos tolerantes a fallos, los procesadores se comprueban mutuamente en puntos de control predefinidos, lo que permite la detección automática de fallos, el diagnóstico y la eventual recuperación. Así pues, un sistema distribuido ofrece una excelente oportunidad para incorporar la tolerancia a fallos y la degradación grácil.
===Inconvenientes <ref>{{cite book |author=Kamal Sheel Mishra, Anil Kumar Tripathi |title=Some Issues, Challenges and Problems of Distributed Software System|publisher=Department of Computer Science & Engineering, Indian Institute of Technology(Banaras Hinhu University) Varanasi, India.|pages= 2-4}}</ref>===

'''Escalabilidad''': El sistema debe diseñarse de tal manera que la capacidad pueda ser aumentada con la creciente demanda del sistema.

'''Heterogeneidad''': La infraestructura de comunicaciones consiste en canales de diferentes capacidades.

'''Gestión de los recursos''': En los sistemas distribuidos, los recursos se encuentran en diferentes lugares. El enrutamiento es un problema en la capa de red y en la capa de aplicación.

'''Seguridad y privacidad''': Dado que los sistemas distribuidos tratan con datos e información sensible, se deben tener fuertes medidas de seguridad y privacidad. La protección de los activos del sistema distribuido así como los compuestos de nivel superior de estos recursos son cuestiones importantes en el sistema distribuido.

'''Transparencia''': La transparencia significa hasta qué punto el sistema distribuido debe aparecer para el usuario como un sistema único. El sistema distribuido debe ser diseñado para ocultar en mayor medida la complejidad del sistema.

'''Apertura''': La apertura significa hasta qué punto un sistema es diseñado utilizando protocolos estándar para apoyar la interoperabilidad. Para lograr esto, el sistema distribuido debe tener interfaces bien definidas.

'''Sincronización''': Uno de los principales problemas es la sincronización de los cálculos consistentes en miles de componentes. Métodos actuales de sincronización como los semáforos, los monitores, las barreras, la llamada a procedimientos remotos, la invocación de métodos de objetos y el paso de mensajes, no escalan bien.

'''Interbloqueo y condiciones de carrera''': El interbloqueo y las condiciones de carrera son otras grandes cuestiones en el sistema distribuido, especialmente en el contexto de las pruebas. Se convierte en un tema más importante especialmente en el entorno de multiprocesadores de memoria compartida.

==Notas==
{{Reflist|30em}}

==Referencias==
; Libros

* {{citation
| last=Andrews
| first=Gregory R.
| title=Foundations of Multithreaded, Parallel, and Distributed Programming
| publisher=[[Addison–Wesley]]
| year=2000
| isbn=978-0-201-35752-3
| url=https://archive.org/details/foundationsofmul0000andr
}}. <!--{{harvtxt|Andrews|2000}}-->

* {{citation
| last1=Cormen | first1=Thomas H. | authorlink1=Thomas H. Cormen
| last2=Leiserson | first2=Charles E. | authorlink2=Charles E. Leiserson
| last3=Rivest | first3=Ronald L. | authorlink3=Ron Rivest
| title=Introduction to Algorithms
| publisher=[[MIT Press]]
| year=1990
| edition=1st
| isbn=978-0-262-03141-7}}. <!--{{harvtxt|Cormen|Leiserson|Rivest|1990}}-->
* {{citation
| last=Ghosh | first=Sukumar
| title=Distributed Systems – An Algorithmic Approach
| publisher=Chapman & Hall/CRC
| year=2007
| isbn=978-1-58488-564-1
}}. <!--{{harvtxt|Ghosh|2007}}-->
* {{citation
| last=Lynch
| first=Nancy A.
| authorlink=Nancy Lynch
| title=Distributed Algorithms
| publisher=[[Morgan Kaufmann Publishers|Morgan Kaufmann]]
| year=1996
| isbn=978-1-55860-348-6
| url=https://archive.org/details/distributedalgor0000lync
}}. <!--{{harvtxt|Lynch|1996}}-->
* {{citation
| last1=Herlihy| first1=Maurice P. | authorlink1=Maurice Herlihy
| last2=Shavit | first2=Nir N. | authorlink2=Nir Shavit
| title=The Art of Multiprocessor Programming
| publisher=[[Morgan Kaufmann Publishers|Morgan Kaufmann]]
| year=2008
| isbn=978-0-12-370591-4
}}. <!--{{harvtxt|Herlihy|Shavit|2008}}-->
* {{citation
| last=Papadimitriou | first=Christos H. | authorlink=Christos Papadimitriou
| title=Computational Complexity
| publisher=[[Addison–Wesley]]
| year=1994
| isbn=978-0-201-53082-7
}}. <!--{{harvtxt|Papadimitriou|1994}}-->
* {{citation
| last=Peleg
| first=David
| authorlink=David Peleg (scientist)
| title=Distributed Computing: A Locality-Sensitive Approach
| publisher=[[Society for Industrial and Applied Mathematics|SIAM]]
| year=2000
| isbn=978-0-89871-464-7
| url=http://www.ec-securehost.com/SIAM/DT05.html
| access-date=2009-07-16
| archive-url=https://web.archive.org/web/20090806070332/http://www.ec-securehost.com/SIAM/DT05.html
| archive-date=2009-08-06
}}. <!--{{harvtxt|Peleg|2000}}-->

==Lectura suplementaria==
;Libros
* {{Citation|author=Andrew S. Tanenbaum, Maarten van Steen| title=Distributed Systems: Principles and Paradigms|year=2001}} {{ISBN|9780132392273}}.
* {{Citation|author=Banks, M| title=On the Way to the Web: The Secret History of the Internet and its Founders|publisher =Apress|year=2012}} {{ISBN|9783642381232}}.
* {{Citation|author=Coulouris, George | title=Distributed Systems: Concepts and Design (5th Edition)|publisher = Addison-Wesley|year=2011|display-authors=etal}} {{ISBN|0-132-14301-1}}.
* {{Citation|author=Kamal Sheel Mishra, Anil Kumar Tripathi | title=Some Issues, Challenges and Problems of Distributed Software System|publisher = Department of Computer Science & Engineering, Indian Institute of Technology(Banaras Hinhu University)}} {{ISBN|0975-9646}}.
* {{Citation|author=Raynal, Michel | title=Distributed Algorithms for Message-Passing Systems|year=2013}} {{ISBN|9783642381232}}.
* {{citation|first=Gerard|last=Tel |title=Introduction to Distributed Algorithms| publisher=Cambridge University Press| year=1994}} {{ISBN|9780521794831}}.

Revisión del 09:23 6 may 2020

Introducción

Desde el inicio de la era de la computadora moderna (1945), hasta cerca de 1985, sólo se conocía la computación centralizada. A partir de la mitad de la década de los ochenta aparecen dos avances tecnológicos fundamentales:

  • Desarrollo de microprocesadores poderosos y económicos con arquitecturas de 8, 16, 32 y 64 bits.
  • Desarrollo de redes de área local (LAN) de alta velocidad, con posibilidad de conectar cientos de máquinas a velocidades de transferencia de millones de bits por segundo (mb/seg).

Aparecen los sistemas distribuidos, en contraste con los sistemas centralizados.

Un sistema distribuido es un sistema en el que los componentes hardware o software:

  • Se encuentran en computadores unidos mediante una red
  • Se comunican únicamente mediante paso de mensajes

Los S. O. para sistemas distribuidos han tenido importantes desarrollos, pero todavía existe un largo camino por recorrer. Los usuarios pueden acceder a una gran variedad de recursos computacionales:

  • De hardware y de software.
  • Distribuidos entre un gran número de sistemas computacionales conectados.

Características de un sistema distribuido: [1]

  • Concurrencia. En una red de computadores, la ejecución concurrente de un programa es la norma.
  • Inexistencia de un reloj global. Necesidad de temporalidad para coordinación/sincronización.
  • Fallos independientes.
    • Por aislamiento de la red (red)
    • Por parada de un computador (hardware)
    • Por terminación anormal de un programa (software)

Evolución Histórica

El concepto de transmisión de mensajes se originó a finales de la década de los 60. A pesar de que el multiprocesador de propósito general y las redes de computadoras no existían en ese momento, surgió la idea de organizar un sistema operativo como una colección de procesos de comunicación donde cada proceso tiene una función específica, en la cual, no pueden interferir otros (variables no compartidas). De esta forma, en los años 70 nacieron los primeros sistemas distribuidos generalizados, las redes de área local (LAN) como Ethernet [2]​.

Este suceso generó inmediatamente una gran cantidad de lenguajes, algoritmos y aplicaciones, pero no fue hasta que los precios de las LANs bajaron, cuando se desarrolló la computación cliente/servidor. A finales de la década de 1960 se creó ‘Advanced Research Projects Agency Network’ (ARPANET). Esta agencia fue la espina dorsal de Internet hasta 1990, tras finalizar la transición al protocolo TCP/IP, iniciada en 1983. En los primeros años de 1970, nace el correo electrónico ARPANET, el que es considerado como la primera aplicación distribuida a gran escala. [3]​.

Durante las dos últimas décadas se han realizado investigaciones en materia de algoritmos distribuidos y se ha avanzado considerablemente en la madurez del campo, especialmente durante los años ochenta. Originalmente la investigación estaba muy orientada hacia aplicaciones de los algoritmos en redes de área amplia (WAN), pero hoy en día se han desarrollado modelos matemáticos que permiten la aplicación de los resultados y métodos a clases más amplias de entornos distribuidos.

Existen varias revistas y conferencias anuales que se especializan en los resultados relativos a los algoritmos distribuidos y la computación distribuida. La primera conferencia sobre la materia fue el simposio ‘Principles of Distributed Computing’ (PoDC) en 1982, cuyos procedimientos son publicados por ‘Association for Computing Machinery, Inc’. ‘International Workshops on Distributed Algorithms’ (WDAG) se celebró por primera vez en Ottawa en 1985 y después en Amsterdam (1987) y Niza (1989). Desde entonces, sus actas son publicadas por Springer-Verlag en la serie ‘Lecture Notes on Computer Science’. En 1998, el nombre de esta conferencia cambió a Distributed Computing (DISC). Los simposios anuales sobre teoría de computación (‘SToC’) y fundamentos de informática (FoCS) cubren toda las áreas fundamentales de la informática, llevando a menudo documentos sobre computación distribuida. Las actas de ‘SToC’ son publicadas por ‘Association for Computing Machinery, Inc.’ y los de FoCS por el IEEE. ‘The Journal of Parallel and Distributed Computing (JPDC), ‘Distributed Computing’ e ‘Information Processing Letters’ (IPL) publican algoritmos distribuidos regularmente. [4]​.

Así fue como nacieron los sistemas distribuidos. [5]​.

Comparación Computación Paralela-Distribuida

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

[6]​Al igual que ocurre con los sistemas distribuidos, en los sistemas paralelos no existe una definición clara. Lo único evidente es que cualquier sistema en el que los eventos puedan ordenarse de manera parcial se consideraría un sistema paralelo y por lo tanto, esto incluiría a todos los sistemas distribuidos y sistemas de memoria compartida con múltiples hilos de control. De esta forma, se podría decir que los sistemas distribuidos forman una subclase de sistemas paralelos, donde los espacios de estado de los procesos no se superponen.

Algunos distinguen los sistemas paralelos de los sistemas distribuidos en función de sus objetivos: los sistemas paralelos se centran en el aumento del rendimiento, mientras que los sistemas distribuidos se centran en la tolerancia de fallos parciales.

Desde otro punto de vista, en la computación paralela, todos los procesadores pueden tener acceso a una memoria compartida para intercambiar información entre ellos [7]​ y en la computación distribuida, cada procesador tiene su propia memoria privada, donde la información se intercambia pasando mensajes entre los procesadores.

Luego se podría decir que la computación en paralelo es una forma particular de computación distribuida fuertemente acoplada, [8]​ y la computación distribuida una forma de computación paralela débilmente acoplada [9]​.

La figura que se encuentra a la derecha ilustra la diferencia entre los sistemas distribuidos y paralelos. La figura a. es un esquema de un sistema distribuido, el cual 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. En la figura b) se muestra el mismo sistema distribuido con más detalle: cada computadora tiene su propia memoria local, y la información sólo puede intercambiarse pasando mensajes de un nodo a otro utilizando los enlaces de comunicación disponibles. En la figura c) se muestra un sistema paralelo en el que cada procesador tiene acceso directo a una memoria compartida.

Aplicaciones y Ejemplos

[10]​ Hay numerosos ejemplos de sistemas distribuidos que se utilizan en la vida cotidiana en una variedad de aplicaciones. La mayoría de los sistemas están estructurados como sistemas cliente-servidor, en los que la máquina servidora es la que almacena los datos o recursos, y proporcionan servicio a varios clientes distribuidos geográficamente. Sin embargo, algunas aplicaciones no dependen de un servidor central, es decir, son sistemas peer-to-peer, cuya popularidad va en aumento. Presentamos aquí algunos ejemplos de sistemas distribuidos:

  • World Wide Web: es un servicio popular que funciona en Internet. Permite que los documentos de una computadora se refieran a información textual o no textual almacenada en otras. Esas referencias aparecen en el monitor del usuario, y cuando el usuario selecciona las que desea, el sistema obtiene el artículo de un servidor remoto utilizando los protocolos adecuados y presenta la información en la máquina cliente.
  • Servidor de archivos de red: una red de área local consiste en un número de computadoras independientes conectadas a través de enlaces de alta velocidad. En muchas redes de área local, una máquina aislada en la red sirve como servidor de archivos. Así, cuando un usuario accede a un archivo, el sistema operativo dirige la solicitud de la máquina local al servidor de archivos, el cual comprueba la autenticidad de la solicitud y decide si puede conceder el acceso.
  • Red bancaria
  • Redes peer-to-peer
  • Sistemas de control de procesos: Las plantas industriales utilizan redes de controladores para inspeccionar la producción y el mantenimiento.
  • Redes de sensores: La reducción del costo de los equipos y el crecimiento de la tecnología inalámbrica han dado lugar a nuevas oportunidades en el diseño de sistemas distribuidos de propósito específico, como las redes de sensores, donde cada nodo es un procesador equipado con unos sensores, y es capaz de comunicarse de forma inalámbrica con otros. Estas redes pueden ser utilizadas en una amplia clase de problemas: la vigilancia del campo de batalla, la detección de ataques biológicos y químicos, automatización del hogar, etc.
  • Grid Computing: Es una forma de computación distribuida que soporta la programación paralela en una red de computadoras de tamaño variable. En el extremo inferior, una red de computación puede utilizar una fracción de los recursos computacionales, mientras que en el extremo superior, puede combinar millones de computadoras en todo el mundo para trabajar en proyectos extremadamente grandes. El objetivo es resolver problemas computacionales difíciles con mayor rapidez y menor costo que con los métodos convencionales.


Modelos

[11]​ Los sistemas destinados a ser utilizados en entornos del mundo real deben estar diseñados para funcionar correctamente en la gama más amplia posible de circunstancias y ante posibles dificultades y amenazas. Las propiedades y los problemas de diseño de sistemas distribuidos pueden ser capturados y discutidos mediante el uso de modelos descriptivos. Cada modelo tiene la intención de proporcionar una descripción abstracta y simplificada pero consistente de un aspecto relevante del diseño del sistema distribuido.

Algunos aspectos relevantes pueden ser: el tipo de nodo y de red, el número de nodos y la responsabilidad de estos y posibles fallos tanto en la comunicación como entre los nodos. Se pueden definir tantos modelos como características queramos considerar en el sistema, pero se suele atender a esta clasificación:

[12]​Modelos físicos: Representan la forma más explícita para describir un sistema, identifican la composición física del sistema en términos computacionales, principalmente atendiendo a heterogeneidad y escala. Podemos identificar tres generaciones de sistemas distribuidos:

Primeros sistemas distribuidos: Surgen los años 70-80 en respuesta a las primeras redes locales (Ethernet). El objetivo era brindar calidad de servicio (coordinación y sincronización) desde el inicio, constituyendo el punto básico del que partir en el futuro.
Sistemas distribuidos escalables en Internet: Nacen en base al gran crecimiento de internet en los años 90. Se empieza a implantar un entorno de redes interconectadas, más conocido como red de redes (Internet), dando lugar a un aumento considerable en cuanto al número de nodos y al nivel de heterogeneidad. Se definen estándares abiertos como CORBA o el servicio web.
Sistemas distribuidos contemporáneos: Los sistemas distribuidos han adquirido nuevas características que también se deben incluir al momento de diseñar e implementar un sistema (extensibilidad, seguridad, concurrencia, transparencia...etc). La aparición de la computación móvil, la computación ubicua o la computación en la nube y las arquitecturas de clusters hacen necesaria la implementación de elementos computacionales más complejos sujetos a un control centralizado, ofreciendo una amplia variedad de aplicaciones y servicios acorde a su demanda (miles de nodos).

[13]​Modelos arquitectónicos: El objetivo general de este tipo de modelo es garantizar el reparto de responsabilidades entre componentes del sistema distribuido y la ubicación de dichos componentes. Las principales preocupaciones son determinar la relación entre procesos y hacer al sistema confiable, adaptable y rentable.

[14]​Cliente-Servidor: modelo de diseño de software en el que las tareas se reparten entre los proveedores de recursos o servicios, llamados servidores, y los demandantes, llamados clientes. Los clientes realizan peticiones al servidor, otro programa, que le da una respuesta. Pero también un servidor puede ser cliente de otros servidores. Un buen ejemplo sería un servidor web, que es un cliente de servidor DNS.
Una buena práctica es la replicación para aumentar las prestaciones y disponibilidad, más conocido como servidor espejo. Otra opción pueden ser los servidores proxy, que usan cachés con los datos más recientes solicitados.
Derivados: código móvil, agente móvil, computadores en red, clientes ligeros o Cloud Computing.
Esquema Cliente-Servidor
Peer-to-peer: Sistemas de igual a igual, es decir, todos los elementos interconectados tienen el mismo papel. Se trata de un servicio totalmente descentralizado y auto-organizado, facilitando un equilibrio dinámico de las cargas (de almacenamiento y de procesamiento) entre las computadoras del sistema.
Esquema Peer-to-peer

[15]​Modelos fundamentales: Todos los modelos anteriores comparten un diseño y un conjunto de requisitos necesarios para proporcionar confiabilidad y seguridad a los recursos del sistema. Un modelo fundamental toma una perspectiva abstracta, de acuerdo al análisis de aspectos individuales del sistema distribuido; debe contener sólo lo esencial a tener en cuenta para comprender y razonar sobre algunos aspectos de un comportamiento del sistema.

Modelos de interacción: analizan la estructura y secuencia de la comunicación entre los elementos del sistema. Cobran importancia las prestaciones del canal de comunicación (Latencia, AB, fluctuación), haciendo imposible predecir el retraso con el que puede llegar un mensaje. En otras palabras, no hay un tiempo global a todo el sistema, la ejecución es “no determinista”. Cada computador tiene su propio reloj interno, lo que conlleva tener que sincronizar los relojes locales de todas las máquinas que componen el sistema distribuido. Para ello existen diferentes mecanismos (NTP, receptores GPS, mecanismos de ordenación de eventos).
Existen dos tipos de modelos de interacción:
[16]​Síncrono: Existen límites conocidos para los tiempos de ejecución de las etapas de los procesos, en el tiempo necesario al transmitir mensajes o en las tasas de deriva de los relojes. Es decir, se pueden establecer límites para aproximarse al comportamiento real del sistema, pero en la práctica, esto no es posible y por lo general, se utilizan estimaciones (timeout).
[17]​Asíncrono: No existen limitaciones respecto a los modelos sincrónicos. La mayoría de los sistemas distribuidos son asíncronos.
[18]​Modelos de fallos: estudio e identificación de las posibles causas de fallo. Pueden clasificarse según la entidad, dando lugar a fallos de proceso o fallos de comunicación, o según el problema, dando lugar a fallos por omisión o arbitrarios:
Fallos por omisión en procesos: Fallos del procesamiento, fallo-parada (el proceso para y permanece parado) o detección del fallo por timeout, el proceso no responde (solo en modelos síncronos)
Fallos por omisión en comunicaciones: fallos en el envío (no se coloca el mensaje en el búfer) o en la recepción (el proceso no recibe el mensaje).
Fallo por omisión en comunicaciones.
Fallos arbitrarios o bizantinos: en el proceso (omisiones, se realizan pasos incorrectos en el procesamiento o se omiten arbitrariamente la respuesta a mensajes) o en canales de comunicación (corrupción de mensajes, reparto de mensajes inexistentes o duplicado del reparto de mensajes auténticos).
Enmascaramiento de fallos: algunos fallos detectados pueden ocultarse o atenuarse. Por ejemplo, checksum (de fallo arbitrario a fallo por omisión).
[19]​Modelos de seguridad: La seguridad de un sistema distribuido se puede lograr asegurando los procesos y canales utilizados para sus interacciones y protegiendo los objetos que encapsular contra el acceso no autorizado. Estos modelos proporcionan la base para construir un sistema seguro atendiendo a recursos de todo tipo. Para ello, es clave postular un enemigo que es capaz de enviar cualquier mensaje a cualquier proceso y leer o copiar cualquier mensaje enviado entre un par de procesos.
Ejemplo de ataque

Por lo tanto, para que pueda afirmarse que existe una comunicación fiable entre dos procesos debe asegurarse su integridad y su validez.

  • Clasificación en función de la estructura de la red y de la memoria.

Cuando hablamos de modelos en un sistema distribuido, nos referimos principalmente al hecho de automatizar tareas, usando un computador, del tipo pregunta-respuesta, es decir, que cuando realicemos una pregunta al computador, este nos debe contestar con una respuesta apropiada. En la informática teórica, este proceso se conoce como problemas computacionales. Formalmente, un problema computacional consiste en instancias junto con una solución a cada una de ellas. Las instancias se pueden traducir como preguntas que nosotros hacemos al computador y las soluciones como las respuestas del mismo a nuestras preguntas. Teóricamente, la informática teórica busca encontrar la relación entre problemas que puedan resolverse mediante un computador (teoría de la computabilidad) y la eficiencia al realizarlo (teoría de la complejidad computacional). Comúnmente, hay tres puntos de vista:

  • Algoritmos paralelos en el modelo de memoria compartida.

Un algoritmo paralelo define múltiples operaciones para ser ejecutadas en cada paso. Esto incluye comunicación/coordinación entre las unidades de procesamiento. Un ejemplo claro para este tipo de modelos sería el modelo de máquinas de acceso aleatorio paralelo (PRAM) [20]​.

- Memoria RAM paralela
- Memoria central compartida
- Conjunto de unidades de procesamiento (PUs)
- El número de unidades de procesamiento y el tamaño de la memoria es ilimitado.

Detalles del modelo PRAM

- Ejecución lock-step
Es un ciclo de 3 fases:
  1. Se leen las celdas de memoria.
  2. Se ejecutan los cálculos y computaciones locales.
  3. Escribir en la memoria compartida.
Todas las unidades de procesamiento ejecutan estos pasos sincrónicamente.
No hay necesidad de una sincronización explícita.
Acerca de los accesos simultáneos a la memoria:
3 Modelos PRAM
CREW: Lectura simultánea, escritura exclusiva
CRCW: Lectura simultánea, escritura simultánea
EREW: Lectura exclusiva, escritura exclusiva

Hay mucha más información acerca de este tipo de algoritmo de una forma más resumida en los siguientes libros. [21][22]

  • Algoritmos paralelos en el modelo de paso de mensaje.
-En este algoritmo el programador imagina varios procesadores, cada uno con su propio espacio de memoria, y escribe un programa para ejecutarlo en cada procesador. Hasta ahora, todo bien, pero la programación paralela por definición requiere la cooperación entre los procesadores para resolver una tarea, que requiere algún medio de comunicación. El punto principal del paradigma de paso de mensajes es que los procesos se comunican enviando mensajes unos a otros. Por lo tanto, el modelo de paso de mensajes no tiene el concepto de un espacio de memoria compartido o de que los procesadores acceden directamente a la memoria de cada uno, cualquier otra cosa que no sea el paso de mensajes queda fuera del alcance del paradigma.
-En lo que respecta a los programas que se ejecutan en los procesadores individuales, las operaciones de paso de mensajes son sólo llamadas a subrutinas.
-Se utilizan modelos como los circuitos booleanos y las redes de clasificación.[23]​ Un circuito booleano puede ser visto como una red de ordenadores: cada puerta es un ordenador que ejecuta un programa informático extremadamente simple. Del mismo modo, una red de clasificación puede ser vista como una red informática: cada comparador es un ordenador.
  • Algoritmos distribuidos en el modelo de paso de mensajes.[24]
El diseñador del algoritmo sólo elige el programa de la computadora. Todas las computadoras 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 estado finito por nodo.


Ventajas e inconvenientes

Ventajas [25]

Ambiente geográficamente distribuido: En primer lugar, en muchas situaciones, el entorno informático en sí mismo está geográficamente distribuido. Como ejemplo, consideremos una red bancaria. Se supone que cada banco debe mantener las cuentas de sus clientes. Además, los bancos se comunican entre sí para monitorear las transacciones interbancarias, o registrar las transferencias de fondos de los cajeros automáticos geográficamente dispersos. Otro ejemplo común de un entorno informático geográficamente distribuido es la Internet, que ha influido profundamente en nuestra forma de vida. La movilidad de los usuarios ha añadido una nueva dimensión a la distribución geográfica.

Speed up: En segundo lugar, existe la necesidad de acelerar los cálculos. La velocidad de cómputo en los uniprocesadores tradicionales se está acercando rápidamente al límite físico. Mientras que los procesadores superescalares y VLIW estiran el límite introduciendo un paralelismo a nivel arquitectónico (cuestión de la instrucción), las técnicas no se escalan mucho más allá de un cierto nivel. Una técnica alternativa para obtener más potencia de cálculo es utilizar procesadores múltiples. Dividir un problema entero en subproblemas más pequeños y asignar estos subproblemas a procesadores físicos separados que puedan funcionar simultáneamente es un método potencialmente atractivo para aumentar la velocidad de cálculo. Además, este enfoque promueve una mejor escalabilidad, en la que los usuarios pueden aumentar progresivamente la potencia de cálculo adquiriendo elementos o recursos de procesamiento adicionales. A menudo, esto es más sencillo y económico que invertir en un único uniprocesador superrápido.

Compartir recursos: En tercer lugar, existe la necesidad de compartir los recursos. El usuario de la computadora A puede querer usar una impresora láser conectada con la computadora B, o el usuario de la computadora B puede necesitar un poco de espacio extra en el disco disponible en la computadora C para almacenar un archivo grande. En una red de estaciones de trabajo, es posible que la estación de trabajo A quiera utilizar la potencia de cálculo en reposo de las estaciones de trabajo B y C para aumentar la velocidad de un determinado cálculo. Las bases de datos distribuidas son buenos ejemplos del intercambio de recursos de software, en los que una gran base de datos puede almacenarse en varias máquinas anfitrionas y actualizarse o recuperarse sistemáticamente mediante una serie de procesos de agentes.

Tolerancia a fallos: Cuarto, los poderosos uniprocesadores, o sistemas de computación construidos alrededor de un solo nodo central son propensos a un completo colapso cuando el procesador falla. Muchos usuarios consideran que esto es arriesgado. Sin embargo, están dispuestos a transigir con una degradación parcial del rendimiento del sistema, cuando un fallo paraliza una fracción de los muchos elementos de procesamiento o enlaces de un sistema distribuido. Esta es la esencia de la degradación gradual. La otra cara de este enfoque es que, al incorporar elementos de procesamiento redundantes en un sistema distribuido, se puede aumentar potencialmente la fiabilidad o la disponibilidad del sistema. Por ejemplo, en un sistema que tiene triple redundancia modular (TMR), se utilizan tres unidades funcionales idénticas para realizar el mismo cómputo, y el resultado correcto se determina por mayoría de votos. En otros sistemas distribuidos tolerantes a fallos, los procesadores se comprueban mutuamente en puntos de control predefinidos, lo que permite la detección automática de fallos, el diagnóstico y la eventual recuperación. Así pues, un sistema distribuido ofrece una excelente oportunidad para incorporar la tolerancia a fallos y la degradación grácil.

Inconvenientes [26]

Escalabilidad: El sistema debe diseñarse de tal manera que la capacidad pueda ser aumentada con la creciente demanda del sistema.

Heterogeneidad: La infraestructura de comunicaciones consiste en canales de diferentes capacidades.

Gestión de los recursos: En los sistemas distribuidos, los recursos se encuentran en diferentes lugares. El enrutamiento es un problema en la capa de red y en la capa de aplicación.

Seguridad y privacidad: Dado que los sistemas distribuidos tratan con datos e información sensible, se deben tener fuertes medidas de seguridad y privacidad. La protección de los activos del sistema distribuido así como los compuestos de nivel superior de estos recursos son cuestiones importantes en el sistema distribuido.

Transparencia: La transparencia significa hasta qué punto el sistema distribuido debe aparecer para el usuario como un sistema único. El sistema distribuido debe ser diseñado para ocultar en mayor medida la complejidad del sistema.

Apertura: La apertura significa hasta qué punto un sistema es diseñado utilizando protocolos estándar para apoyar la interoperabilidad. Para lograr esto, el sistema distribuido debe tener interfaces bien definidas.

Sincronización: Uno de los principales problemas es la sincronización de los cálculos consistentes en miles de componentes. Métodos actuales de sincronización como los semáforos, los monitores, las barreras, la llamada a procedimientos remotos, la invocación de métodos de objetos y el paso de mensajes, no escalan bien.

Interbloqueo y condiciones de carrera: El interbloqueo y las condiciones de carrera son otras grandes cuestiones en el sistema distribuido, especialmente en el contexto de las pruebas. Se convierte en un tema más importante especialmente en el entorno de multiprocesadores de memoria compartida.

Notas

  1. G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. (2011). Distributed Systems: Concepts and Design (5th Ed). Addison-Wesley. p. 2. ISBN 0-132-14301-1. 
  2. Andrews, Gregory R. (2000). Foundations of Multithreaded, Parallel, and Distributed Programming. Addison–Wesley. pp. 348-349. 
  3. Banks, M. (2000). On the Way to the Web: The Secret History of the Internet and its Founders. Apress. pp. 44-5. 
  4. Tel, G. (2000). Introduction to Distributed Algorithms. Cambridge University Press. pp. 35-36. ISBN 9780521794831. 
  5. Maarten van steen, Andrew S Tanenbaum (2001). Distributed systems 3rd edition. pp. 1-2. 
  6. Ghosh, Sukumar (2007). Distributed Systems – An Algorithmic Approach. Chapman & Hall/CRC. p. 10. 
  7. Papadimitriou, Christos H. (1994). «15». Computational Complexity. Addison–Wesley. 
  8. Peleg, David (2000). Distributed Computing: A Locality-Sensitive Approach. SIAM. p. 1. 
  9. Ghosh, Sukumar (2007). Distributed Systems – An Algorithmic Approach. Chapman & Hall/CRC. p. 10. 
  10. Ghosh, Sukumar (2007). Distributed Systems – An Algorithmic Approach. Chapman & Hall/CRC. pp. 4-6. 
  11. G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. (2011). Distributed Systems: Concepts and Design (5th Ed). Addison-Wesley. p. 38. ISBN 0-132-14301-1. 
  12. G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. (2011). Distributed Systems: Concepts and Design (5th Ed). Addison-Wesley. pp. 39-40. ISBN 0-132-14301-1. 
  13. G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. (2011). Distributed Systems: Concepts and Design (5th Ed). Addison-Wesley. pp. 40-42. ISBN 0-132-14301-1. 
  14. G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. (2011). Distributed Systems: Concepts and Design (5th Ed). Addison-Wesley. pp. 46-51. ISBN 0-132-14301-1. 
  15. G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. (2011). Distributed Systems: Concepts and Design (5th Ed). Addison-Wesley. pp. 61-64. ISBN 0-132-14301-1. 
  16. G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. (2011). Distributed Systems: Concepts and Design (5th Ed). Addison-Wesley. p. 64. ISBN 0-132-14301-1. 
  17. G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. (2011). Distributed Systems: Concepts and Design (5th Ed). Addison-Wesley. p. 65. ISBN 0-132-14301-1. 
  18. G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. (2011). Distributed Systems: Concepts and Design (5th Ed). Addison-Wesley. p. 67. ISBN 0-132-14301-1. 
  19. G. Coulouris, J. Dollimore, T. Kindberg and G. Blair. (2011). Distributed Systems: Concepts and Design (5th Ed). Addison-Wesley. pp. 71-73. ISBN 0-132-14301-1. 
  20. Thomas Ropars. «Parallel algorithms in shared memory». p. 5. 
  21. Herlihy & Shavit. (2008). «2-6». The Art of Multiprocessor Programming (1th Ed). Addison-Wesley. ISBN 978-0-12-370591-4. 
  22. Lynch, Nancy A. (1996). Distributed Algorithms. Morgan Kaufmann. ISBN 978-1-55860-348-6. 
  23. Cormen, Leiserson & Rivest (1990). Introduction to algorithms. MIT Press. pp. Sections 28 and 29. ISBN 978-0-262-03141-7. 
  24. Raynal, Michel (2013). Distributed Algorithms for Message-Passing Systems. 
  25. Ghosh, Sukumar (2007). Distributed Systems – An Algorithmic Approach. Chapman & Hall/CRC. p. 17. ISBN 978-1-58488-564-1. 
  26. Kamal Sheel Mishra, Anil Kumar Tripathi. Some Issues, Challenges and Problems of Distributed Software System. Department of Computer Science & Engineering, Indian Institute of Technology(Banaras Hinhu University) Varanasi, India. pp. 2-4. 

Referencias

Libros

Lectura suplementaria

Libros
  • Andrew S. Tanenbaum, Maarten van Steen (2001), Distributed Systems: Principles and Paradigms . ISBN 9780132392273.
  • Banks, M (2012), On the Way to the Web: The Secret History of the Internet and its Founders, Apress . ISBN 9783642381232.
  • Coulouris, George (2011), Distributed Systems: Concepts and Design (5th Edition), Addison-Wesley . ISBN 0-132-14301-1.
  • Kamal Sheel Mishra, Anil Kumar Tripathi, Some Issues, Challenges and Problems of Distributed Software System, Department of Computer Science & Engineering, Indian Institute of Technology(Banaras Hinhu University) . ISBN 0975-9646.
  • Raynal, Michel (2013), Distributed Algorithms for Message-Passing Systems . ISBN 9783642381232.
  • Tel, Gerard (1994), Introduction to Distributed Algorithms, Cambridge University Press . ISBN 9780521794831.