深入浅出Vert.x架构

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

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架构)