Ignite Zero Deployment如何工作

时间:2016-05-11 04:35:51

标签: java ignite

Ignite拥有出色的“零部署”功能,其工作流程如下:

  1. Ignite将检查类是否在本地类路径上可用(即如果 它是在系统启动时加载的,如果是的话,那就是 回。此处不会发生来自对等节点的类加载 情况下。
  2. 如果课程不在本地,则会发送请求 提供类定义的原始节点。始发节点 将发送类字节码定义,并将加载该类 工人节点。这种情况每班只发生一次 - 一次上课 定义加载到节点上,永远不必加载 试。
  3. 我写了一个示例代码:

    Collection<Long> broadcastResult = compute.broadcast(new IgniteCallable<Long>() {
                    @Override
                    public Long call() throws Exception {
                        long result = 0;
                        Long total = getTotal(10);
                        for (int i = 0; i < total; i++) {
                            LOGGER.info("adding {}, result {}", i, (result = result + i));
                        }
                        return result;
                    }
                });
    ...
        public static Long getTotal(long total) {
                LOGGER.info("Total:{}", total);
                return total;
            }
    

    它工作正常,远程节点打印add xxx日志十次。但我真的想知道如何?

    1. Ignite如何了解My IgniteCallable Instance的需求 getTotal(long total)方法?
    2. Ignite如何将My IgniteCallable Instance's Byte Code转移到 远程节点,我只给他My IgniteCallable Instance's Reference而不是类文件?
    3. 请帮帮我,谢谢!

1 个答案:

答案 0 :(得分:0)

回答你的问题。

  1. 最初,您的IgniteCallable被序列化并通过网络发送。当JVM开始执行它并到达需要getTotal的时候,它将查找具有此方法的类定义,如果JVM在本地找不到它,它将从它预加载它起源节点也是如此。

  2. 一切都很简单。基本上我们只使用Class之类的调用来对您实例igniteCalllable.getClass()进行序列化并通过网络发送。如果您查看Class对象源代码,您会看到其Serializable