2015-11-06 1 views
0

Есть n Узлы в кластере. Файлы могут быть загружены на любой узел, а затем должны быть распределены между собой. Этот дистрибутив не должен происходить в транзакции (на самом деле он не должен, распределенные транзакции не масштабируются), и некоторая латентность приемлема, хотя должна быть минимальной. Конфликты могут быть разрешены произвольно (как правило, последние победы записи) при условии, что разрешение также распространяется на все узлы, так что в конечном итоге все узлы имеют одинаковый набор файлов. Узлы могут быть добавлены и удалены динамически без необходимости перенастройки существующих узлов. Не должно быть единственной точки отказа и никаких дополнительных ящиков, необходимых для ее решения (например, RabbitMQ)Синхронизация файлов между n веб-серверами в кластере

Я думаю о линиях использования consul.io для динамической конфигурации, чтобы каждый узел мог ссылаться на консула, чтобы определить, что доступны другие узлы и запись демона (Golang), который контролирует соответствующие папки и связывается с другими узлами с помощью ZeroMQ.

Чувства, как будто я буду изобретать колесо. Это распространенная проблема, и я ожидаю, что уже есть решения, о которых я не знаю? Или, может быть, мой подход неправильный, и есть другой способ решить это?

ответ

1

Да, там были некоторые вещи происходит с распределенной синхронизацией в последнее время:

Вы можете использовать syncthing (с открытым исходным кодом) или BitTorrent Sync.

Синхронизация основано на узлах, то есть вы добавляете узлы в кластер и выбираете, какие папки следует синхронизировать.

BTSync основан на папке, то есть вы получаете «секрет» для папки и можете синхронизировать со всеми в рое для этой папки.

Из моего опыта, BTSync имеет лучшее открытие и возможность подключения, но весь процесс синхронизации закрыт, и никто не знает, что происходит. Синхронизация написана в go, но иногда возникает проблема с обнаружением сверстников.

И syncthing, и BTSync используют локальное обнаружение через трансляцию и трекер для обнаружения AFAIK.

EDIT: Или, если вы действительно классный, используйте IPFS для размещения последней версии, IPNS, чтобы «назвать» это и установить IPNS на серверах. Вы можете установить список начальной загрузки IPFS на некоторые из ваших серверов, что даже сделает вас независимыми от внешних трекеров. :)

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