tipos sistemas sistema proyectos los elementos ejemplos distribuidos distribuido desafios computo clasificacion arquitectura distributed protocols high-availability formal-verification
varios ejemplos

distributed - proyectos - sistemas distribuidos ejemplos



¿Cómo diseñar y verificar sistemas distribuidos? (7)

En un nivel más abstracto y formal, Comunicando y Sistemas Móviles: El Pi-Cálculo de Robin Milner ofrece un cálculo para verificar los sistemas. Hay variantes de pi-calculus para verificar protocolos, como SPI-calculus (la página de wikipedia que ha desaparecido desde la última vez que lo vi), y las implementaciones , algunas de las cuales también son herramientas de verificación.

He estado trabajando en un proyecto , que es una combinación de un servidor de aplicaciones y una base de datos de objetos, y actualmente se ejecuta en una sola máquina. Hace algún tiempo, leí un documento que describe una base de datos relacional distribuida, y obtuve algunas ideas sobre cómo aplicar las ideas en ese documento a mi proyecto, para poder hacer que una versión de alta disponibilidad se ejecutara en un clúster utilizando un recurso compartido. - nada de arquitectura .

Mi problema es que no tengo experiencia en el diseño de sistemas distribuidos y sus protocolos. No tomé cursos de CS avanzados sobre sistemas distribuidos en la universidad. Así que estoy preocupado por poder diseñar un protocolo que no provoque estancamiento, inanición, división del cerebro y otros problemas.

Pregunta: ¿Dónde puedo encontrar un buen material sobre el diseño de sistemas distribuidos? ¿Qué métodos hay para verificar que un protocolo distribuido funciona correctamente? Recomendaciones de libros, artículos académicos y otros son bienvenidos.


Me gustó el libro Distributed Systems: Principles and Paradigms, de Andrew S. Tanenbaum y Maarten van Steen.


Aprender computación distribuida no es fácil. Es realmente un campo muy amplio que abarca áreas de comunicación, seguridad, confiabilidad, concurrencia, etc., y cada una de ellas llevaría años dominar. La comprensión eventualmente vendrá a través de mucha lectura y experiencia práctica. Parece que tienes un proyecto desafiante para empezar, así que aquí tienes tu oportunidad :)

Los dos libros más populares sobre computación distribuida son, creo:

1) Sistemas distribuidos: conceptos y diseño - George Coulouris et al.

2) Sistemas distribuidos: Principios y paradigmas : AS Tanenbaum y M. Van Steen

Ambos libros ofrecen una muy buena introducción a los enfoques actuales (incluidos los protocolos de comunicación) que se utilizan para construir sistemas distribuidos exitosos. Personalmente he usado este último en su mayoría y he encontrado que es un texto excelente. Si crees que las reseñas en Amazon no son muy buenas, es porque la mayoría de los lectores compara este libro con otros libros escritos por AS Tanenbaum (que IMO es uno de los mejores autores en el campo de la informática) que están francamente mejor escritos.

PD : realmente cuestiono tu necesidad de diseñar y verificar un nuevo protocolo. Si está trabajando con servidores de aplicaciones y bases de datos, lo que necesita probablemente ya esté disponible.


¿Dónde puedo encontrar un buen material sobre el diseño de sistemas distribuidos?

Nunca he podido terminar el famoso libro de Nancy Lynch . Sin embargo, considero que el libro de Sukumar Ghosh Distributed Systems: An Algorithmic Approach es mucho más fácil de leer, y apunta a los documentos originales si es necesario.

Sin embargo, es cierto que no leí los libros de Gerard Tel y Nicola Santoro . Quizás todavía sean más fáciles de leer ...

¿Qué métodos hay para verificar que un protocolo distribuido funciona correctamente?

Para estudiar las posibilidades (y también para comprender la pregunta), creo que es útil obtener una visión general de las posibles herramientas del libro Métodos de especificación de software .

Mi decisión final fue aprender TLA +. ¿Por qué? Incluso si el lenguaje y las herramientas parecen mejores, realmente decidí probar TLA + porque el tipo detrás de esto es Leslie Lamport. Es decir, no solo una figura prominente en sistemas distribuidos, ¡sino también el autor de Latex! Puede obtener el libro TLA + y varios ejemplos gratis.


Hay muchos artículos clásicos escritos por Leslie Lamport: ( http://research.microsoft.com/en-us/um/people/lamport/pubs/pubs.html ) y Edsger Dijkstra ( http: //www.cs.utexas .edu / users / EWD / ) para el lado de la base de datos.

Una corriente principal es el movimiento NoSQL, muchos proyectos están apareciendo en el mercado, incluyendo CouchDb (couchdb.apache.org), MongoDB, Cassandra. Todos estos tienen la promesa de escalabilidad y manejabilidad (replicación, tolerancia a fallas, alta disponibilidad).


Un buen libro es Birman''s Reliable Distributed Systems , aunque tiene sus detractores.

Si desea verificar formalmente su protocolo, puede ver algunas de las técnicas en los algoritmos distribuidos de Lynch.

Es probable que cualquier protocolo que intente implementar se haya diseñado y analizado anteriormente. Voy a conectar mi propio blog , que cubre, por ejemplo, algoritmos de consenso.


Aprendí mucho mirando lo que se publica sobre plataformas realmente enormes basadas en web, y especialmente cómo evolucionaron sus sistemas a lo largo del tiempo para alcanzar su crecimiento.

Aquí algunos ejemplos que encontré esclarecedor:

  • Arquitectura de eBay : buena historia de su arquitectura y los problemas que tenían. Obviamente, no pueden usar mucho almacenamiento en caché para las subastas y ofertas, por lo que su historia es diferente en ese punto de muchos otros. A partir de 2006, desplegaron 100.000 nuevas líneas de código cada dos semanas, y pueden deshacer una implementación en curso si surgen problemas.

  • Documento sobre Google File System : Buen análisis de lo que necesitaban, cómo lo implementaron y cómo funciona en el uso de producción. Después de leer esto, me resultó menos aterrador construir partes de la infraestructura para satisfacer exactamente mis necesidades, de ser necesario, y que tal solución puede y probablemente debería ser bastante simple y directa. También hay muchas cosas interesantes en la red (incluidos videos de YouTube) en BigTable y MapReduce, otras partes importantes de la arquitectura de Google.

  • Dentro de MySpace : uno de los pocos sitios realmente grandes que se basa en la pila de Microsoft. Puede aprender mucho sobre lo que no debe hacer con su capa de datos.

Un buen comienzo para encontrar muchos más recursos sobre este tema es la sección Arquitecturas de la vida real en el sitio web de "Alta escalabilidad". Por ejemplo, un buen resumen de la arquitectura de Amazonas .