简述 Eclipse Vert.x 和响应式编程
Eclipse Vert.x 是一个用于在 JVM 上构建响应式应用的工具包。响应式应用能够随着工作负载的增长而可伸缩,并在发生故障时具有弹性。响应式应用通过高效利用系统资源并保护自身免受错误影响,从而将延迟控制在合理范围内,因此能够响应迅速。
Vert.x 拥有庞大的响应式模块生态系统,可提供您在编写现代服务时所需的一切:全面的 Web 堆栈、响应式数据库驱动程序、消息传递、事件流、集群、度量、分布式跟踪等等。
Vert.x 是一个工具包,而不是一个带有“黑魔法”的框架:您所编写的,就是您实际执行的,就这么简单。
那么,是什么让 Vert.x 成为您编写下一个云原生或 十二要素 应用的绝佳选择呢?
起初,是线程……
经典的并发方法是使用线程。多个线程可以存在于单个进程中,执行并发工作,并共享相同的内存空间。
大多数应用和服务开发框架都基于多线程。从表面上看,每连接一线程的模型令人安心,因为开发人员可以依赖传统的命令式代码风格。
这很好,特别是如果您忘记了在使用多线程和内存访问时可能犯的那些愚蠢错误……
多线程“简单”但受限
当工作负载超出中等规模时会发生什么?(参见 C10k 问题)
答案很简单:您开始让您的操作系统内核不堪重负,因为有太多的上下文切换工作需要处理进行中的请求。
您的一些线程会因为等待 I/O 操作完成而阻塞,一些线程会准备好处理 I/O 结果,还有一些线程正在执行 CPU 密集型任务。
现代内核具有非常优秀的调度器,但您不能指望它们像处理 5,000 个线程那样轻松地处理 50,000 个线程。此外,线程并不廉价:创建一个线程需要几毫秒,并且一个新线程会占用大约 1MB 的内存。
异步编程:可伸缩性和资源效率
当您使用异步 I/O 时,可以用更少的线程处理更多的并发连接。当发生 I/O 操作时,我们不会阻塞线程,而是转移到另一个准备好进行的工作,并在初始任务准备好时稍后恢复它。
Vert.x 使用事件循环多路复用并发工作负载。
在事件循环上运行的代码不应执行阻塞 I/O 或耗时处理。但如果您有这样的代码,请不必担心:Vert.x 拥有工作线程和 API,可以将事件处理回事件循环。
为您的领域问题选择最佳异步编程模型
我们知道异步编程需要更多的努力。Vert.x 的核心支持回调和承诺/未来(promises/futures),后者是一种用于链式异步操作的简单优雅模型。
使用 RxJava 可以实现高级响应式编程,如果您更喜欢接近传统命令式编程的风格,我们也很乐意为您提供对 Kotlin 协程 的一流支持。
Vert.x 支持多种异步编程模型:选择最适合您需要解决的每个问题的方法!
别让故障破坏了响应能力
故障无时无刻不在发生。数据库会宕机,网络会中断,或者您所依赖的某个服务会变得无响应。
Vert.x 提供了控制延迟的工具,包括一个简单高效的断路器。
丰富的生态系统
*Eclipse Vert.x 堆栈*包含用于构建现代、端到端响应式服务的模块。从高效的响应式数据库客户端到事件流、消息传递和 Web 堆栈,Eclipse Vert.x 项目都能满足您的需求。
找不到您要找的东西?
- The Reactiverse 是一个围绕响应式生态系统建立的更大社区,您可以在其中找到更多客户端和模块。
- Vert.x Awesome 仓库提供了更多来自大型开源社区的有趣项目的链接!