首页 > 解决方案 > Vert.x 中队列和 Verticle 数量的限制

问题描述

我们现在正在重构我们用 Vert.x 编写的消息传递应用程序。应用程序处理来自用户的传入消息。最初,它的实现是为了有一个单独的 Verticle 实例来监听事件总线中的一个队列并处理所有传入的消息。

我们正在考虑做的是重构它,使它有点类似于actor模型:我们为每个活跃用户部署一个verticle的实例,并让它监听一个用户特定的队列。通过这种方式,verticle 实例可以维护用户特定的状态,并且消息处理的并行化变得更加容易。

然而,问题是这将导致部署大量的 Verticle(并行 30k - 50k)和事件总线中的大量队列。而且我们还需要手动维护 Verticle(取消部署未使用的 Verticle,并在有来自新用户的消息时部署这些 Verticle)。

问题是——这种actor风格的架构对vert.x有好处吗?它可以同时处理大量部署的verticles和eventbus队列吗?

标签: javaactorvert.x

解决方案


这里有一个主要的修正——EventBus 是一个单一的队列。所以,你不会有“大量的队列”。将只有一个。您将在单个队列上拥有大量地址。

但是这个数字有这么大吗?那么,一个 50K 元素的 HashMap 算不算巨大呢?可能不是,至少在键方面。现在请注意,这仅适用于非集群模式下的 Vert.x。Clustered Vert.x 是不同的(不过仍然可以工作)。

现在拥有这些verticles是另一回事。每个verticle都是一个单独的对象,如果你打算在里面存储一些数据,它会更大。但是,如果您能负担得起具有不错 RAM(16GB+)的机器,它应该可以正常工作。

但是,在这个解决方案中,我关心的是您计划按需部署 Verticle,然后取消部署它们。它确实会产生延迟,因此您的用户在发送第一条消息时会体验到性能下降。


推荐阅读