Vertx集群替代

时间:2019-03-08 09:56:57

标签: cluster-computing hazelcast vert.x

除了Hazelcast以外,具有Vertx群集管理器的实际经验的其他人对我们的要求有何建议?

对于我们的(实时传感器数据)系统,我们在多个JVM中拥有数百个顶点,但是我们不需要需要或希望Eventbus跨越多个物理服务器。

我们在多台服务器上运行Vertx,但是如果我们不在所有服务器之间共享单个事件总线(我们希望明确地在服务器之间传递消息),我们的平台就不会那么复杂。

Hazelcast对我们来说是错误的群集管理器。我们不需要服务器之间的对等发现,但是至关重要的是,Hazelcast的任何发行版更改都意味着 new 客户端无法与运行先前版本的现有正在运行的客户端一起加入群集,因此会产生一个使用vertx编译的新verticle除非我们停止整个集群并在所有顶点重新编译为3.6.3的情况下重新启动它,否则无法将3.6.3集成到现有集群中。这严重影响了我们的发展。顶点具有更多的即插即用功能,而vertx可以做到,但是Hazelcast不能做到(由于版本不兼容)。

谁能推荐适合我们用例的vertx集群管理器?

1 个答案:

答案 0 :(得分:0)

我现在有时间回顾Vertx作为“集群管理器”直接支持的每个替代方案(Hazelcast,Zookeeper,Ignite,Infinispan),并且我们正在为我们的系统着手Zookeeper体系结构,以取代Hazelcast:< / p>

Zookeeper / Vertx multi-server architecture

这是我们做出决定的背景:

我们开始是一个非常典型的(如果有这样的事情)Vertx开发,在JVM中有多个顶点来响应事件总线上发布的外部事件(城市传感器数据进入我们的java / vertx feed处理程序)和正在处理的数据在许多其他vertex顶点中异步进行,通常涉及它们将新的派生数据发布为新的异步消息。

我们很快想使用多个JVM,主要是为了将提要处理程序与其余代码隔离开,因此,如果出现问题,则提要处理程序将继续运行(作为故障保护,它们将持久化数据并发布数据)。因此,我们(轻松地)添加了Vertx集群,以便同一台机器上的JVM可以进行通信,并且所有的顶点都可以在同一系统中发布/订阅消息。我们使用了默认的集群管理器Hazelcast,并修改了配置,因此vertx集群仅限于单个服务器(我们在不同的服务器上运行整个平台的多个版本,并且不希望它们相互混淆)。在六个JVM中,我们有数百个顶点。

我们的环境(搜索SmartCambridge vertx)是动态的,具有快速的开发周期(例如,创建一个新的feedhandler并将其数据发布到eventbus上),并且 意味着我们通常希望启动一个包含这些新顶点的JVM,并使其加入现有的vertx集群,这可能是永久性的,也可能只是一段时间。 Vertx / Hazelcast作为相当严肃的操作加入了(vertx)集群,即Hazelcast具有(我相信)Hazelcast集群成员和Hazelcast客户端的概念,客户端可以方便地往返,但作为加入Hazelcast集群成员需要在现有集群和新成员之间实现相当大的代码兼容性。每次我们升级Vertx库时,Hazelcast库版本都会更改,这使得新编译的vertx顶点无法加入现有的vertx集群。

请注意,我们已经尝试过让Vertx事件总线在多台服务器之间流动,并且还将事件总线扩展到浏览器/ javascript中,但是在两种情况下,发现在服务器之间路由消息以及在服务器和服务器之间路由消息变得更加简单/可靠。为此专门编写了垂直记录。

因此,鉴于我们的5个生产/开发服务器环境,但vertx eventbus始终限于单个服务器,因此新计划(经过Vertx开发几年)是在所有5个服务器上实现单个Zookeeper集群, Zookeeper的本机弹性,然后将每个生产服务器配置为使用不同的znode根目录(默认值为“ io.vertx”,但这是一个简单的配置选项)。

该设计在单个服务器(即Zookeeper + Vertx)上具有极具吸引力的简单最小构建,因此仍可以在随机计算机(例如笔记本电脑)上进行临时开发,但我们可以扩展平台以在单个服务器上拥有多个服务器设置通用的znode根目录即可轻松地构建vertx群集。

相关问题