Как получить доступ к набору папок из списка сервисов без конфликта
У меня есть набор служб, работающих на разных серверах, все имеют доступ к общему ресурсу, например; список папок, содержащих видео, которые требуют некоторой обработки.
Я хочу реализовать некоторый механизм блокировки, чтобы службы не могли одновременно обращаться к одной и той же папке, поэтому моя идея состоит в том, чтобы создать текстовый файл в папке как "in-folder-lock" и проверить, существует ли этот файл перед обработкой видео. файлы внутри.
Я уверен, что этот тест не будет успешным в реальных условиях, когда службы ищут папки для работы.
Есть идеи?
Любая помощь приветствуется, спасибо заранее.
1 ответ
Вы можете использовать некоторый механизм распределенной блокировки, такой как Redis Redlock
или же Consul lock
но если у вас есть несколько серверов, борющихся за эту общую папку, почему бы вам не рассмотреть возможность разделения файлов в нескольких папках (используя согласованный алгоритм хеширования), а затем заставить ваши серверы (используя тот же согласованный алгоритм хеширования) обрабатывать файлы только для их выделенная папка? Таким образом, вы могли бы распараллелить обработку вместо того, чтобы все серверы N-1 ожидали, что N-й сервер обработает все в одной папке.