深入浅出Vert.x架构

Posted 架构师训练营

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入浅出Vert.x架构相关的知识,希望对你有一定的参考价值。

Vert.x是在JVM上构建响应式应用(reactive application)的工具集。Vert.x是事件驱动的和非阻塞的,这意味着应用程序可以使用少量内核线程来处理很多并发。

Vert.x特性

  • 响应式的(Responsive):一个响应式系统需要在合理的时间内处理请求。

  • 弹性的(Resilient):一个响应式系统必须在遇到异常(崩溃,超时, 500 错误等等)的时候保持响应的能力,所以它必须要为异常处理而设计。

  • 可伸缩的(Elastic):一个响应式系统必须在不同的负载情况下都要保持响应能力,所以它必须能伸能缩,并且可以利用最少的资源来处理负载。

  • 消息驱动(Message driven):一个响应式系统的各个组件之间通过 "异步消息传递" 来进行交互。

  • 多种语言支持:只要能运行在JVM上的语言,基本都支持。

  • 简单的并发模型:就像写单线程代码一样简单,多线程并发由Vertx控制。

  • 集群支持:在同一个Vertx集群,各个Verticle 实例间可以通过Event Bus通信。同时也支持跨进程的TCP Event Bus。

  • Vertx使用Netty4处理所有的网络IO。


概念模型


通常,一个进程会创建一个Vert.x实例,Vert.x负责部署Verticle和管理运行时资源。

  • Verticle实例之间可通过EventBus发送异步消息来通讯,Verticle中的Handler处理发送来的消息。

  • 在集群模式下,通过ClusterManager可发现远程Verticle,EventBus从而可将消息路由到远程Verticle。


架构模型


Vertx的AcceptorEventloopGroup只有1个AcceptorEventloop,即通过1个线程监听所有客户端的连接,连接建立后会交由VertxEventLoopGroup中的一个EventLoop来处理。

  • Vertx可以将server(HttpServer,TcpServer,UdpServer)部署在多个verticle实例中,这些verticle实例共享这个server。AcceptorEventloop监听和处理连接事件,但NIO读写事件的触发和处理都在VertxEventLoopGroup的EventLoop中执行。

  • 每部署1个verticle实例,都会为该verticle创建1个执行context(每个context都绑定一个EventLoop和Handler处理线程),传入的业务request事件都在此context对应的Handler处理线程中执行。

  • 对于标准模式的verticle,context对应的Handler处理线程就是该verticle绑定的EventLoop线程;对于worker模式的verticle,context对应的Handler处理线程是worker线程。因此,对于标准模式verticle,编解码handler、request handler都在context绑定的EventLoop中执行;对于worker模式verticle,编解码handler会在context绑定的EventLoop中执行,但request handler会在context对应的worker线程中顺序的执行。

  • 任何verticle中通过excuteBlocking方法提交的任务,都会由worker线程池执行;

  • 当部署的verticle数量小于VertxEventLoopGroup的EventLoop数量时,会造成部分EventLoop空闲;当部署的verticle数量大于VertxEventLoopGroup的EventLoop数量时,多个verticle可能绑定同一个EventLoop。

以上是关于深入浅出Vert.x架构的主要内容,如果未能解决你的问题,请参考以下文章

结合vert.x和mongo构建应用

Vert.x——基于JVM的高性能响应式开发框架

Vert.x简介原理与HelloWorld

Vertx,融合JavaRubyPython等语言的高性能架构

vert.x详细介绍,全异步框架

Vert.x