2010-07-02 2 views
2

Мне нужно построить систему, в которой у нас есть множество машин, производить уникальные файлы, позволяет называть их ПРОИЗВОДИТЕЛЬ и набор машин получать эти файлы, которые мы называем ПОТРЕБИТЕЛЬ. Любая машина от ПРОИЗВОДИТЕЛЕЙ может отправлять файлы одному или нескольким из ПОТРЕБИТЕЛЕЙ [на основе некоторого хеш-механизма]. Мне нужно создать механизм, который гарантирует, что доставка файла произойдет в гарантированном mannner. т. е. производители или потребители могут выходить из строя/перезагружаться и быть в состоянии продолжать работу с того места, где они остановились. Есть ли какой-либо надежный способ масштабирования для реализации этого, кажется, довольно распространенная потребность в любой отказоустойчивой системе? Ожидается, что количество производителей и потребителей будет увеличиваться/уменьшаться «на лету».Асинхронных распределенные передач файлов

ответ

0

То, что вы описали, возможно, наиболее легко реализуется с использованием некоторой формы передачи сообщений. Вы можете взглянуть на http://www.zeromq.org; Я сам работал с этой библиотекой и могу всем сердцем ее рекомендовать.

На боковой ноте: если вам не нужно использовать C++, то в вашем случае может оказаться интересным выбрать Erlang.

1

То, что вы описываете, немного напоминает механизм репликации архитектуры Google File System. Вы будете наиболее заинтересованы в разделе 3.1 и 3.2 статьи вместе с иллюстрацией на рисунке 2.

Сводка (с упрощениями), поскольку это относится к данному случаю:

  1. ПРОИЗВОДИТЕЛЯ посылает данные ждут ответа.
  2. ПОТРЕБИТЕЛЬ (s) ответ: «Я получил все данные».
  3. ПРОИЗВОДИТЕЛЬ посылает команду «закончить запись», ждет ответа.
  4. ПОТРЕБИТЕЛЬ (s) ответ: «Я сбросил данные на диск».
  5. Теперь (и только сейчас) рассмотрим данные «сохранены».

ГФС, как описано в статье реализует ряд оптимизации, в том числе конвейеру записи потребителям вместо разделения полосы пропускания одного аппарата по п машин одновременно.

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

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