Как спроектировать и проверить распределенные системы? - PullRequest
16 голосов
/ 07 февраля 2009

Я работал над проектом , который представляет собой комбинацию сервера приложений и объектной базы данных и в настоящее время работает только на одном компьютере. Некоторое время назад я прочитал статью , в которой описывается распределенная реляционная база данных, и получил некоторые идеи о том, как применить идеи из этой статьи к моему проекту, чтобы я мог сделать его версию с высокой доступностью работающей. в кластере с использованием архитектуры без общего доступа .

Моя проблема в том, что у меня нет опыта разработки распределенных систем и их протоколов - я не проходил курсы повышения квалификации по распределенным системам в университете. Поэтому меня беспокоит возможность разработки протокола, который не вызывает тупиковых ситуаций, голода, расщепления мозга и других проблем.

Вопрос: Где найти хороший материал о проектировании распределенных систем? Какие существуют методы для проверки правильности работы распределенного протокола? Рекомендации книг, научных статей и др. Приветствуются.

Ответы [ 7 ]

13 голосов
/ 08 февраля 2009

Я многому научился, глядя на то, что публикуется об действительно огромных веб-платформах, и особенно на то, как их системы развивались с течением времени, чтобы соответствовать их росту.

Вот несколько примеров, которые я нашел просветляющими:

  • Архитектура eBay : Хорошая история их архитектуры и проблем, с которыми они столкнулись. Очевидно, что они не могут использовать много кэширования для аукционов и ставок, поэтому их история в этом отношении отличается от многих других. По состоянию на 2006 год они развертывали 100 000 новых строк кода каждые две недели - и могут откатить текущее развертывание в случае возникновения проблем.

  • Документ в файловой системе Google : Хороший анализ того, что им нужно, как они реализовали это и как оно работает в производственном использовании. Прочитав это, я обнаружил, что не так страшно создавать части инфраструктуры, которые бы точно соответствовали моим потребностям, если это необходимо, и что такое решение может и, вероятно, должно быть довольно простым и простым. В сети также есть много интересных материалов (включая видео с YouTube) о BigTable и MapReduce, других важных частях архитектуры Google.

  • Внутри MySpace : Один из немногих действительно огромных сайтов, основанных на стеке Microsoft. Вы можете многое узнать о том, что не нужно делать с вашим слоем данных.

Отличным началом для поиска гораздо большего количества ресурсов по этой теме является раздел Real Life Architectures на веб-сайте "High Scalability". Например, они дают хорошее резюме по архитектуре Amazons .

9 голосов
/ 08 февраля 2009

Изучение распределенных вычислений не легко. Это действительно очень обширная область, охватывающая области связи, безопасности, надежности, параллелизма и т. Д., На освоение каждой из которых уйдут годы. Понимание в конечном итоге придет через много чтения и практического опыта. Похоже, у вас сложный проект для начала, так что вот ваш шанс:)

Две самые популярные книги по распределенным вычислениям, я считаю:

1) Распределенные системы: концепции и дизайн - Джордж Кулурис и др.

2) Распределенные системы: принципы и парадигмы - А. С. Таненбаум и М. Ван Стин

Обе эти книги дают очень хорошее введение в современные подходы (включая протоколы связи), которые используются для построения успешных распределенных систем. Я лично использовал последний в основном, и я нашел, что это был отличный текст. Если вы думаете, что обзоры на Amazon не очень хорошие, это потому, что большинство читателей сравнивают эту книгу с другими книгами, написанными A.S. Таненбаум (который ИМО является одним из лучших авторов в области компьютерных наук), которые, откровенно говоря, лучше написаны.

PS : Я действительно подвергаю сомнению вашу необходимость разработать и проверить новый протокол. Если вы работаете с серверами приложений и базами данных, то, что вам нужно, вероятно, уже доступно.

3 голосов
/ 07 февраля 2009

Мне понравилась книга Распределенные системы: принципы и парадигмы Эндрю С. Таненбаума и Маартена ван Стин.

2 голосов
/ 29 марта 2013

Где найти хороший материал о проектировании распределенных систем?

Мне никогда не удавалось закончить знаменитую книгу Нэнси Линч . Однако я считаю, что книгу Сукумара Гоша Распределенные системы: алгоритмический подход гораздо легче читать, и в случае необходимости она указывает на оригинальные статьи.

Тем не менее правда, что я не читал книги Джерарда Тела и Николая Санторо . Возможно, их еще легче читать ...

Какие существуют методы проверки правильности работы распределенного протокола?

Чтобы рассмотреть возможности (а также чтобы понять вопрос), я думаю, что было бы полезно получить обзор возможных инструментов из книги Методы спецификации программного обеспечения .

Мое окончательное решение было выучить TLA +. Зачем? Даже если язык и инструменты кажутся лучше, я действительно решил попробовать TLA +, потому что за ним стоит Лесли Лэмпорт. То есть не только выдающаяся фигура в распределенных системах, но и автор Latex! Вы можете получить TLA + book и несколько примеров бесплатно.

2 голосов
/ 07 февраля 2009

На более абстрактном и формальном уровне, Коммуникационные и мобильные системы: Пи-исчисление от Робин Милнер дает исчисление для проверки систем. Существуют варианты pi-исчисления для проверки протоколов, такие как SPI-исчисление (страница википедии, для которой исчезла со времени моего последнего просмотра) и реализации , некоторые из которых также являются инструментами проверки.

1 голос
/ 05 мая 2011

Есть много классических работ, написанных Лесли Лампортом: (http://research.microsoft.com/en-us/um/people/lamport/pubs/pubs.html) и Эдсгер Дейкстра (http://www.cs.utexas.edu/users/EWD/) для стороны базы данных.

Основной поток - движение NoSQL, на рынке появляются многие проекты, включая CouchDb (couchdb.apache.org), MongoDB, Cassandra. Все они обещают масштабируемость и управляемость (репликация, отказоустойчивость, высокая доступность).

1 голос
/ 08 февраля 2009

Одна хорошая книга - надежные распределенные системы Бирмана , хотя у нее есть свои противники.

Если вы хотите формально проверить свой протокол, вы можете взглянуть на некоторые методы Распределенные алгоритмы Линча .

Вполне вероятно, что любой протокол, который вы пытаетесь реализовать, был разработан и проанализирован ранее. Я просто подключу свой собственный блог , который охватывает, например, согласованные алгоритмы.

...