2017-01-24 7 views
0

Предположим, у меня есть кластер, который использует Hazelcast для связи между членами, и я хочу предоставить службу выполнения задачи. Некоторые из членов кластера являются источниками задач (оптимизированы для запросов на обслуживание), а другие - это потоки задач (оптимизированы для длительных вычислений). Как настроить источники задач для доступа к службе, не позволяя им принимать и запускать задачи?Как источник задания может получить доступ к службе Hazelcast ExecutorService без принятия заданий?

Похожие вопросы (например Can a Hazelcast ExecutorService be created to execute on a subset of the cluster?) был дан ответ с предложениями, такие как использование executeOnMembers, но этот подход требует, чтобы я внедрить справедливую балансировки нагрузки и распределения задач внешней к ExecutorService, что противоречит цели использования сервиса.

Моим идеальным решением было бы сконфигурировать элементы источника задачи с помощью pool-size0, но это недопустимая конфигурация, которая отвергается валидатором.

+0

https://github.com/hazelcast/hazelcast/issues/532, кажется, именно то, что я хочу, но это открытый вопрос. –

+0

@Stephan Я не думаю, что они напрямую связаны. Билет был/больше связан с распределением данных. Вы можете деактивировать хранилище на члене с настройкой члена Lite и использовать MemberSelector для выбора элементов Lite для выполнения (см. Полный ответ ниже :-)) – noctarius

ответ

0

Вы должны установить ваши член вычисления как облегченные член (http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html#enabling-lite-members) и использовать версию MemberSelector из execute или submit, которая позволяет автоматически рандомизацию всех выбранных элементов (довольно простой способ балансировки нагрузки, но один и тот же Hazelcast использует по умолчанию для нормальные методы).

Эти два метода будут http://docs.hazelcast.org/docs/3.7/javadoc/com/hazelcast/core/IExecutorService.html#execute-java.lang.Runnable-com.hazelcast.core.MemberSelector- и http://docs.hazelcast.org/docs/3.7/javadoc/com/hazelcast/core/IExecutorService.html#submit-java.util.concurrent.Callable-com.hazelcast.core.MemberSelector-.

Сам MemberSelector - это интерфейс фильтра, в котором вы можете фильтровать элементы на основе ваших требований. Когда вы настраиваете элементы Lite, например, как return member.isLiteMember() (http://docs.hazelcast.org/docs/3.7/javadoc/com/hazelcast/core/Member.html#isLiteMember--). Дальнейшие корректировки процесса выбора могут быть выполнены с использованием дополнительных атрибутов элемента (http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html#defining-member-attributes).

Если вам нужна более сложная балансировка нагрузки, вы должны сделать это самостоятельно, однако вы уже заявили, вы не хотите, чтобы осуществить это :)