0

在大多数 Web 应用程序中,应用程序都构建在 vertx 中,我已经看到人们在单个微服务中创建了两个 verticles。

  • 一种是用于处理 HTTP 请求的 rest verticle。
  • 另一种是通过dao verticle 与数据库进行通信。

每当有任何 api 请求时,HTTP verticle 通过事件总线与 dao verticle 进行通信。

但是考虑到顶点是单线程的,在这里创建两个不同的顶点有什么好处。事件总线上的通信会产生不必要的开销,而我只能创建一个处理 rest 和 i/o 的 Verticle。

我可以理解在阻塞调用的情况下有一个单独的工人 Verticle 的情况。但是在非阻塞的情况下,i/o调用的用例是什么呢?

4

1 回答 1

1

Vert.x 不是单线程的。它使用多反应器模式

在标准反应器实现中,有一个事件循环线程在循环中运行,当所有事件到达时将所有事件传递给所有处理程序。

单线程的问题是它在任何时候都只能在单核上运行,所以如果你想让你的单线程反应器应用程序(例如你的 Node.js 应用程序)在你的多核服务器上扩展,你必须启动并管理许多不同的流程。

Vert.x 在这里的工作方式不同。每个 Vertx 实例都维护多个事件循环,而不是单个事件循环。默认情况下,我们根据机器上可用内核的数量来选择数字,但这可以被覆盖。

这意味着与 Node.js 不同,单个 Vertx 进程可以跨服务器扩展。

因此,通过运行多个 Verticle,您可以让您的服务分布在多个线程/CPU 内核上。

于 2020-06-12T14:07:58.517 回答