Мне нужно построить систему, в которой у нас есть множество машин, производить уникальные файлы, позволяет называть их ПРОИЗВОДИТЕЛЬ и набор машин получать эти файлы, которые мы называем ПОТРЕБИТЕЛЬ. Любая машина от ПРОИЗВОДИТЕЛЕЙ может отправлять файлы одному или нескольким из ПОТРЕБИТЕЛЕЙ [на основе некоторого хеш-механизма]. Мне нужно создать механизм, который гарантирует, что доставка файла произойдет в гарантированном mannner. т. е. производители или потребители могут выходить из строя/перезагружаться и быть в состоянии продолжать работу с того места, где они остановились. Есть ли какой-либо надежный способ масштабирования для реализации этого, кажется, довольно распространенная потребность в любой отказоустойчивой системе? Ожидается, что количество производителей и потребителей будет увеличиваться/уменьшаться «на лету».Асинхронных распределенные передач файлов
ответ
То, что вы описали, возможно, наиболее легко реализуется с использованием некоторой формы передачи сообщений. Вы можете взглянуть на http://www.zeromq.org; Я сам работал с этой библиотекой и могу всем сердцем ее рекомендовать.
На боковой ноте: если вам не нужно использовать C++, то в вашем случае может оказаться интересным выбрать Erlang.
То, что вы описываете, немного напоминает механизм репликации архитектуры Google File System. Вы будете наиболее заинтересованы в разделе 3.1 и 3.2 статьи вместе с иллюстрацией на рисунке 2.
Сводка (с упрощениями), поскольку это относится к данному случаю:
- ПРОИЗВОДИТЕЛЯ посылает данные ждут ответа.
- ПОТРЕБИТЕЛЬ (s) ответ: «Я получил все данные».
- ПРОИЗВОДИТЕЛЬ посылает команду «закончить запись», ждет ответа.
- ПОТРЕБИТЕЛЬ (s) ответ: «Я сбросил данные на диск».
- Теперь (и только сейчас) рассмотрим данные «сохранены».
ГФС, как описано в статье реализует ряд оптимизации, в том числе конвейеру записи потребителям вместо разделения полосы пропускания одного аппарата по п машин одновременно.
Для обеспечения ваших гарантий безопасности при сбоях вы можете выполнить операции ввода идемпотент с помощью Intent Log. Это может быть только на стороне производителя (например, вы пытаетесь выполнить повторный запуск после таймаута) или на конце потребителя (при перезагрузке, продолжите операцию).
- 1. Загрузка асинхронных файлов в Python
- 2. Загрузка нескольких асинхронных файлов asp.net
- 3. Does FileZilla Открывает столько подключений, сколько количества предполагаемых передач файлов
- 4. Подсчет повторных передач TCP
- 5. Очередь всех неудачных передач
- 6. IBeacon режим соединяемых передач
- 7. Добавить флаги входящих передач
- 8. автоматическая коробка передач
- 9. Почему вся моя страница перезагружается в Chrome и Firefox при использовании асинхронных обратных передач UpdatePanel?
- 10. Каков приемлемый способ обработки ошибок во время асинхронных обратных передач в ASP.NET?
- 11. Распределенные мьютексы
- 12. Распределенные прерывания
- 13. Распределенные вычисления
- 14. Чтение/запись асинхронных файлов для универсального приложения
- 15. Установка передач в 2012 году
- 16. Распределенные системы, наилучшая структура?
- 17. предотвратить прием передач несколько раз
- 18. SignalR: Группа передач не работает
- 19. Отдельный экземпляр из нескольких передач
- 20. Рекомендации по проектированию Распределенные вычисления
- 21. Berkeley Алгоритм - Распределенные системы
- 22. Методы Малые распределенные вычисления
- 23. Распределенные системы - сигнал LIFO
- 24. Распределенные файловые системы Hadoop
- 25. Распределенные вычислительные приложения
- 26. Распределенные инструменты корпоративного сотрудничества
- 27. Распределенные вычисления в R
- 28. Распределенные системы разработки
- 29. Распределенные вычисления: асинхронный прием
- 30. Распределенные транзакции с WCF