Проект распределенной системы с использованием только C - PullRequest
2 голосов
/ 13 ноября 2009

У меня есть работа по реализации распределенной системы узлов (например, узлов p2p), каждый из этих узлов (скажем, A, B, C и D) выполняет определенные функции и должен взаимодействовать друг с другом для выполнения различных операций, таких как синхронизация. операции и другие вещи, такие как 15 A-узлов, взаимодействуют с группой из 5 B-узлов, чтобы попасть в очередь наименее загруженного узла и получить номер токена, а затем ждать C, чтобы перенаправить их на свободный узел D и т. д.

Я немного растерялся относительно того, как мне поступить с дизайном:

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

  2. Как мне перейти к аспекту распределенного взаимного исключения, поскольку у меня нет центрального сервера. Я предполагаю, что каждый узел реплицирует данные, но это звучит слишком дорого (не говоря уже о глупости).

  3. Какова основная методология проектирования, которой придерживались при реализации систем p2p, т.е. как я могу реализовать программу таким образом, чтобы она блокировалась при получении, но также могла отправлять дальнейшие обновления и т. Д. И в то же время получать информацию от других о «состоянии» всей системы.

  4. Как обеспечить полное упорядочение запросов?

Кроме того, каковы другие проблемы, которые мне, возможно, придется рассмотреть / лицо. Я также был бы признателен, если бы вы указали мне несколько хороших онлайн-ресурсов по внедрению p2p и распределенных систем.

Спасибо !!

Ответы [ 3 ]

2 голосов
/ 13 ноября 2009

Я не буду пытаться дать «полный» ответ (потому что вопрос слишком большой и неопределенный в любом случае), но я мог бы указать вам на интересную часть головоломки:

  1. Вы можете использовать систему очереди сообщений (например, AMQP RabbitMQ : имеется экспериментальная привязка C) для реализации надежной доставки сообщений между вашими узлами.

  2. Взаимное исключение: вы можете использовать протокол, такой как Paxos

1 голос
/ 13 ноября 2009

Секрет предотвращения блокировки заключается в том, что все ваши конечные точки должны быть записаны в виде серверов с потоками для обработки «протокола», которые отделены от потоков для обработки данных.

Что касается линейного протокола, я влюбился в JSON для линейного протокола. Это читается человеком. Это поток без необходимости в длине байтов! Он легко расширяемый и в основном не подвержен изменению версии протокола.

0 голосов
/ 13 ноября 2009

Еще одна полезная программа - KadC!

http://kadc.sourceforge.net

...