Light聚集Vert.x

时间:2017-03-10 09:29:45

标签: hazelcast vert.x

我们有许多不同的vertx实例,它们通过Hazelcast上方的集群EventBus相互通信。它很好用。

但似乎vertx的实现对我们来说是开销。 Hazelcast显着增加了每个实例的消耗内存和开始时间。 此外,我们不使用任何内存存储,我们也不使用任何AsyncMaps和HA功能。

是否可以以最小的影响进行inter-vertx通信?有没有解决方案?

UPD。更多细节

我尝试了vert.x v3.3.3和v3.4.0,都使用了hazelcast v3.6.3。 此外,我尝试使用3.4 vert.x的较新版本的hazelcast。

为了比较,我根据它运行了zookeeper和vert.x的实例。

我总共收集了一些初始化阶段的统计信息。 对我来说,到集群的连接时间更重要。另外我注意到hazelcast在开始时加载了很多com.hazelcast *类(大约有一半是在项目中加载的)

|                              | hazelcast 3.6.3 | hazelcast 3.7.5 | Hazelcast 3.8 | Zookeeper 3.4.8 | No cluster |
|------------------------------|-----------------|-----------------|---------------|-----------------|------------|
| Loaded classes(init phase)   | 2685            | 2703            | 3131          | 257             | 0          |
| Start of the 1st member(sec) | 2.3s±0.2        | 2.4±0.2         | 2.4s±0.2      | 1.0s±0.1        | 0.4        |
| Start of 2d/3d member(sec)   | 4               | 4.5±0.2         | 4.5s±0.2      | 1.0s±0.1        | —          |

我使用的是Ubuntu x64和java8.121

PS:我再说一遍,我只谈论初始阶段。

1 个答案:

答案 0 :(得分:0)

您在测量中发现的差异是由于vertx-hazelcast& amp; vertx-zookeeper集群管理器工作:

  • 当使用vertx-zookeeper时,你的vert.x实例启动一个连接到现有Zookeeper集群的Apache Curator客户端[1]:Zookeeper集群本身在其他JVM上单独运行。
  • 使用hazelcast集群管理器运行vert.x时,集群管理器启动运行嵌入在同一JVM中的Hazelcast成员:您没有连接到单独的Hazelcast集群,而是在同一JVM中运行完整集群成员你的vert.x实例。

这至少应该解释你在加载的类数量上注意到的差异。也就是说,您可以启动一个单独的Hazelcast实例并配置集群管理器以启动一个lite成员[2]。 Hazelcast lite成员不存储任何数据,因此在加载的类中可能更轻,并且在运行时肯定更轻,因为它不参与共享数据管理,而是充当集群数据结构的客户端。

就连接时间而言,您的结果可能会有所不同,具体取决于您使用的是多播,TCP / IP还是其他群集发现方法。请参阅[3]中有关备用集群发现配置选项的更多信息。

[1] https://github.com/vert-x3/vertx-zookeeper/blob/master/src/main/asciidoc/java/index.adoc#how-to-work

[2] http://docs.hazelcast.org/docs/3.8/manual/html-single/index.html#enabling-lite-members

[3] http://docs.hazelcast.org/docs/3.8/manual/html-single/index.html#discovering-cluster-members