11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

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

Paulo Lopes、邓艳琴

  • 2019-10-10
  • 本文字数:4144 字

    阅读完需:约 14 分钟

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:204856

评论 2 条评论

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

[翻译]Scalable Go Scheduler Design Doc[Go可扩展调度设计文档]

卓丁

golang scheduler Go scheduler Go 语言

宅家三个月玩转算法,再战字节跳动,字节跳动面试官朝我比了个“ok”

编程 字节跳动 面试 算法

区块链支付通道系统搭建,USDT跑分承兑商系统

甲方日常 13

句子

工作 随笔杂谈 日常

澳门金沙玩赢了钱提现不了异常注单未更新有什么办法处理?

丛林里的余光

异常检测 澳门金沙 提现不了

oeasy教您玩转linux 010211 牛说 cowsay

o

.NET委托,事件和Lambda表达式

AI代笔

从零开始搭建完整的电影全栈系统(四)——restfulApi用户的认证授权及用户注册

刘强西

RESTful API yii

Pulsar Flink Connector 2.5.0 正式发布

Apache Pulsar

flink 开源 flink 消费 kafak Apache Pulsar

区块链数字钱包开发,数字钱包app

13530558032

合约跟单模式系统开发,交易所合约跟单源码

13530558032

架构师训练营第十四周

Melo

阿里培训官给新入职程序员的25条建议

Java架构师迁哥

拥抱K8S系列-06-K8S如何解决docker部署的问题

张无忌

Docker Kubernetes 运维 service

多线程与高并发之锁

彭阿三

多线程 多线程与高并发

朱嘉明:全球科技革命正在逼近“奇点”,区块链影响未来人类社会的走向

CECBC

人工智能 科技 科技革命

LeetCode题解:232. 用栈实现队列,使用两个栈 入队 - O(1),出队 - 摊还复杂度 O(1),JavaScript,详细注释

Lee Chen

大前端 LeetCode

LeetCode题解:232. 用栈实现队列,使用两个栈 入队 - O(n), 出队 - O(1),JavaScript,详细注释

Lee Chen

大前端

一文解开java中字符串编码的小秘密

程序那些事

java安全编码 java编码指南 UTF编码

大项目写代码写到晕头转向?敏捷多项目框架解君愁

Philips

敏捷开发 程序设计 软件架构

USDT承兑支付系统,区块链跨境支付源码

13530558032

【高并发】Redis如何助力高并发秒杀系统,看完这篇我彻底懂了!!

冰河

多线程 高并发 秒杀 电商超卖 签约计划第二季

数字货币交易所开发方案,交易所源码

13530558032

大数据任务调度 - 有向无环图(DAG)之拓扑排序

代立冬

大数据 数据结构 DAG 拓扑排序 Apache DolphinScheduler

这篇文章,把中国科技的真实底子讲透了

CECBC

中国 科技 产业竞争

不要以为Bug写的好就是好程序员,其实这只占不到15%

小Q

Java 学习 程序员 架构 面试

从外卖员到拼多多30K+程序员,我付出了三年的青春

小Q

Java 学习 程序员 架构 面试

记一种spring框架的想当然但错误的用法

小明同学

源码分析 最佳实践 Spring Framework bug

JavaScript引擎的事件循环机制是怎样工作的?

Walker

Java 大前端 运行时栈帧 事件循环

面试必问亿级流量优化策略之JVM调优,文档视频面试,还不收藏

小Q

Java 程序员 架构 JVM jvm调优

基于Goc的Golang代码VSCode实时染色方案

大卡尔

测试覆盖率 精准测试 Go 语言

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