Verticles 核心上的多个实例

Verticles multiple instances on cores

我是Vertx的新手,我有一个疑问,不幸的是Whosebug还没有解决。我有 ubuntu 个 2 核服务器,我想使用此代码。

  @Override
  public void start() throws Exception {
    vertx.deployVerticle(StringName, new DeploymentOptions().setInstances(2));
  }

上面的verticle是我个人网站的一个http服务器。 doc 表示

This is useful for scaling easily across multiple cores. For example you might have a web-server verticle to deploy and multiple cores on your machine, so you want to deploy multiple instances to utilise all the cores.

好的,我的英特尔处理器中有 2 个内核,所以我 setInstances(2) 进行缩放。


说我明天起床,我想添加一个verticle来管理数据库和其他逻辑。我还有2个核心。哪个是正确的代码?

v1

  @Override
  public void start() throws Exception {
    //2 instances of http server verticle
    vertx.deployVerticle(StringName, new DeploymentOptions().setInstances(2));
    //2 instances of database verticle
    vertx.deployVerticle(StringName, new DeploymentOptions().setInstances(2));
  }

v2

  @Override
  public void start() throws Exception {
    //1 instance of http server verticle
    vertx.deployVerticle(StringName, new DeploymentOptions().setInstances(1));
    //1 instance of database verticle
    vertx.deployVerticle(StringName, new DeploymentOptions().setInstances(1));
  }

所以换句话说,我问的是这个。知道我有 2 个核心;实例的 TOTAL SUM 必须是 2(所以 1 个 http 和 1 个数据库)?或者 2 必须是每个实例的最大值?

实际上这不是必须的,但我想做最佳实践

你的问题没有绝对的答案,这完全取决于你的每个verticle的作用。您必须对不同的设置进行基准测试以确定适合您的特定用例的设置。

在此过程中您可能会考虑的事情:如果您有一个 "database" Verticle,您可能会做一些小处理(例如重新格式化数据),而 http 服务器 Verticle 只会转发事件总线上的数据。在这种情况下,也许有更多的数据库 Verticle 实例会更好。但同样,在做出决定之前对不同的设置进行基准测试。