
У нас есть кластер машин (около 50 и растет). У каждой машины есть поисковый индекс, который нужно обновлять несколько раз в день. В настоящее время мы обновляем индекс на каждой машине по отдельности, но в идеале мы могли бы обновить его на одной машине, а затем синхронизировать новые файлы с остальной частью кластера. Изначально мы использовали rsync для решения этой проблемы, но по мере роста количества машин стало очевидно, что это решение не масштабируется. Я только что начал изучать многоадресную передачу файлов. Кто-нибудь с опытом в этом может подсказать, где можно поискать?
решение1
Однажды мне задали этот вопрос на собеседовании...
Параметры многоадресной рассылки:
BitTorrent
и другие протоколы, использующие обмен сообщениями pub/sub.
Другой подход... Используйте дерево распределения:
отправьте на N хостов, которые в свою очередь отправят на N хостов; и работайте по дереву таким образом. Конечно, это потребует некоторой работы по разработке с вашей стороны, но это, возможно, более масштабируемый подход.
Большая часть этого зависит от того, сколько систем вам фактически нужно обслуживать, размера индекса и вашей сетевой инфраструктуры.
решение2
Вам может быть лучше использовать общую файловую систему, особенно если индекс поиска доступен только для чтения приложению, использующему индекс поиска (т. е. в конечном пункте назначения). Таким образом, большая часть сложности выполняется за вас.
решение3
Попробуйте bittorrent. Он разработан для быстрого распространения файлов по нескольким хостам. Multicast заставит вашего сетевого инженера кричать от боли :)
решение4
Я бы рекомендовал взглянуть на git. Я использовал его в прошлом, чтобы вносить изменения на одном сервере и выкладывать их или запускать задания cron на других серверах, чтобы вытащить их. Это решение довольно гибкое.