15

He estado trabajando en a project, 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í a paper 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 una versión de alta disponibilidad ejecutándose en un clúster usando un shared-nothing architecture.¿Cómo diseñar y verificar sistemas distribuidos?

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 cause interbloqueo, inanición, split brain y otros problemas.

Pregunta: ¿Dónde puedo encontrar 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.

Respuesta

3

Me gustó el libro Sistemas distribuidos: Principios y paradigmas por Andrew S. Tanenbaum y Maarten van Steen.

+0

Parece ser el mismo libro que usan en mi universidad. Amazon tiene opiniones diferentes al respecto, por lo que podría no comprarlo, pero échale un vistazo a la biblioteca de la universidad. –

2

En un nivel más abstracto y formal, Communicating and Mobile Systems: The Pi-Calculus por Robin Milner proporciona 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 busqué), y implementations, algunas de las cuales también son herramientas de verificación.

+0

Interesante. Echaré un vistazo a eso. –

9

El aprendizaje de la informática distribuida no es fácil. Es realmente un campo muy vasto que abarca áreas de comunicación, seguridad, confiabilidad, concurrencia, etc., y cada una de ellas llevaría años dominarla. 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í está tu oportunidad :)

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

1) Distributed Systems: Concepts and Design - George Coulouris et al.

2) Distributed Systems: Principles and Paradigms - A. S. Tanenbaum y M. Van Steen

Ambos libros dan una muy buena introducción a los enfoques actuales (incluyendo protocolos de comunicación) que se utilizan para construir sistemas distribuidos con éxito. 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 comparan este libro con otros libros escritos por A.S. Tanenbaum (que IMO es uno de los mejores autores en el campo de la informática) que están francamente mejor escritos.

PS: realmente cuestiono su 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.

+1

El desafío intelectual fue mi principal razón para comenzar este proyecto: es el programa más complejo que he hecho. Incluso si nadie lo va a usar, aprenderé mucho sobre sistemas distribuidos y otros temas complejos. :) –

12

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

Aquí un algunos ejemplos que encontré esclarecedor:

  • eBay Architecture: Nice 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.

  • Paper on Google File System: Buen análisis de lo que necesitaban, cómo lo implementaron y cómo funciona en 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.

  • Inside MySpace: Uno de los pocos sitios realmente grandes se basa en la pila de Microsoft. Puede aprender mucho de para no hacer con su capa de datos.

Un gran comienzo para encontrar muchos más recursos sobre este tema es la sección Real Life Architectures en la "alta escalabilidad" sitio web. Por ejemplo, un buen resumen en la arquitectura Amazons.

+1

La URL de "Papel en el sistema de archivos de Google" no es válida. El correcto es http://research.google.com/archive/gfs.html. –

1

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

Si desea verificar formalmente su protocolo, puede consultar algunas de las técnicas en Lynch Distributed Algorithms.

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

1

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).

2

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

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

No obstante, 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 existen para verificar que un protocolo distribuido funciona correctamente?

Con el fin de estudiar las posibilidades (y también con el fin de entender la pregunta), creo que es útil para obtener una visión general de las posibles herramientas del libro Software Specification Methods.

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 TLA+ book y several examples de forma gratuita.

Cuestiones relacionadas