Я предпочитаю гибрид из 1 и 2:
- Хешируйте UserId, скажем, в 4096 значениях.
- Найдите это число в «словаре», в котором есть номера с осколками
Если осколок переполнен, перенесите всех пользователей с некоторым номером хеша в другой осколок.
Если вы добавили осколок, перенесите в него несколько хеш-номеров- предпочтительно из занятых осколков.
Это вынуждает вас написать скрипт для перемещающихся пользователей и сделать его устойчивым.После этого многие другие задачи администратора становятся «простыми»:
- Отключение компьютера
- Обновление ОС (одна за другой через шарды)
- Обновите любое программное обеспечение, установленное на компьютерах.
- Перенос большого хеш-номера, но не занятого, на старый медленный осколок с большим диском.Аналогичным образом перенесите небольшой и загруженный в сегмент с большим количеством ядер и более быстрых дисков.
Каждый сегмент может представлять собой кластер высокой доступности (Galera, групповая репликация и т. Д.) Серверов как для надежности, так и для масштабирования чтения.(Sharding дает вам масштабирование при записи.
Должен быть способ распространять словарь для всех клиентов "быстро".
Все это работает хорошо, если, скажем, каждыйхэш в 3 различных шардах для HA. Каждый из 3 будет в географических местоположениях для устойчивости. В словаре будет 4 столбца, чтобы указать, где находятся копии. 4-й будет использоваться во время миграции.