Как работает lockPath Apache Curator DistributedQueue? - PullRequest
0 голосов
/ 24 июня 2018

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

Мне нужно координировать назначение этих частей работы, и DistributedQueue куратора кажется такимэто почти , что я хочу.Мне не нужен порядок, который он обеспечивает, поэтому мне любопытно, какой уровень накладных расходов я оплачиваю, предполагая, что отказываюсь иметь одного потребителя (то есть каждый процесс просто потребляет из очереди).

Меня больше всего беспокоит, как на самом деле работает функция lockPath () в построителе очередей.Мне нужна предоставляемая им функциональность, потому что процессы могут выйти из строя, и мне не нужно отбрасывать задания, которые они должны были выполнять.Но я не хочу, чтобы только один процесс мог выполнять любую работу за раз.Если я использую lockPath (), блокирует ли очередь другие процессы, пока процесс потребляет сообщение?

Кроме того, если очередь кажется необоснованным, есть ли другой инструмент, доступный для достижения того, чего я хочу,или я должен был бы катиться самостоятельно?Я хочу оставаться в среде Куратора / ZK, но я открыт для альтернатив в этом.

1 Ответ

0 голосов
/ 25 июня 2018

(Примечание: я главный автор Apache Curator)

Документация должна быть улучшена. Блокировка используется, чтобы сделать запись в очереди повторной. то есть запись в очереди не удаляется до тех пор, пока потребитель не закончит работу. Блокировка гарантирует, что только 1 процесс действует на запись. Если вам не нужно сбрасывать записи очереди при сбое, вам не нужно использовать блокировку. Однако с блокировкой или без нее каждый запущенный потребитель обрабатывает записи в очереди. Таким образом, если вы хотите иметь параллельную обработку очереди, вы должны запустить несколько потребителей (в одной JVM или в отдельных JVM - это не имеет значения).

Вот движок рабочего процесса, который я написал, который использует очередь куратора для выполнения распределенной работы. Не стесняйтесь использовать его с открытым исходным кодом: http://nirmataoss.github.io/workflow/

...