Что такое "разделение" в Apache Helix

Я изучаю Apache Helix. Я наткнулся на ключевое слово "Разделы".
В соответствии с определением, упомянутым здесь http://helix.apache.org/Concepts.html, каждая подзадача (основной задачи) называется разделом в Helix.
Когда я прошел через рецепт - диспетчер распределенной блокировки, разделы - это не что иное, как экземпляры ресурса. (Увеличьте numOfPartitions, количество блокировок увеличено).

final int numPartitions = 12;
admin.addResource(clusterName, lockGroupName, numPartitions, "OnlineOffline",
          RebalanceMode.FULL_AUTO.toString());

Может кто-нибудь объяснить на простом примере, что такое раздел в Apache Helix?

1 ответ

Решение

Я думаю, что вы правы, что раздел по сути является экземпляром ресурса. Как и в других распределенных системах, для достижения параллелизма используются разделы. Ресурс с одним экземпляром может работать только на одном компьютере. Разделы просто предоставляют конструкцию, необходимую для разделения одного ресурса между многими машинами, ну, в общем, путем разделения ресурса.

Это шаблон, который встречается в большой части распределенных систем. Разница, однако, заключается в том, что, хотя, например, распределенные базы данных явно определяют разделы, по существу, как подмножество некоторого большего набора данных, который может уместиться на одном узле, Helix более универсален в том смысле, что разделы не имеют определенного значения или варианта использования, но многие потенциальные значения и возможные варианты использования.

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

Этот шаблон обычно применяется ко многим проблемам масштабируемости и встречается практически в любой распределенной базе данных HA (например, DynamoDB, Hazelcast), map/ Reduce (например, Hadoop, Spark) и других системах, управляемых данными или задачами.

В блоге LinkedIn о Helix на самом деле приводится множество полезных примеров взаимосвязей между ресурсами и разделами.

Другие вопросы по тегам