java - Vert.x 中队列和 Verticle 数量的限制
问题描述
我们现在正在重构我们用 Vert.x 编写的消息传递应用程序。应用程序处理来自用户的传入消息。最初,它的实现是为了有一个单独的 Verticle 实例来监听事件总线中的一个队列并处理所有传入的消息。
我们正在考虑做的是重构它,使它有点类似于actor模型:我们为每个活跃用户部署一个verticle的实例,并让它监听一个用户特定的队列。通过这种方式,verticle 实例可以维护用户特定的状态,并且消息处理的并行化变得更加容易。
然而,问题是这将导致部署大量的 Verticle(并行 30k - 50k)和事件总线中的大量队列。而且我们还需要手动维护 Verticle(取消部署未使用的 Verticle,并在有来自新用户的消息时部署这些 Verticle)。
问题是——这种actor风格的架构对vert.x有好处吗?它可以同时处理大量部署的verticles和eventbus队列吗?
解决方案
这里有一个主要的修正——EventBus 是一个单一的队列。所以,你不会有“大量的队列”。将只有一个。您将在单个队列上拥有大量地址。
但是这个数字有这么大吗?那么,一个 50K 元素的 HashMap 算不算巨大呢?可能不是,至少在键方面。现在请注意,这仅适用于非集群模式下的 Vert.x。Clustered Vert.x 是不同的(不过仍然可以工作)。
现在拥有这些verticles是另一回事。每个verticle都是一个单独的对象,如果你打算在里面存储一些数据,它会更大。但是,如果您能负担得起具有不错 RAM(16GB+)的机器,它应该可以正常工作。
但是,在这个解决方案中,我关心的是您计划按需部署 Verticle,然后取消部署它们。它确实会产生延迟,因此您的用户在发送第一条消息时会体验到性能下降。
推荐阅读
- java - 连接远程服务器时出现Orientdb连接问题
- multithreading - 乐观并发控制说明
- android - 无法在 Android Studio 上安装 GPU 调试工具
- c# - 我可以添加 NuGet 包作为运行时依赖项吗?
- regex - 如何使用正则表达式在两个随机文本之间获取文本
- debugging - 如何在 Rust 宏中进行调试
- r - R:如何使用原始宽表的列名作为行来汇总长格式的 data.table?
- css - 对最后一个孩子应用一些 CSS
- ansible - YAML:“ansible 模块不支持的参数”
- python - 根据条件更改 matplotlib 的刻度标签的颜色