我希望有人以前做过,或者如果有人可以建议 Gridgain 是否支持此功能。
我的用例是:
- 使用修改后的示例/config/example-compute.xml 启动 Gridgain 节点以支持工作窃取(见下文)
- 向集群提交 300 个任务。它们开始在第一个节点上执行,但是由于执行需要时间,因此有很长的未完成任务队列
- 使用相同的配置启动一个新节点并观察它加入集群
- 节点 2 不应该从第一个节点窃取一些工作吗?不幸的是,它没有,我们必须等待节点 1 上的所有任务完成,而节点 2 什么都不做
我认为这GridJobStealingCollisionSpi
是在做某事,因为当我打开调试日志记录时,我可以在日志中看到以下消息Thief node does not belong to task topology [...]
:并查看源代码,我认为正在发生的GridJobStealingCollisionSpi
是检查窃取节点是否在提交任务的拓扑中。
有没有人看到我的用例按我的预期工作?
我已经修改了 example-compute.xml(您可以在 pastebin.com/gGsfEebG 找到整个文件)以通过添加以下配置来支持工作窃取:
<property name="collisionSpi">
<bean class="org.gridgain.grid.spi.collision.jobstealing.GridJobStealingCollisionSpi">
<property name="activeJobsThreshold" value="50" />
<property name="waitJobsThreshold" value="10" />
<property name="messageExpireTime" value="1000" />
<property name="maximumStealingAttempts" value="100" />
<property name="stealingEnabled" value="true" />
</bean>
</property>
<property name="failoverSpi">
<bean class="org.gridgain.grid.spi.failover.jobstealing.GridJobStealingFailoverSpi">
<property name="maximumFailoverAttempts" value="5" />
</bean>
</property>
<property name="metricsUpdateFrequency" value="1000"/>
我的 java 类可以在这里的 pastebin 找到:http: //pastebin.com/AS8iKqjj,这里是运行它的详细说明:
运行 ComputeSleepExample 类,该类启动一个节点并向集群提交 300 个将休眠 5 秒的作业
java -DGRIDGAIN_DEBUG_ENABLED=true -DGRIDGAIN_QUIET=false -cp examples/config:examples/target/classes:examples/target/libs/*:target/gridgain-6.1.9.jar:modules/spring/target/gridgain-spring-6.1.9.jar org.gridgain.examples.compute.ComputeSleepExample 300 5000
启动一个新节点,你会看到所有作业都在节点1上执行
bin/ggstart.sh examples/config/example-compute.xml