我们有许多不同的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:我再说一遍,我只谈论初始阶段。
答案 0 :(得分:0)
您在测量中发现的差异是由于vertx-hazelcast& amp; vertx-zookeeper集群管理器工作:
这至少应该解释你在加载的类数量上注意到的差异。也就是说,您可以启动一个单独的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