你在使用哪种编程语言?快来投票,亲手选出你心目中的编程语言之王 了解详情
写点什么

Vert.x 4 将于年底发布!它曾让 VMware 和 Red Hat 掐架

Paulo Lopes、邓艳琴

2019 年 10 月 10 日

Vert.x 4将于年底发布!它曾让VMware和Red Hat掐架

Vert.x是一个基于 JVM、轻量级、高性能的应用平台。今年 10 月,Vert.x 开源项目的核心贡献者 Paulo Lopes 将来到 QCon 全球软件开发大会(上海站)2019,他透露,Vert.x 4 将于 2019 年底发布。为让大家对 Vert.x 有一个更加清晰的了解,我们对他进行了采访。


如果时间回到六年前,你会看到一场VMware和Red Hat的battle


一位名叫 Tim Fox 的开发人员曾在 VMware 的 SpringSource 部门工作。在此期间,他领导开发了 Vert.x 项目。2012 年,Tim 跳槽到了 Red Hat 并希望能够继续从事该项目的开发,却得到了一封律师函。VMware 让他交出 Vert.x 商标、域名、博客、GitHub 帐户及 Google Group 的控制权。此后 VMWare 与 RedHat 多次商讨以寻找出一个双方都满意的解决方案,但都无疾而终。僵持许久之后,VMware 最终同意将项目和相关 IP 转移到Eclipse基金会。2016 年 1 月 12 日,Tim Fox 辞去了 Vert.x 项目负责人一职,目前该职务由长期贡献者 Julien Viet 担任。


Eclipse Vert.x 是一个用于在 JVM 上构建响应式应用程序的工具包。根据官方描述,Eclipse Vert.x 是事件驱动和非阻塞的。这意味着您的应用程序可以使用少量内核线程处理大量并发。Vert.x 可让您的应用程序以最少的硬件进行扩展。它有一个模块化、高性能、易于使用的响应式生态系统。正因为生态系统的多样性,我们可以编写像实时 Web 应用、IoT、协议适配器和分布式应用等不同种类的程序,当然也可以构建微服务。


它的高性能、低延迟特性吸引了不少开发者,目前,该项目在 GitHub 上已经获得了超过 10k 的 star。



项目地址:https://github.com/eclipse-vertx/vert.x/


去年 10 月,Vert.x 项目负责人、Red Hat 首席软件工程师 Julien Viet 在 QCon 全球软件开发大会(上海站)2018 从 HTTP 性能基准测试出发与我们探讨了Vert.x高性能的秘密。今年 10 月,Vert.x 开源项目的核心贡献者Paulo Lopes也将来到 QCon,他透露,Vert.x 4 将于 2019 年底发布。为让大家对 Vert.x 有一个更加清晰的了解,我们采访了 Paulo 。


Vert.x 是什么?

InfoQ:请为我们介绍一下 Vert.x。

Paulo:Vert.x 是一个运行在 JVM 中的事件驱动的、异步非阻塞、支持多种编程语言的应用开发工具。你可以把它当做一组积木,允许你开发在所需的工作负载下保持低延迟特性的高性能应用。Vert.x 能让开发人员自由决定应用程序应该如何工作。由于每个应用程序都是独一无二的,我们并不提倡开发人员应该如何构建他们的应用程序;我们称之为“不固执己见”。我们观察到,Vert.x 的用户主要将它用于嵌入较大的应用程序,这使得它非常通用,比如你可以在 Spring 应用程序中使用 Vert.x。


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

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


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

Paulo: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 上通信。


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

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


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


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


Vert.x 很快,真的很快

InfoQ:您认为谁需要 Vert.x?何时使用 Vert.x 是必要的?

Paulo:每个人都可以在任何地方使用 Vert.x。您可以构建一个小型 web 应用程序、一个复杂的分布式电子商务解决方案或构建集成,例如,将 ActiveMQ 桥接到 Kafka,而无需 HTTP 桥接。用户最初对 Vert.x 的关注就在于它的优秀性能。想象一下,假如你是电子商务行业的,时间就是金钱,我们的每一秒都十分珍贵,Vert.X 将帮助企业更快地向客户提供产品,更快地完成交易。这不需要额外的硬件成本,多么合算!


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

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


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


InfoQ:为什么说 Vert.x 是创建轻量级,高性能微服务的理想选择?

Paulo:简而言之,微服务是分布在网络上的大量小型应用程序节点。这些节点通过网络进行通信,这意味着任何两个节点都有应用程序外部的 I/O 性能开销。延迟是微服务中的一个关键问题,因为服务之间的每一跳都会增加请求/响应时间。选择 Vert.x 将允许微服务高效地使用 CPU 和网络,从而减少整个应用程序的延迟。


Vert.x 的未来

InfoQ:Vert.x 4.0 版本是否很快就能与我们见面?其路线图中提到,“Vert.x 4.0 将使 Vert.x 3 的一些重要方面现代化,你甚至可以预期它会发生重大变化”,能否透露一下它将有哪些重大变化?

Paulo:Vert.x 4.0 会在今年年底与大家见面。事实上,我们已经发布了一些里程碑式的更新,而且我们还将继续。Vert.x 4.0 专注于提供社区期望的两个重要功能:它提供了一个面向未来的编程模型,它还集成了 Java 内置的 CompletionStage,当然,这不会妨碍我们现在流行的与 RxJava 的集成。我们还将通过与 Zipkin 或 OpenTracing 等工具集成来支持分布式跟踪。


其实,Vert.x 4 是 Vert.x 3.x 系列的演进版本, 它带来了上面提到的两个特性。因为任何新的主要版本都会破坏一些 API,对此我们有明确的政策,下面我会解释一下。


首先,它不是破坏性改变的露天酒会,任何重大变化都必须有一个很好的理由。然后,任何破坏性改变在 Vert.x 3.x 系列中都会有相应解决办法的替代方案。


例如,在 Vert.x 4 版本里,我们把 Vert.x Web 中的 HTTP cookie API 移到了 Vert.x Core 里面,为了实现这一点,我们为 Vert.x 3.8 的 Vert.x Core 提供了新的 cookie API ,并弃用了 Vert.x Web cookie API,因此应用程序可以为升级到 Vert.x 4 做准备了。


总的来说,Vert.x 3.x 现在正在加速迁移到 Vert.x 4。


最后但同样重要的是,目前在 MEAP 中的 Vert.x 行动手册自然涵盖了 Vert.x 3。我们的基准是,本书中的所有示例也将适用于 Vert.x 4。书中所有的例子都是 Java 代码,我们用 Vert.x 3.x 和 Vert.x 4 的里程碑编译来检查这个代码。


InfoQ:为推动 Vert.x 跨过早期采用者阶段,你们会做点什么吗?

Paulo:Vert.x 已经成熟,并被证明是构建高性能和可伸缩应用程序的可靠框架。对于新用户来说,学习成本可能很高,因为它需要一种不同于我们过去几年在 Java 世界中看到的思维方式。反应式编程在过去是一个复杂的主题,但今天,它已经被诸如 Reactive Extension 之类的库广泛使用。随着越来越多的开发人员开始了解这个编程模型,将它应用到后端服务器代码并采用 Vert.x 就越容易了。正如我们所讨论的,它的优点是巨大的,所以我建议所有的读者尝试一下。


目前,VMware、Red Hat、Hulu、增信通、易快报、力谱宿云、炼石网络等公司都在使用它,具体可见官网。



InfoQ: 最后一个问题,Vert. X 与 Red Hat 互相提供了什么?

Paulo:Vert.x 是 Eclipse Foundation 的一个项目,因此,它是独立的。这个项目由很多来自不同公司的贡献者开发,有些是 Eclipse Foundation 的成员。


Red Hat 赞助了 Vert.x 项目,雇佣了一些贡献者,让他们能做喜欢的事情并以此谋生。当然,作为 RHOAR 产品的一部分,Red Hat 为 Vert.x 提供支持。Red Hat 对 Vert.x 十分感兴趣,因为它构建了许多行之有效的解决方案,比如 Strimzi 项目(一个致力于将 Apache Kafka 运行在 Kubernetes 上的项目),另外,Quarkus 项目(一个为 GraalVM 和 OpenJDK HotSpot 量身定制的 Kubernetes 原生 Java 框架)最近也在使用 Vert.x 构建 HTTP 客户端和服务器。


采访嘉宾:Paulo Lopes 是 Vert.x 开源项目的核心贡献者,目前就职于 Red Hat,任首席软件工程师。他拥有超过 10 年的软件开发经验,在编写、重写、写到想撞墙等方面的经验十分丰富。为让 Vert.x 成为一个更棒的框架,他一直在编写和重新编写高性能 Web 应用程序的道路上奋斗着。


在 QCon 上海 2019 的演讲中,Paulo 将介绍 Vert.x 在 ES4X(基于 GraalVM 和 Vert.x 的开发的 JavaScript Runtime)中的应用,它为 JavaScript 应用程序带来了令人难以置信的性能提升。想要破解延迟难题,点此了解。


2019 年 10 月 10 日 11:203889

评论 2 条评论

发布
用户头像
Paulo Lopes 是 Vert.x 开源项目的核心贡献者,目前就职于 Red Hat,任首席软件工程师。他拥有超过 10 年的软件开发经验,在编写、重写、写到想撞墙等方面的经验十分丰富。为让 Vert.x 成为一个更棒的框架,他一直在编写和重新编写高性能 Web 应用程序的道路上奋斗着。
2019 年 10 月 21 日 21:37
回复
这个自我介绍很有趣
2019 年 10 月 21 日 21:38
回复
没有更多了
发现更多内容

LeetCode题解:92. 反转链表 II,递归,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

蚂蚁集团下架互联网存款产品:互联网金融是天使还是魔鬼

石头IT视角

Synchronized用法原理和锁优化升级过程(面试)

叫练

synchronized 轻量级锁 偏向锁 多线程与高并发 同步

训练营第十三周作业 2

仲夏

第九周总结

小兵

盘点2020|从写程序到写文章,一个宅男程序猿到平台写手的心路历程

罗小龙

程序猿 盘点2020 心路历程 宅男 平台写手

MySQL修改账号密码方法大全

Simon

MySQL 七日更

围观|第一代云原生企业米哈游如何让想象发生?

阿里巴巴云原生

阿里云 最佳实践 运维 云原生 游戏开发

4. 上新了Spring,全新一代类型转换机制

YourBatman

Spring Framework 类型转换 Converter

算法的时间与空间复杂度

思想者杰克

七日更

盘点2020 | 21 张图总结我的 2020 年

pingan8787

盘点2020

工作3年,看啥资料能月薪30K?

小傅哥

Java 面试 小傅哥 七日更 技术成长

第九周-作业一

ray-arch

Java并发编程:AQS的原子性如何保证

码农架构

Java java 并发

与前端训练营的日子 --Week08

SamGo

学习

盘点2020 | 干饭人 cxuan 活下来了

cxuan

学习 总结 盘点2020

JVM 垃圾回收原理

梧桐

阿里 10 年:一个普通技术人的成长之路

阿里巴巴云原生

阿里云 云原生 技术人 自我思考 职场成长

训练营第十三周作业 1

仲夏

极客大学架构师训练营

《面试官不讲武德》对Java初级程序猿死命摩擦Http协议

Silently9527

面试 https HTTP 图解https

IoT数据模型设计

soolaugust

物联网 IoT 数据模型 工业物联网 七日更

一文搞懂 CountDownLatch 用法和源码!

cxuan

Java 源码 并发

点个外卖,我把「软中断」搞懂了

小林coding

Linux 操作系统

DeFi平台DAPP软件系统开发

开發I852946OIIO

系统开发

快手基于 Apache Flink 的优化实践

Apache Flink

flink

ETHERZ流动性挖矿系统软件APP开发

开發I852946OIIO

系统开发

Cache Design Patterns

邵俊达

vivo 微服务 API 网关架构实践

vivo互联网技术

微服务 微服务网关 API网关 Zuul2

测开之函数进阶· 第1篇《递归函数》

清菡

测试开发

Linux 如何实现定时调度任务

Near

Linux Timer 定时调度

生产环境全链路压测建设历程 15:达成了99.99%,建设了哪些稳定性产品、工具?

数列科技杨德华

全链路压测 七日更

围绕“三个问题”开展的网易云音乐数据基础建设

围绕“三个问题”开展的网易云音乐数据基础建设

Vert.x 4将于年底发布!它曾让VMware和Red Hat掐架-InfoQ