У меня есть Perl-скрипт (назовем его работником), установленный на каждом узле / машине (всего 4) кластера (на каждом запущен RHEL). Сам сценарий настроен как RedHat Cluster (это означает, что диспетчер кластера RH будет гарантировать, что один и ровно один экземпляр этого сценария работает, пока работает хотя бы один узел в кластере).
У меня есть X объем работы, выполняемой каждый день, один раз в день, что делает этот скрипт. До сих пор X был достаточно мал, и для этого было достаточно только одного экземпляра этого скрипта. Но теперь нагрузка будет увеличиваться, и наряду с высокой доступностью (то есть уже реализованной с использованием RHCS ) мне также необходимо распределение нагрузки.
Вопрос в том, как мне это сделать?
Конечно, у меня есть способ разделить работу на n частей размером X / n каждая. Варианты, которые я имел в виду:
Создайте новый распределитель нагрузки, который распределяет работу по заданиям X / N. И одно из следующего:
- Создайте именованный канал в сетевой файловой системе (которая смонтирована и видима на всех узлах), отправьте все задания в канал. Сделайте каждый рабочий скрипт на каждом узле прочитанным (атомарным) из канала и сделайте всю работу. OR
- Заставьте каждый рабочий сценарий на каждом узле прослушивать сокет TCP, а распределитель нагрузки отправляет задания каждому этому сокету циклически (или каким-либо другим алгоритмом).
Теоретическая проблема с # 1 заключается в том, что мы наблюдали некоторые неприятные задержки с NFS. И я даже не уверен, будет ли NFS поддерживать IPC через именованные каналы на разных машинах.
Теоретическая проблема с # 2 состоит в том, что мне нужно реализовать несколько мониторов, чтобы гарантировать, что каждый работник работает и слушает, что является новичком для Perl, я не уверен, достаточно ли просто.
Я лично предпочитаю распределитель нагрузки, создающий пул и рабочих вытягивающий из него, а не распределитель нагрузки, отслеживающий каждого работника и нажимающий работу для каждого. Есть еще варианты?
Я также открыт для новых идей. :)
Спасибо!
- редактировать -
с использованием Perl 5.8.8, если быть точным: это perl, v5.8.8, собранный для x86_64-linux-thread-multi