Как надежно разделить данные между несколькими серверами - PullRequest
0 голосов
/ 08 апреля 2020

В настоящее время я читаю некоторые шаблоны проектирования распределенных систем. Одним из шаблонов проектирования, когда вам приходится иметь дело с большим количеством данных (миллиардами энтайров или несколькими петабайтными байтами), будет распределение их по нескольким серверам или единицам хранения.

Одним из решений для этого является использовать последовательность ха sh. Это должно привести к равномерному распределению по всем серверам в га sh.

Концепция довольно проста: мы можем просто добавить новые серверы, и это затронет только серверы в диапазоне, и если вы потеряете серверы остальные серверы в согласованном га sh будет принимать. Это когда все серверы в ha sh имеют одинаковые данные (в памяти, на диске или в базе данных).

Мой вопрос заключается в том, как мы обрабатываем добавление и удаление серверов с согласованного ha sh, где есть так много данных, что они не могут быть сохранены на одном хосте. Как они выясняют, какие данные хранить, а какие нет?

Пример:

enter image description here

Допустим, у нас есть 2 машины работает, «0» и «1». Они начинают достигать 60% своей максимальной вместимости, поэтому мы решили добавить дополнительную машину «2». Теперь большая часть данных на машине 0 должна быть перенесена на машину 2. Как бы мы автоматизировали, чтобы это происходило без простоев и было бы надежным.

Мой собственный предложенный подход будет что служба хосеет согласованно га sh и машины будут знать о том, как передавать данные между собой. Когда будет добавлен новый компьютер, будет ли согласованная служба ha sh вычислять затронутые диапазоны ha sh. Затем сообщите затронутой машине о затронутом диапазоне ha sh и о том, что им нужно перенести затронутые данные на машину 2. После того, как затронутые машины закончат передачу своих данных, они обратятся к согласованной службе ha sh. Как только все затронутые службы завершат передачу данных, согласованная служба ha sh начнет отправку данных на машину 2 и сообщит затронутой машине, что они могут удалить свои переданные данные сейчас. Если у нас есть пета-байты на каждом сервере, этот процесс может занять много времени. Нам необходимо следить за тем, что происходит во время передачи, чтобы мы могли синхронизировать c после них или отправлять записи / обновления на компьютер 0 и 2 во время передачи.

Мой подход сработал бы, но я чувствую, что это немного рискованно со всех сторон и вперед, поэтому я хотел бы услышать, есть ли лучший способ.

1 Ответ

1 голос
/ 11 апреля 2020

Как бы мы автоматизировали, чтобы это происходило без простоев и при этом было надежно?

Это зависит от технологии, используемой для хранения ваших данных, но, например, в Cassandra , нет «центральной» сущности, которая управляет процессом, и это делается, как почти все остальное; имея узлы, сплетничающие друг с другом. Нет простоев, когда новый узел присоединяется к кластеру (хотя производительность может немного снизиться).

Процесс выглядит следующим образом:

The new node joining the cluster is defined as an empty node without system tables or data.

When a new node joins the cluster using the auto bootstrap feature, it will perform the following operations

- Contact the seed nodes to learn about gossip state.
- Transition to Up and Joining state (to indicate it is joining the cluster; represented by UJ in the nodetool status).
- Contact the seed nodes to ensure schema agreement.
- Calculate the tokens that it will become responsible for.
- Stream replica data associated with the tokens it is responsible for from the former owners.
- Transition to Up and Normal state once streaming is complete (to indicate it is now part of the cluster; represented by UN in the nodetool status).

Взято из https://thelastpickle.com/blog/2017/05/23/auto-bootstrapping-part1.html

Таким образом, когда присоединяющийся узел находится в состоянии присоединения, он получает данные от других узлов, но не готов к чтению до завершения процесса (состояние «Вверх»).

DataStax также имеет некоторые материалы по этому вопросу https://academy.datastax.com/units/2017-ring-dse-foundations-apache-cassandra?path=developer&resource=ds201-datastax-enterprise-6-foundations-of-apache-cassandra

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...