2009-11-13 3 views
1

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

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

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

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

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

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

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

Спасибо!

+0

Вы регистрируетесь для большой боли: почему бы не рассмотреть Erlang например? Это поможет вам решить множество проблем, например. сеть, распределенная, сериализация, маршалинг и т. д. – jldupont

+2

Вы говорите «используя только C», но отмечаете вопрос как «c» и «C++». Который из них? –

+0

и почему это сообщество wiki? знайте, что это снижает ваши шансы получить достойные ответы ... –

ответ

1

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

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

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

+0

Я посмотрю на paxos. Требование состоит в том, чтобы просто создать распределенную серверную систему узлов, которая должна взаимодействовать для обработки задания в последовательности. –

+0

+1 для передачи сообщений – paxos1977

1

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

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

+0

Можете ли вы уточнить или дать ссылки на **. Секрет предотвращения блокировки - это то, что ваши конечные точки должны быть записаны как серверы с потоками для «протокола» ** части ответа. Это было бы очень полезно. Также как обеспечить полное упорядочивание событий? –

+0

Посмотрите на дизайн FTP. Существует порт протокола, в котором клиент разговаривает с сервером. По этому соединению отправляется только протокол. Передача данных происходит по отдельному соединению. Это позволяет серверу и клиенту быстрее реагировать на изменение условий. Что касается полного упорядочения событий, что невозможно в проекте p2p. Это также бессмысленно в протоколе p2p. Если отправляет на b и c отправляет d, имеет ли значение, что происходит первым? – jmucchiello

Смежные вопросы