vert.x 事件总线在缩放方面是否有限制
vert.x is there a limit of Event Bus in terms of scaling
试图了解 EventBus
在 Vert.x
中的限制。
在 集群模式 中有 Vert.x 个 运行 实例,因此在多个物理机器上有多个 Verticles 运行。假设我们有 2 台机器,每台机器有 10 个 Verticle。
所以,在数字上:
1 Vert.x
个集群模式实例
20 个 Verticles 实例(每台机器 10 个)
2台机器,
1 Event Bus
每秒 1000 000 个连接到达事件总线,并处理回 Verticles。
如果 2 台机器不够我仍然可以得到 100 台机器,但是:
据我了解,事件总线 (EB) 是 瓶颈 吗?由于 EB 是一个 "communication tube" 并且因为它对许多人来说是 一个,我想它将开始收集所有即将发生的事件的所有 噪音到它(地址 -> 服务,pub-sub 等),再加上它在节点之间运行,它会产生 NET 通信开销吗?如何扩展 EB?我应该关心它吗? (或者 Hazelcast
集群应该处理所有这些?)
我是否应该考虑在集群模式下在 100 台机器上使用 10 个 Verticle 创建 N 个集群,其中包含 1 个 Vert.x
实例?
问: 简单问一下,Event Bus
在扩展方面是否有限制,我是否应该考虑使用 N 总线创建基础设施以确保我的系统是否正确缩放?
(还没有完成我的测试..)
当您使用集群 EventBus 时,会发生两件事:
- Vert.x 在集群中注册的节点之间创建 TCP 连接
- 集群管理器跟踪 EventBus 消息处理程序(将 EventBus 地址映射到节点标识符的多重映射)
然后,如果您发送一条消息(点对点),Vert.x将从集群管理器中获取一个处理程序并使用 TCP 连接发送它到远程节点。
或者,如果您发布 一条消息 (publish/subscribe),Vert.x 会将消息发送到至少有一个处理程序的所有节点(它是接收节点负责将消息传递给所有本地处理程序)。
因此,集群 EventBus 的可扩展性有两个 "limits":多图的大小(随着地址和处理程序的数量而增长)和网络带宽。
当然,如果不进行测试就无法确定,但在现代硬件和良好的网络上,您应该能够使用固定数量的地址部署 100 个节点的集群。
试图了解 EventBus
在 Vert.x
中的限制。
在 集群模式 中有 Vert.x 个 运行 实例,因此在多个物理机器上有多个 Verticles 运行。假设我们有 2 台机器,每台机器有 10 个 Verticle。
所以,在数字上:
1 Vert.x
个集群模式实例
20 个 Verticles 实例(每台机器 10 个)
2台机器,
1 Event Bus
每秒 1000 000 个连接到达事件总线,并处理回 Verticles。
如果 2 台机器不够我仍然可以得到 100 台机器,但是:
据我了解,事件总线 (EB) 是 瓶颈 吗?由于 EB 是一个 "communication tube" 并且因为它对许多人来说是 一个,我想它将开始收集所有即将发生的事件的所有 噪音到它(地址 -> 服务,pub-sub 等),再加上它在节点之间运行,它会产生 NET 通信开销吗?如何扩展 EB?我应该关心它吗? (或者 Hazelcast
集群应该处理所有这些?)
我是否应该考虑在集群模式下在 100 台机器上使用 10 个 Verticle 创建 N 个集群,其中包含 1 个 Vert.x
实例?
问: 简单问一下,Event Bus
在扩展方面是否有限制,我是否应该考虑使用 N 总线创建基础设施以确保我的系统是否正确缩放?
(还没有完成我的测试..)
当您使用集群 EventBus 时,会发生两件事:
- Vert.x 在集群中注册的节点之间创建 TCP 连接
- 集群管理器跟踪 EventBus 消息处理程序(将 EventBus 地址映射到节点标识符的多重映射)
然后,如果您发送一条消息(点对点),Vert.x将从集群管理器中获取一个处理程序并使用 TCP 连接发送它到远程节点。
或者,如果您发布 一条消息 (publish/subscribe),Vert.x 会将消息发送到至少有一个处理程序的所有节点(它是接收节点负责将消息传递给所有本地处理程序)。
因此,集群 EventBus 的可扩展性有两个 "limits":多图的大小(随着地址和处理程序的数量而增长)和网络带宽。
当然,如果不进行测试就无法确定,但在现代硬件和良好的网络上,您应该能够使用固定数量的地址部署 100 个节点的集群。