В настоящее время я читаю некоторые шаблоны проектирования распределенных систем. Одним из шаблонов проектирования, когда вам приходится иметь дело с большим количеством данных (миллиардами энтайров или несколькими петабайтными байтами), будет распределение их по нескольким серверам или единицам хранения.
Одним из решений для этого является использовать последовательность ха sh. Это должно привести к равномерному распределению по всем серверам в га sh.
Концепция довольно проста: мы можем просто добавить новые серверы, и это затронет только серверы в диапазоне, и если вы потеряете серверы остальные серверы в согласованном га sh будет принимать. Это когда все серверы в ha sh имеют одинаковые данные (в памяти, на диске или в базе данных).
Мой вопрос заключается в том, как мы обрабатываем добавление и удаление серверов с согласованного ha sh, где есть так много данных, что они не могут быть сохранены на одном хосте. Как они выясняют, какие данные хранить, а какие нет?
Пример:
Допустим, у нас есть 2 машины работает, «0» и «1». Они начинают достигать 60% своей максимальной вместимости, поэтому мы решили добавить дополнительную машину «2». Теперь большая часть данных на машине 0 должна быть перенесена на машину 2. Как бы мы автоматизировали, чтобы это происходило без простоев и было бы надежным.
Мой собственный предложенный подход будет что служба хосеет согласованно га sh и машины будут знать о том, как передавать данные между собой. Когда будет добавлен новый компьютер, будет ли согласованная служба ha sh вычислять затронутые диапазоны ha sh. Затем сообщите затронутой машине о затронутом диапазоне ha sh и о том, что им нужно перенести затронутые данные на машину 2. После того, как затронутые машины закончат передачу своих данных, они обратятся к согласованной службе ha sh. Как только все затронутые службы завершат передачу данных, согласованная служба ha sh начнет отправку данных на машину 2 и сообщит затронутой машине, что они могут удалить свои переданные данные сейчас. Если у нас есть пета-байты на каждом сервере, этот процесс может занять много времени. Нам необходимо следить за тем, что происходит во время передачи, чтобы мы могли синхронизировать c после них или отправлять записи / обновления на компьютер 0 и 2 во время передачи.
Мой подход сработал бы, но я чувствую, что это немного рискованно со всех сторон и вперед, поэтому я хотел бы услышать, есть ли лучший способ.