hazelcast - vert.x 事件总线在扩展方面是否有限制

标签 hazelcast vert.x

尝试了解 Vert.xEventBus 的限制。

有 Vert.x 实例以集群模式运行,因此有多个 Verticle 运行在多台物理机上。假设我们有 2 台机器,每台机器有 10 个垂直体。

所以,从数字来看: 集群模式下的 1 个 Vert.x 实例 20 个 Verticle 实例(每台机器 10 个) 2台机器, 1 事件总线

每秒有 1000 000 个连接到达事件总线,并处理回 verticle。

如果2台机器不够我仍然可以得到100台机器,但是:

据我了解,事件总线 (EB) 是这里瓶颈吗?由于 EB 是一个“通信管道”,并且对于许多人来说它是一个,我想它将开始收集所有传入它的事件的所有噪音(地址 -> 服务) ,pub-sub等),再加上它在节点之间运行,它会带来NET通信开销吗?如何扩展 EB?我应该关心它吗? (或者 Hazelcast 集群应该处理这一切?)

我是否应该考虑在集群模式下使用 1 个 Vert.x 实例在 100 台机器上使用 10 个 verticle 创建 N 个集群?

问:问一个简单的问题,Event Bus 在扩展方面是否存在限制?我是否应该考虑使用 N 总线创建基础设施以确保我的系统是否正确缩放?

(尚未完成我的测试..)

最佳答案

当您使用集群EventBus时,会发生两件事:

  1. Vert.x 在集群中注册的节点之间创建 TCP 连接
  2. 集群管理器跟踪 EventBus 消息处理程序(将 EventBus 地址映射到节点标识符的多重映射)

然后,如果您发送一条消息(点对点),Vert.x 将从集群管理器中获取一个处理程序,并使用 TCP 连接将其发送到远程节点。

或者,如果您发布一条消息(发布/订阅),Vert.x 会将消息发送到至少有一个处理程序的所有节点(接收节点有责任传递消息)向所有本地处理程序发送消息)。

因此,集群式 EventBus 可扩展性有两个“限制”:多重映射的大小(随着地址和处理程序的数量而增长)和网络带宽。

当然,如果不进行测试就无法确定,但在现代硬件和良好的网络上,您应该能够使用固定数量的地址部署 100 个节点的集群。

关于hazelcast - vert.x 事件总线在扩展方面是否有限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47745072/

相关文章:

java - Hazelcast 获取 Imap 中 key 的 ttl

java - 哪种内存缓存实现需要花费最少的精力来构建

Spring 缓存抽象 : How to Deal With java. util.Optional<T>

netty - 使用 vertx web 客户端版本 4.0.0 时出现 java.lang.IllegalAccessError

hazelcast - 在具有百万条目的 imap 上使用执行程序的 hazelcast 性能

java - Hazel Cast 客户端端口问题

java - 在代理后面运行顶点

java - 一个线程中的值不为 null,而另一线程中的值为 null

java - 使用 AWS 加入策略时 Vertx Hazelcast 集群错误 "There is no discovery strategy factory to create ..."

java - Vertx 中有应用程序变量吗?