Я пытаюсь реализовать алгоритм выбора лидера в своем распределенном приложении node.js. Я использую Kubernetes в качестве диспетчера контейнеров и развертываю контейнеры Docker. У меня нет сведений о хосте и порте других экземпляров приложения, работающих в разных модулях. .
Kubernetes уже использует алгоритм выбора лидера, чтобы выбрать одного лидера за раз, но мое приложение находится внутри контейнера и контейнера, оно не знает, являюсь ли я лидером или нет. Существует также один пример кода, чтобы узнать, кто является текущим лидером.
https://github.com/kubernetes-retired/contrib/tree/master/election
Этот код помогает узнать, какой контейнер является лидером, но для вызова kubernetes API требуются особые привилегии.
Алгоритм Bully / Ring может быть решением, но поскольку существует ограничение не использовать какие-либо очереди / централизованные сервисы, такие как redis или zookeeper, так как нам нужен другой процесс для их запуска, но я могу использовать общую файловую систему, так как она не будет требуется мониторинг дополнительного процесса.
Не уверен, возможно ли использовать redis / zookeeper без запуска нового процесса, и это можно сделать внутри самого приложения.
Как я могу реализовать это решение, используя приложение, либо пингуя их, чтобы проверить, не вышло ли оно, а затем заставить себя освоить. В этом процессе также происходит много условий гонки.
Я попробовал алгоритм лидера Kubenetes, чтобы выбрать лидера, но из-за ограниченного доступа к API его невозможно использовать.
Алгоритм Tried Bully, но поскольку контейнеры находятся в разных модулях, они не знают друг о друге.
Алгоритм Tried Ring, но такая же проблема, как и у алгоритма Bully.
Я рассчитываю осуществить выборы лидеров, используя любой алгоритм, но не вводя никаких новых процессов.