Java 如何将Ignite配置为集群Tomcat应用程序的缓存

Java 如何将Ignite配置为集群Tomcat应用程序的缓存,java,tomcat,ignite,Java,Tomcat,Ignite,我正在一个web应用程序中工作,该应用程序将在Tomcat上运行,并使用ApacheIgnite作为缓存。 应用程序必须在集群环境中运行,该集群环境中已经有用于其他目的的Zookeeper 我的问题是如何最好地配置和微调Ignite节点 问题1。我应该:a在同一个客户端webapp中运行Tomcat中的每个Ignite节点吗? 或 b只有一个单独的进程在webapp中作为客户端运行Ignite和start Ignite 问题2。如何限制分配给Ignite的内存量? 如果我在一个单独的进程中运行,

我正在一个web应用程序中工作,该应用程序将在Tomcat上运行,并使用ApacheIgnite作为缓存。 应用程序必须在集群环境中运行,该集群环境中已经有用于其他目的的Zookeeper

我的问题是如何最好地配置和微调Ignite节点

问题1。我应该:a在同一个客户端webapp中运行Tomcat中的每个Ignite节点吗? 或 b只有一个单独的进程在webapp中作为客户端运行Ignite和start Ignite

问题2。如何限制分配给Ignite的内存量? 如果我在一个单独的进程中运行,我可以在启动时限制JVM,但是我可以在Tomcat内部运行类似的资源消耗和垃圾收集限制吗

我的当前配置在下面的代码摘录中,其中CacheConfiguration设置为CacheMode.PARTITIONED

Q1您可以使用这两种方法。您可以从在同一JVM中使用Ignite服务器节点开始,看看它是否适合您的情况

Q2从Ignite2.0开始,它将不使用太多堆内存,而是使用堆外内存来存储数据。您可以通过在数据存储配置中更改默认数据区域的大小来指定内存余量。然后启用页面逐出,以确保不会耗尽此内存

private ZookeeperDiscoverySpi getZookeeperDiscoverySpi() {
    ZookeeperDiscoverySpi zkDiscoverySpi = new ZookeeperDiscoverySpi();
    zkDiscoverySpi.setZkConnectionString("127.0.0.1:2181");
    zkDiscoverySpi.setZkRootPath("/apacheIgnite");
    return zkDiscoverySpi;
}

private IgniteConfiguration getDefaultConfiguration(CacheConfiguration cacheCfg) {
    IgniteConfiguration igniteConfig = new IgniteConfiguration();
    igniteConfig.setIgniteInstanceName("IgniteInstanceName");
    igniteConfig.setCacheConfiguration(cacheCfg);
    igniteConfig.setClientMode(clientMode); // set to true for Tomcat webapp, false for Ignite node process
    igniteConfig.setPeerClassLoadingEnabled(false);
    igniteConfig.setMetricsLogFrequency(0);
    igniteConfig.setDiscoverySpi(getZookeeperDiscoverySpi());
    igniteConfig.setMetricsLogFrequency(0);
    return igniteConfig;
}