Я вижу два сценария добавления дополнительных узлов:
- Ваш текущий набор узлов недостаточен для ваших требований к производительности.
- Вы добавляете новые данные, поэтому со временем вам необходимо добавить новые узлы
Во втором случае, если идентификаторы UUID имеют некоторый компонент, основанный на времени, разделение по возрасту может быть достаточно хорошим
Но я предполагаю, что это первый случай, который более интересен. По мере использования ваших данных вы обнаружите, что разделение должно измениться, чтобы распределить работу достаточно. В этом случае я не вижу альтернативы перемещению некоторых разделов на новые узлы, по определению текущий набор узлов перегружен. Мне не ясно, в какой степени проблема - это фактическая миграция, которая вызывает беспокойство? Или же клиентам вдруг нужно перейти на новое место для своих данных?
Можете ли вы реализовать какой-нибудь ленивый подход поиска?
Client initialises with current table of servers,
(hence knows the modulus to apply to uuid and can route on that basis)
Servers decide to reorganise themselves
Client gets a request, calclulates a now invalid modulus
Attempts to access the data
response says "Gone Away" **AND** gives the new server info
Client can now recompute the location