hazelcast - 轻集群Vert.x

标签 hazelcast vert.x

我们有许多不同的 vertx 实例,它们通过 Hazelcast 之上的集群 EventBus 相互通信。开箱即用,效果很好。

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

是否可以以最小的影响进行顶点间通信?有什么解决办法吗?

UPD。更多详情

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

为了进行比较,我运行了一个 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:我再次重复一遍,我只谈论初始化阶段。

最佳答案

您在测量中注意到的差异是由于 vertx-hazelcast 和 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

关于hazelcast - 轻集群Vert.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42714804/

相关文章:

java - 加载 hazelcast 的所有实现

java - 当被调用者成员发生序列化异常时,Hazelcast 调用者成员会抛出超时异常

java - Apache Ignite 默认 CacheStore 配置

java - 数据相关测试

java - 具有 Hazelcast session 复制功能的自定义 session 监听器

java - Hazelcast:连接到远程集群

docker - Vert.x 高可用性不起作用

java - 我如何使用 MapStore 实现将 hazelcast 存储在我的数据库中

file-upload - vertx Upload-File 正确方法