Как хранить и обрабатывать отображение Id на адрес узла в кластере?
Пишу распределенное приложение, которое реплицируется по алгоритму рафт.
У каждого узла есть свой Id и в кластере есть только 1 лидер. Когда запрос присылается на узел не лидер, то этот узел отвечает, кто им является - передает Id лидера.
Сейчас реализую клиентскую библиотеку, которая будет сама переподключаться к лидеру, когда запрос отправлен не на него.
Вопрос в следующем: как правильно хранить и обрабатывать отображение Id - адрес узла?
Какие идеи есть:
- При создании клиента передавать ему список известных адресов. А чтобы понять Id каждого узла, раз за разом подключаться к новым узлам. Но возможно придется подключиться к каждому узлу, если каждый раз будут приходить неизвестные Id.
- Добавить в процесс инициализации подключения отправку узлом списка Id - адрес. Но в этом случае адрес может быть неизвестен клиенту. Например, если работаем в докере (другая сеть).
Может есть другие идеи или, даже лучше примеры проектов?
Смысл рафта в том чтобы выбрать лидера. Как только лидер выбран - можно пересылать всех
клиентов на его IP адрес как в балансировщике. В этом случае все клиенты будут видеть единую
табличку свойств. Как в зукипере.
Больше в рафте никакого смысла нет.
Поэтому безразлично к какому узлу подключается клиент.