当前位置: 首页 > 知识库问答 >
问题:

Vertx缩放每个线程的实例数

管景天
2023-03-14

维特。x是在JVM上构建反应式应用程序的工具包。

我想将vertx用于基于JVM的自动可伸缩RESTful后端API。

到目前为止,我从留档中发现,默认情况下,它需要机器中的内核数量,假设您有N个内核,并为每个内核创建N个线程,每个线程是一个事件总线,每个线程包含vertx实例。问题是,Vertx如何控制实例数量?基于负载压力?

关于控制在给定线程中运行的垂直线的数量,我仍然不明白。请帮我弄清楚这件事。假设这台机器有4个内核,我编写了两个扩展为AbstractVerticle的类:

1)让一个是一些数据库数据检索器(让我们称之为RETRIEVER或“R”)

2)另一个让我们说是一些转换器(让我们称之为转换器或C)

现在我使用vertx运行或编译并运行:

$java-jar检索器。罐子

$java-jar转换器。罐子

因为我们有4个内核,在开始时Vertx会为每个内核创建4个线程。

问题#1:

有多少只猎犬

问题2:

如果负载压力随着对RETRIEVER(“R”)和Converter(“C”)(从1.000个调用增加到1.000.000个调用)的调用数的增加而增加,Vertx是否会自动管理处理对我们系统增加的调用数所需的“R”和“C”实例数?

在stackoverflow上有一个类似的问题:我可以在Vert上设置容量吗。x HTTP请求队列?

Jordan Halterman建议:“还要注意,您可以跨多个垂直实例扩展HTTP服务器,以处理更多请求。在这种情况下,您可以使用静态变量或共享数据跨实例共享信号量。”

问题#3:

但是,如何准确地扩展verticle实例以处理更多请求呢?我在文档中找不到这个。

我提前感谢你的帮助!

共有1个答案

云远
2023-03-14

你误解了医生的意思。

首先,有一个事件总线(当Vert. x在集群模式下启动时,它在Vert. x实例之间共享)。它的作用是允许一个消息传递风格的通信之间的顶点。

请参阅事件总线部分。

然后在Vert. x中有不同类型的线程:事件循环线程和工作线程。默认情况下,Vert. x创建的事件循环线程与机器上的内核和20个工作线程的池一样多。事件循环线程用于处理异步事件(读取文件缓冲区、接收消息等)。辅助线程用于执行应用程序的阻塞部分。

查看多反应器模式、黄金法则和运行阻塞代码

顶点是部署的Vert. x单位。有三种类型的顶点,但你应该知道的两种是“标准”顶点和“工人”顶点。标准顶点在部署时被分配一个单一事件循环线程。在顶点中处理的任何类型的事件都将由这个单一事件循环线程处理。辅助顶点保证一次由单个辅助线程执行。每次可能不是同一个工作线程,但是从来没有两个工作线程会并行处理工作顶点事件。

见垂直线

最终,要缩放顶点。在x应用程序中,您可以部署多个verticles实例。对于标准垂直体,每个实例都将分配不同的事件循环,因此您可以跨核心进行缩放。

请参见垂直线实例的数量

维特。x不会自动为您调整垂直线的数量。这是你可以用Vert构建的东西。x监控工具。

我相信这回答了你的三个问题。

 类似资料:
  • 问题内容: Vert.x是用于在JVM上构建响应式应用程序的工具包。 我想对基于JVM的自动可伸缩RESTful后端API使用vertx。 到目前为止,我从文档中发现,默认情况下,它需要计算机中的内核数,假设您有N个内核并为每个内核创建N个线程,每个线程是一个事件总线,每个线程包含vertx实例。问题是,Vertx如何控制实例数量?基于负载压力? 关于控制通过给定线程运行的Verticles数量的

  • 问题内容: servlet类有多个实例吗?当我听到“每个servlet实例”时,有人可以详细说明吗? 问题答案: Servlet容器启动时,它: 读; 在类路径中找到已声明的Servlet;和 加载和实例化每个Servlet一次。 大概是这样的: 这些Servlet都存储在内存中,并且每次请求URL与Servlet的关联的匹配时都可以重用url-pattern。然后,Servlet容器执行类似于以

  • 使用鼠标改变元素的尺寸。 如需了解更多有关 resizable 交互的细节,请查看 API 文档 可调整尺寸小部件(Resizable Widget)。 默认功能 在任意的 DOM 元素上启用 resizable 功能。通过鼠标拖拽右边或底边的边框到所需的宽度或高度。 <!doctype html> <html lang="en"> <head> <meta charset="utf-8">

  • 我是vert的新手。x、 我在尝试垂直。x“NetServer”功能。http://vertx.io/core_manual_java.html#writing-tcp服务器和客户端,它的工作方式很有魅力。 然而,我也读到“verticle实例严格来说是单线程的。 如果您创建一个简单的TCP服务器并部署它的单个实例,那么该服务器的所有处理程序始终在同一个事件循环(线程)上执行。” 目前,对于我的实

  • 基于每个JVM的CPU核数创建线程与在多个JVM上运行的线程在CPU核数上创建线程数,条件是所有JVM运行在共享同一CPU的一个物理系统上有何不同?换句话说,一个并行运行8个线程的多线程Java程序vs在共享同一CPU的8个不同JVM上运行的同一多线程程序? 下面我给出了一些我发现的用线程实现并行处理的方法,但是我不能理解它们之间的本质区别? 方法一:线程周期性地查询数据库更改,并行地启动(长时间

  • 我有两个问题与Vertx线程模型有关。文件提到: 一个顶点。默认情况下,x实例维护N个事件循环线程(其中N默认为core*2) 对于许多现代应用程序所需的并发级别,阻塞方法无法扩展 Vertx还提供了线程池相关的功能,以处理使用服务器资源的任务,这些资源需要长时间的事件处理(工作线程)。 好的,所以我们知道线程在所需内存(例如堆栈)和上下文切换方面有开销。 Vertx线程没有被阻塞(如果正确使用)