Помещение записей кеша на конкретный сервер Ignite

У меня есть сетка данных Ignite из пяти серверов (скажем, A, B, C, D и E). Разделенный кэш был распределен между этими пятью серверами с числом резервных копий, равным 1.

Я хочу хранить 100 миллионов записей в этом секционированном кеше. Но я хочу контролировать разбиение записей моего кеша на серверы Ignite.

Возможно ли, чтобы мой клиент Ignite поместил запись в кэш на определенный сервер (скажем, E)?


person Aniketh Jain    schedule 13.12.2016    source источник


Ответы (1)


Единственный способ сделать это — реализовать собственную Функция сходства вместо тех, которые предоставляются из коробки. Однако я бы посоветовал вам переосмыслить этот подход, потому что он не масштабируется. Функции Affinity, включенные в Ignite, предназначены для обеспечения равномерного распределения на любом наборе узлов, поэтому вы можете динамически масштабировать вверх и вниз, когда вам это нужно. Ваш подход гораздо менее гибкий.

Также я бы порекомендовал вам просмотреть страницу документации о Affinity Collocation. Скорее всего, это даст вам подсказки о том, как лучше реализовать вашу логику.

И, наконец, не могли бы вы дать более подробную информацию о вашем варианте использования? Я буду рад дать несколько советов о том, как подойти к этому.

person Valentin Kulichenko    schedule 13.12.2016
comment
На самом деле я пытаюсь использовать Apache Ignite для создания фильтра Блума, для которого мне требуется распределенный массив из 100 миллиардов бит. Поскольку Ignite не поддерживает структуру данных распределенного массива, я пытаюсь разбить массив на небольшие наборы битов и сохранить их как элементы кэша. Я хотел контролировать распределение, так как это помогло бы мне решить, какой сервер имеет конкретную запись в кэше, и направить мои вычислительные задания (используя сетку Ignite Compute) на этот конкретный сервер. Есть ли способ получить UUID узла сервера с определенным ключом? - person Aniketh Jain; 13.12.2016
comment
Я только что обнаружил, что можно получить раздел, на котором присутствует конкретный ключ, с помощью функции CacheConfiguration().getAffinityFunction().partition(Object key). Можете ли вы сказать мне, можно ли найти UUID сервера Ignite, на котором есть этот раздел? - person Aniketh Jain; 13.12.2016
comment
Это должно быть сделано через Affinity API, который можно получить с помощью Ignite.affinity() метода. Но для отправки совмещенного закрытия вы можете просто использовать методы IgniteCompute.affinityRun() и IgniteCompute.affinityCall(). - person Valentin Kulichenko; 13.12.2016
comment
Поскольку невозможно определить сервер Ignite, который содержит ключ в кластере Ignite. Будет ли процессор Entry хорошим выбором для выполнения сопоставления ключей? - person Aniketh Jain; 14.12.2016
comment
Я просто дал вам способ :) Используйте Affinity API для ручного расчета сопоставления. Я имел в виду только то, что affinityRun(), affinityCall() сделают эту работу за вас автоматически. Эти методы также гарантируют, что разделы не будут вытеснены до завершения ваших вычислений. - person Valentin Kulichenko; 14.12.2016
comment
Спасибо @Валентин :) - person Aniketh Jain; 15.12.2016