当前位置: 首页 > 知识库问答 >
问题:

Vertx聚类替代方案

谢鸿飞
2023-03-14

除了Hazelcast之外,任何有Vertx群集管理器实际经验的人都对我们的以下要求有什么建议?

对于我们的(实时传感器数据)系统,我们在多个JVM中有数百个垂直链接,但我们不需要或不希望eventbus跨多个物理服务器。

我们在多个服务器上运行Vertx,但如果我们不在所有服务器之间共享一个eventbus,那么我们的平台就不那么复杂了(我们更愿意明确说明在服务器之间传递消息)。

Hazelcast对我们来说是错误的集群管理器。我们不需要它在服务器之间的对等点发现,但至关重要的是,Hazelcast的任何版本更改都意味着新客户端无法加入运行先前版本的现有运行客户端的集群,因此将一个用vertx 3.6.3编译的新Verticle引入现有集群是不可能的,除非我们停止整个集群并重新启动它,将所有Verticle重新编译为3.6.3。这严重影响了我们的开发。Verticle更加即插即用很有帮助,vertx可以做到这一点,但Hazelcast不能(由于持续的版本不兼容)。

有人能推荐一个适合我们使用案例的vertx群集管理器吗?

共有1个答案

姚乐家
2023-03-14

我现在有时间回顾了Vertx作为“群集管理器”直接支持的每个备选方案(Hazelcast、Zookeeper、Ignite、Infinispan),我们正在为我们的系统开发Zookeeper体系结构,取代Hazelcast:

以下是我们决定的背景:

我们一开始是一个非常典型的(如果有这种情况的话)Vertx开发,JVM中有多个Verticle,用于响应eventbus上发布的外部事件(城市传感器数据进入我们的java/Vertx提要处理程序),以及在许多其他Vertx Verticle中异步处理的数据,通常涉及它们将新的派生数据发布为新的异步消息

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

我们的环境(search SmartCambridge vertx)相当动态,开发周期很快(例如,创建一个新的feedhandler并让它在eventbus上发布数据),这意味着我们通常希望启动一个包含这些新Verticle的JVM,并让它加入现有的vertx集群,可能是永久的,可能只是暂时的。Vertx/Hazelcast加入(Vertx)集群是一项相当严肃的操作,即Hazelcast(我相信)有一个Hazelcast集群成员和Hazelcast客户端的概念,客户端可以很容易地来来去去,但作为成员加入Hazelcast集群需要现有集群和新成员之间相当大的代码兼容性。每次升级Vertx库时,Hazelcast库的版本都会发生变化,这使得新编译的Vertx verticle无法加入现有的Vertx集群。

请注意,我们已经尝试了在多个服务器之间使用Vertx eventbus流,并将eventbus扩展到浏览器/javascript中,但在这两种情况下,我们都发现显式地将消息从服务器路由到服务器更简单/更健壮,并且专门为此目的编写了verticle。

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

这种设计在单个服务器(即Zookeeper Vertx)上有一个吸引人的简单最小构建,因此在随机机器(如笔记本电脑)上进行特殊开发仍然是可能的,但我们可以通过设置公共znode根来扩展我们的平台,使多个服务器位于单个Vertx集群中。

 类似资料:
  • 1 谱聚类算法的原理   在分析快速迭代聚类之前,我们先来了解一下谱聚类算法。谱聚类算法是建立在谱图理论的基础上的算法,与传统的聚类算法相比,它能在任意形状的样本空间上聚类且能够收敛到全局最优解。 谱聚类算法的主要思想是将聚类问题转换为无向图的划分问题。 首先,数据点被看做一个图的顶点v,两数据的相似度看做图的边,边的集合由$E=A_{ij}$表示,由此构造样本数据集的相似度矩阵A,并求出拉普拉斯

  • 问题内容: 以前,我总是以为Vector在长度未知的情况下可以很好地用于非描述对象。据我所知,我也认为它也是线程安全的 有什么改变不应该再使用了,替代方案是什么? 问题答案: 您应该使用而不是。虽然使用了内部同步,但是对于实际的一致性而言,这很少够用,只会在真正不需要时降低执行速度。 另请参阅此stackoverflow问题。

  • 可扩展类检测。 这个 sqlalchemy.ext.instrumentation 包提供了ORM中类检测的备用系统。类检测是指ORM如何在类上放置属性,这些属性维护数据并跟踪对该数据的更改,以及安装在类上的事件挂钩。 注解 提供扩展包的目的是为了与其他对象管理包集成,这些对象管理包已经执行了自己的检测。不适用于一般用途。 有关如何使用工具扩展的示例,请参见示例 属性检测 . API引用 Obje

  • 问题内容: 使用hibernate实现联合查询,我必须采取什么替代方法?我知道hibernate状态目前不支持联合查询,现在我看到的建立联合的唯一方法是使用视图表。 另一个选择是使用普通的jdbc,但是这样一来,我将失去所有示例/条件查询功能,以及hibernate对表/列执行的hibernate映射验证。 问题答案: 使用hibernate实现联合查询,我必须采取什么替代方法?我知道hibern

  • 目前,Android的EditText在处理大量文本行(10000行)时速度非常慢。这种放缓似乎部分是由于EditText支持跨度,主要是由于EditText正在计算每行的宽度,这非常昂贵。EditText有什么更快的替代品,或者优化它以使其可用的方法吗? 编辑:方法跟踪如下:

  • 我正在尝试为一个简单的android应用程序编写代码,我想知道是否有其他方法可以手动导入每个类,或者为什么它会显示为红色,因为每当我以类似的方式编写东西时,它都不会运行。android studio屏幕截图