Qcon Vertx

Vertx

实践

Vert.x 的用户主要将它用于嵌入较大的应用程序,这使得它非常通用,比如你可以在 Spring 应用程序中使用 Vert.x。

延时

负载随着线程增加而增加

thread => 200req/sec => 5ms

cores => 1600req/sec

Tomcat

maxThread: 200

avg req time: 5ms

high load: 1000 req

wasted wait/queue time : (1000/200 -1)*5= 0~20ms

CPU大多数都在等待

线程数负载不断增加,直到崩溃

Event Loop

8核 8lOOP 100%CPU

JIT

js + java 源代码打通

polyglot??

横向性能对比

GraalVM

多语言虚拟机

消除不同语言的障碍,并编译成JIT,提高性能

架构

GraalVm based(for full JIT)

vertx for io(fast IO and event loop)

pmlopes

QA

Vert.x 有哪些优点?我们能用它解决什么问题?

编写非阻塞、并发和可伸缩的代码是困难的。通过提供基于 reactor 模式的简单编程模型,Vert.x 提供了构建此类应用程序的最简单方法,这将允许应用程序高效地使用所有硬件资源。使用内置的集群和事件驱动体系结构,可以让开发人员专注于领域问题,而不是技术细节,扩展变得轻而易举。

Verticle、event-loop、EventBus 分别是什么?

Verticle 是由 Vert.x 部署和运行的代码块。一个 Vert.x 实例维护几个事件循环线程(通常是可用 CPU 内核数的 2 倍)。Verticle 可以用 Vert.x 支持的任何语言编写,单个应用程序可以包括用多种语言编写的 verticle。你可以把 Verticle 当做 Actor 模型中的 Actor。

Vert.x 的 API 是事件驱动的。在大多数案例中,Vert.x 使用一个叫做 event loop 的线程来调用你的处理程序。由于在 Vert.x 或应用程序块中没有任何内容,event loop 可以在事件到达时连续地将事件传递给不同的处理程序。

EventBus 是 Vert.x 的神经系统。它允许应用程序的不同部分相互通信,而不管它们是用什么语言编写的,也不管它们是在同一个 Vert.x 实例中,还是在不同的 Vert.x 实例中(以集群形式)。它甚至可以桥接以允许运行在浏览器中的客户端 JavaScript 在同一 EventBus 上通信。

Vert.x 线程是如何工作的?

如上所说,Vert.x 的 API 主要是事件驱动的,可以将事件看作计时器、HTTP 请求、文件读取等等)。如果可以立即提供结果,则会立即返回。如果没有这个功能,您通常会在稍后提供一个 handler 来接收事件。

因为没有一个 Vert.x API 会阻塞线程,这意味着您可以使用 Vert.x 来处理大量的并发,只需使用少量的线程。

使用传统的阻塞 API,调用线程可能会在读取文件、接收 HTTP 请求或向数据库发送数据时阻塞。在上述所有情况下,当你的线程等待结果时,它不能做任何其他事情,在这段时间它就是无用的,这样一来效率就太低了。

我们常用 Vert.x 来处理低延迟的问题,那么,Vert.x 能有多快?它是怎么实现的?能否举个例子?

是的,Vert.x 速度非常快。然而,要给出具体的数字总是很困难的,因为这些数字应该根据具体情况进行评估。不过我可以给你举个最简单的例子,比如我们建立了一个应用,它要在 REST API 端点上返回 “Hello World”,TechEmpower(一个独立的基准测试)表明,在相同的条件下,Vert.x 应用可以提供超过 450 万个请求 / 秒的模式,而优化后的 Servlet 在 Tomcat 上却只能提供大约 90 万个请求 / 秒的服务。

这种糟糕的性能差异确实可能存在。因为 Vert.x 有效地使用了所有可用的计算资源。使用 reactor 模式,应用程序不受处理请求的线程数(就像在典型的 Servlet 容器上发生的那样)的限制。Event loop 使用所有请求的全部 CPU 容量(因为没有阻塞 I/O),而不是等待 I/O 处理完毕单个请求的线程。这个小小的差别就是造成这种结果的原因。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wshten@gmail.com

文章标题:Qcon Vertx

本文作者:KevinTen

发布时间:2019-10-19, 00:00:00

最后更新:2019-10-22, 09:14:33

原始链接:http://github.com/kevinten10/2019/10/19/Qcon/Qcon-Vertx/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

csdn zhihu github