Таблетки распределены по узлам в YugabyteDB с балансировкой нагрузки.
В частности, когда узел выходит из строя, нагрузка распределяется равномерно по оставшимся подходящим узлам. [См. Пример ниже, чтобы выяснить, почему необходимо учитывать «подходящие» узлы.] Бремя сбойного узла НЕ go только для одного равноправного узла. Так что да, вы получаете преимущество Apache Cassandra как виртуальные узлы, но автоматически. Этот аспект применим ко всем API-интерфейсам YugabyteDB (Y SQL и YCQL).
В качестве примера:
Предположим, у вас есть кластер из 9 узлов, один кластер D C с каждым узел, скажем, 96 таблеток. Принимая во внимание фактор репликации (RF) 3, каждый узел будет лидером для 1/3 из них - около 32 планшетов и последователем для 2/3 из них - около 64 планшетов.
Когда узел выходит из строя, оставшиеся 8 узлов берут на себя расширенные обязанности довольно равномерным образом. Первоначально 32 лидера будут распределены между 8 узлами, поэтому каждый узел станет лидером для ~ 4 дополнительных планшетов. Это переключение происходит довольно агрессивно, когда последователи не слышат от лидеров несколько ударов сердца.
Если узел не работает в течение продолжительного периода времени, то эти 96 недостаточно реплицированных 96 планшетов (с RF = 2) будут возвращены к RF = 3, снова в унифицированной манере с использованием оставшихся 8 узлов .
При настройке нескольких регионов не все узлы могут быть приемлемыми. Например, при 15-узловой настройке с 3 участками (с 5 узлами в каждой области) с коэффициентом репликации (RF), равным 3, если узел в области не работает, в итоге останутся только 4 оставшихся узла в области. принимая нагрузку на неисправный узел равномерно. Это связано с тем, что при размещении данных по-прежнему необходимо соблюдать ограничения репликации данных по регионам. Мы не хотим, чтобы несколько копий данных оказались в одном регионе.