Vert.x 和响应式编程简介

Eclipse Vert.x 是JVM上构建 响应式 应用的工具。 响应式应用既可以随着工作负载的增长而 扩展 ,又可以在出现故障时 弹性回复 。 响应式应用是 即时响应 的,因为它能有效利用系统资源并保护自身免受错误影响,从而使延迟可控。

Microservices

Vert.x 背靠庞大的响应式模块生态系统,具有编写现代服务所需的一切:全面的Web技术栈,响应式数据库驱动程序、消息队列、事件流、集群支持、指标监控、分布式跟踪等等。

Vert.x 是工具包,而不是暗含黑魔法的框架:所写即所得,就这么简单。

那么,是什么使 Vert.x 成为编写 云原生12因素(12-​Factor) 应用程序的最佳选择?

从前,有一些线程…

实现并发的经典方法是使用 线程。 多个线程可以在同一个 进程 中存活,并行 地执行工作,并 共享 同一片内存空间。

Threads

大多数应用程序和服务开发框架都基于多线程。 从表面上看,每个连接对应一个线程 的模型令人放心,因为开发人员可以使用传统的 命令式 代码。

这一切挺好的,如果使用多线程进行内存访问时可能犯的那些愚蠢错误可以忽略的话……

多线程很简单,但有局限性

当工作负载超出中等水平时,会发生什么? (请参阅C10k问题)

答案很简单:操作系统内核变得 非常痛苦,因为多线程处理这些请求会产生太多的 上下文切换 动作。

Blocking I/O

一些线程正在等待I/O操作完成而被 阻塞,一些线程已 准备好 处理I/O结果,而一些线程正在执行CPU密集型操作任务。

现代内核具有非常好的调度程序,但是不能指望它们处理50 000个线程还会像处理5 000个线程那样轻松。同样地,创建线程的成本也不低:创建线程需要花费若干毫秒,而且新线程会消耗大约1MB的内存。

异步编程:可伸缩性和资源利用率

当您使用 异步I/O 时,可以用更少的线程处理更多的并发连接。 当一个任务发生了I/O操作时,异步I/O不会阻塞线程,而是执行其他待处理的任务,待到I/O结果准备好后再继续执行该任务。

Vert.x 使用 事件循环(event­loop) 多路复用并发处理工作负载。

Event loop

在事件循环上运行的代码不应执行阻塞I/O及长时间的处理逻辑。但是,如果有这样的代码,也无需担心,因为 Vert.x 具有 Worker 线程和对应API,可以在事件循环中处理这样的代码。

为您的需求选择最佳的异步编程模型

我们知道异步编程需要更多的努力。 Vert.x core 支持 回调Promise/Fu­ture,后者是用于链接异步操作的简单优雅的模型。

Rx­Java 可以进行高级响应式编程;如果您更喜欢传统的命令式编程,那么我们也提供了 Kotlin协程 的头等支持。

Asynchronous programming

Vert.x 支持许多异步编程模型,请根据您需要解决的具体问题去选择最佳的模型!

不要让失败破坏响应能力

失败总会发生。 数据库会宕机,网络会断开,或者您依赖的某些服务会无法响应。

Failures

Vert.x 提供了控制延迟的工具,包括简单有效的 断路器

丰富的生态系统

Eclipse Vert.x 技术栈 包含了用于构建现代应用程、端到端响应式服务的模块。 从高效的响应式数据库客户端,到事件流、消息传递和 Web 技术栈等,Eclipse Vert.x 项目覆盖了:

Ecosystem

找到不你想要的?

  • The Re­ac­ti­verse 是一个围绕响应性生态系统的大型社区,您可以在其中找到更多的客户端和模块。
  • Vert.x Awe­some 仓库,提供了更多来自大型开源社区的更有趣项目的链接!

准备好编写代码了吗?

请参考 开始 页面进行操作!