Существует много деталей для разделения данных в кластере, таких как репликация и восстановление после сбоя.Подразумевая, что я имею в виду, вы имеете в виду, что у вас есть N узлов, и каждый узел должен обрабатывать 1 / N -й запросов, и что клиенты могут обнаружить, какие серверы работают.
Сначала вы создаете постоянный узел /service
.Каждый сервер при запуске создает эфемерный дочерний элемент /service
, что-то вроде /service/hostname:port
.Клиенты поддерживают часы на /service
и получают уведомления о добавлении и удалении детей (клиенты должны обновлять свои часы после каждого уведомления).Таким образом, клиент знает, какие серверы обслуживают запросы, и может распределять запросы соответствующим образом (циклически, произвольно).Когда сервер отключается, его эфемерный узел исчезает, и клиенты могут прекратить отправлять ему запросы.
Если вы ищете библиотеку zookeeper, куратор , вероятно, является лучшим.Клиенты будут использовать Path-Cache , в то время как сервер просто создает эфемерный узел.