我正在使用将在Tomcat上运行并使用Apache Ignite作为缓存的Web应用程序。 该应用程序必须在已经具有Zookeeper用于其他目的的群集环境中运行。
我的问题是如何最好地配置和微调Ignite节点?
问题1。我是否应该: a)我在同一客户端Web应用程序中的Tomcat中运行每个Ignite节点? 要么 b)有一个单独的进程运行Ignite,并仅在Web应用程序中以客户端身份启动Ignite。
第二季度。如何限制分配给Ignite的内存量? 如果我在一个单独的进程中运行,则可以仅在启动时限制该JVM,但是我可以在Tomcat中运行时对资源消耗和垃圾回收崩溃实现类似的限制吗?
我当前的配置在下面的代码摘录中,其中CacheConfiguration
设置为CacheMode.PARTITIONED
。
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;
}
答案 0 :(得分:1)
Q1 您可以同时使用两种方法。您可以从在同一JVM中拥有Ignite服务器节点开始,看看是否适合您的情况。
Q2 从Ignite 2.0开始,它不会使用太多堆,而是使用堆外内存来存储数据。您可以通过更改数据存储配置中(默认)数据区域的大小来指定内存余量。然后启用页面驱逐以确保您不会用完该内存。