Vert.x 官方文档
# Vert.x 和 响应式程序简单介绍
Vert.x是一个在Java虚拟机上构建响应式应用程序的工具集合。响应式应用程序不仅可以随工作负载的提升进行扩容,而且可以从容地应对故障率的 提升。一个响应式应用程序之所以式响应迅速的,是因为它通过有效地使用系统资源,并通过保护自己不受错误的影响,从而保持对延迟的控制。
Vert.x背后一个各种响应式组件组成的生态系统作为支持,当开发服务时你可以从中找到任何你所需要的组件,包括:综合的web开发技术栈、响应式 数据库驱动、消息、事件流、集群、指标监控、分布式追踪等等。
Vert.x是一个工具集合,而不是一个带有黑魔法的框架:你所写的实际上就是你所执行的,就这么简单。
那什么使Vert.x成为开发下一代云原生或者twelve-factor应用最好的选择?
# 开始,线程
并发最经典的实现是使用线程。单个处理器上可以存在多个线程,共同执行并发任务,使用同样的内存空间。
大多数应用和服务开发框架都基于多线程。表面上,上面的每个连接创建一个线程的模型是可靠的,因为开发者可依赖于传统的强类型语言代码。
这也挺好,尤其是如果你忘记了哪些你使用多线程和内存访问可能犯的愚蠢的错误。
# 多线程是简单但是有局限性
当工作负载超过正常的工作负责后会发生什么?
答案很简单:你开始使你的操作系统内核遭受痛苦,因为系统在处理接收到的请求时会有很多上下文切换工作。
一些线程将会被阻塞因为它们需要等待I/O完成操作,一些线程准备处理I/O结果,而另一些则执行CPU密集型任务。
现在的内核有很好的调度机制,但是你依旧不能期望它们像处理5000个线程那样去处理50000个线程。而且,线程并不廉价:创建一个线程需要花费 几毫秒,一个新的线程大概需要耗费1MB的内存空间。
# 异步编程:可伸缩和高效利用资源
异步I/O将使用较少的线程来处理更多的并发连接成为可能。我们不会在发生I/O操作时阻塞线程,而是转移去执行另外一个已经准备就绪的任务,并 在前面的I/O操作准备就绪时重新初始化任务。
Vert.x使用事件循环实现并发负载多路复用。
在事件循环上执行的代码不要执行阻塞I/O或者耗时较长处理任务。但是如果你的应用中有相关阻塞代码也不用过于担心:Vert.x拥有工作线程和APIs 可以在事件循环上处理事件回调。
# 针对问题领域选择最佳的异步编程模型
我们都知道异步编程模型需要耗费更多的努力。Vert.x核心,通过支持callbacks
和promises/futures
,其针对链式异步编程操作提供了简单
而优雅的模型。
高级的响应式编程也可通过RxJava
实现,但如果更喜欢类似于传统的非响应式编程,我们也很高兴提供一流的Kotlin coroutines
支持。
Vertx提供了很多异步编程模型:你可以根据需要解决的问题选择最好的。
# 不要让失败破坏应用的响应能力
失败是不可避免的。数据库宕机,网络不通,或者你依赖的某些服务无法响应等等。
Vert.x 提供了一系列工具以保持对潜在错误的可控,包括一个简单而高效的断路器(circuit-breaker
)。
# 丰富的生态系统
Vert.x 包含用于构建先进的端到端响应式服务的一系列组件。从高效的响应式数据库客户端到事件流,消息,以及Web技术栈,Vert.x已经覆盖了 你所需要:
没有找到你需要的?
- The Reactiverse是一个响应式编程生态系统的社区,在那里你可以找到更多的组件。
- The Vert.x Awesome提供了来自更大开源社区的有趣的项目链接。