2017-01-24 90 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)進一步調整選擇過程。

如果你需要一個更復雜的負載平衡,你必須自己做,但是你已經說過你不想要實現:)

相關問題