2017-01-24 51 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 /问题/ 532似乎正是我想要的,但它是一个开放的问题 –

+0

@Stephan我不认为他们是直接相关的。机票更多地是影响数据分配。您可以使用lite成员设置关闭成员的存储,并使用MemberSelector选择lite成员来执行(请参阅下面的完整答案:-)) – noctarius

回答

0

,您应该设置你的计算成员精简版会员(http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html#enabling-lite-members)和使用的executesubmit使所有选中的成员自动随机化(负载平衡的一个相当简单的方式,但相同Hazelcast一个MemberSelector版本默认使用的正常方法)。

根据两种方法将是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)进一步调整选择过程。

如果你需要一个更复杂的负载平衡,你必须自己做,但是你已经说过你不想要实现:)

相关问题