Vert.x 简介

Vert.x是一个工具集,用来在JVM上构建反应式应用。反应式的应用能够随着负载的增加而伸缩,也能够在故障中保持灵活。

传统的实现方式面临的问题

传统的实现高并发的方式是很多的线程。一个进程中很多的线程,共同分享进程里内存空间。早期,当并发量不大时,我们可以使用一个连接一个线程的模式。但是当并发量增长时,大量的线程将会使我们的操作系统内核疲于应对上下文的切换。
虽然现代操作系统的有出色的线程调度机制,但是处理5万个线程也不可能像处理5000个线程一样简单。同时,常见一个线程需要几ms,消耗掉1MB的内存。

Vert.x的特点

  • Vert.x是基于事件的
    提供一个事件驱动的编程模型,开发人员只需关注事件处理器的编写。同时需要在程序中时刻注意不要阻塞事件线程。
  • 参照物是node.js
  • 支持异步无锁编程
    Don’t call us, we’ll call you.因此可以做到只需几个线程就可以处理大量的并发。

Vert.x的缺点

  • 必须使用JDK8以上,熟悉Lambda语法。
  • 对于复杂的业务可能会出现callback hell。
  • 思维方式转变,契约创建,异常处理,开发过程相对要复杂。

Vert.x技术体系

  • 核心模块
    vertx-core为核心模块,提供HTTP,TCP,文件系统访问,EventBus,WebSocket,延时与重复执行,缓存等基础功能。
  • Web模块
    编写Web服务处理对HTTP支持外,还需要路由、Session、请求数据读取、RESTful支持等,vertx-web提供API支持。
  • 数据访问模块
    对于常见的数据库都有官方or社区版本支持,也很完善,https://github.com/vert-x3/vertx-awesome 可查询丰富的信息。
  • Reactive响应式编程
    支持reactive编程,简化异步编程的难度。
  • 中间件支持
    支持常见的中间件,RabbitMQ Client、Kafka Client 等
  • 支持微服务
    比如服务发现(Vert.x Service Discovery)、断路器(Vert.x Circuit Breaker)、配置中心(Vert.x Config)等。

Vert.x的重要概念

  • Verticle
    是vert.x部署与运行的代码块,verticle之间通过EventBus实现通信。verticle有点类似于Actor Model。通常情况下会在同一个vert.x实例中部署很多个verticle。有两种类型的verticle:
  • 1.Standard verticle
    会被eventloop中的线程执行,而且vert.x保证每次都是同一个线程执行。
  • 2.Worker verticle
    会被workpool中的线程执行,而且vert.x保证每次只有一个线程在执行。
  • EventBus
    集群中各个容器之间的通信,各个verticle之间的通信都是经过EventBus实现的。
  • SharedData
    用来在多个verticle之间做数据的共享。

Get started

作为对比,我们看看ajax的代码

    console.log("1");$.ajax({"url" : "/hello","type" : "post","dataType" : "json","success" : function(val) {console.log("2");}});console.log("3");

再来看看vert.x的代码

public class MainVerticle extends AbstractVerticle {@Overridepublic void start() throws Exception {// Create a RouterRouter router = Router.router(vertx);// Mount the handler for all incoming requests at every path and HTTP methodrouter.route().handler(context -> {// Get the address of the requestString address = context.request().connection().remoteAddress().toString();// Get the query parameter "name"MultiMap queryParams = context.queryParams();String name = queryParams.contains("name") ? queryParams.get("name") : "unknown";// Write a json responsecontext.json(new JsonObject().put("name", name).put("address", address).put("message", "Hello " + name + " connected from " + address));});// Create the HTTP serververtx.createHttpServer()// Handle every request using the router.requestHandler(router)// Start listening.listen(8888)// Print the port.onSuccess(server ->System.out.println("HTTP server started on port " + server.actualPort()));}
}

架构图

Vert.x架构简述相关推荐

  1. JAVAWeb01-BS架构简述、HTML

    1. B/S 软件开发架构简述 1.1 Java Web 技术体系图 1.2 B/S 软件开发架构简述 B/S架构 B/S框架,意思是前端(Browser 浏览器)和服务器端(Server)组成的系统 ...

  2. Pure MVC 架构简述

    Pure MVC 架构简述 前言 游戏UI开发中,常常使用MVC架构(Model数据.View界面.Controller控制).这个架构方便解耦数据.界面和交互逻辑.一般来说V可以持有M,C可以持有V ...

  3. OpenStack概念架构简述

    什么是OpenStack OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集.其宗旨在于,帮助组织运行为虚拟计算或存储服务的云,为公有云.私有云,也为大云 ...

  4. vert.x oracle 数据库,深入浅出Vert.x架构

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

  5. Kubernetes — 生产环境架构简述

    目录 文章目录 目录 Kubernetes 在生产环境中架构 基础设施层 业务应用层 服务访问层 Kubernetes 在生产环境中架构 Client 层:即外部用户.客户端等: 服务访问层:即由 T ...

  6. 【转载】SOA面向服务架构简述

    在分布式系统中表现层和业务逻辑层 并不处于同一物理部署,所以我们必须存在分布式服务,以契约方式发布于网络中,我们的关注点在于服务,面向服务编程,这种通过组合业务逻辑暴露可用服务的架构叫做面向服务架构( ...

  7. J2EE 企业级应用架构简述

    企业应用的特点 多环境多系统的交互 海量数据.高并发.高TPS 安全等级高 自动化集群管理 架构的原则 CAP原则(一致性.可用性.分区容错性) 复杂的事情简单化 架构的目标 高速缓存 并行计算 负载 ...

  8. SOA面向服务架构简述

    在上篇中我们简单谈了下架构设计中服务层的简单理解,在这里我们将继续服务层的架构,在本节我们将重点在于分布式服务.在分布式系统中表现层和业务逻辑层 并不处于同一物理部署,所以我们必须存在分布式服务,以契 ...

  9. 什么是Arduino?Arduino的起源与架构简述

    目录 发展历程 概述 IDE介绍 开发语言 兼容板 兼容板开发注意事项 Arduino与Zephry的不同点 基本代码架构 发展历程 起始地区 命名&开源协议 创建者 创立起因 2005年-意 ...

最新文章

  1. LaTeX入门第三集!LaTeX的几个应用!
  2. Linux基础——bash基础应用及文件系统基础命令
  3. Tomcat源码分析 - 1
  4. 归一化处理公式_特征工程连续特征的常见处理方式(含实例)
  5. Bootstrap中DropDown插件显示下拉列表,点击下拉列表区域,不会再自动关闭。
  6. java 类型转换_java中的基本数据类型的转换
  7. office右键菜单修复_自从有了这个工具,我的Office操作已经快到慢不下来了!
  8. python字符串与数字互相转换
  9. SAS® Model Studio功能调研
  10. 第三方物流(Third Party Logistics,3PL)
  11. kubernetes Ingress是什么
  12. 技嘉h310主板前置音频没声音_急死人!新装机箱前置音频没声音?不要急!一招轻松解决。...
  13. 游戏框架(框架入门篇)
  14. intel服务器芯片组C,Intel C232芯片组 华硕P10S-C售2399元
  15. 计算机配置里面没有网络选项,解决win10网络设置中没有以太网的方法
  16. 专家学者热议智慧交通:大数据云计算,出行有“千里眼”
  17. 退款java_APP支付 + 退款(JAVA实现)
  18. GNS3实现VPLS实验
  19. 新用户腾讯云国外服务器2核4G服务器使用攻略
  20. 【构成L4笔记:拆解分组再构筑】

热门文章

  1. 「福利分享」C语言书籍大全
  2. 用java写一个简单的飞机大战游戏
  3. 解决linux安装中文字体的方法
  4. 云盒子企业云盘实用案例:深谈文档云管理在制造行业的落地及应用
  5. mendeley高亮与mendeley取消高亮_mendeley highlight_mendeley highlight canceling
  6. 【Audio driver】声卡名字的由来
  7. Ren’py语言编程,心跳文学部mod制作①
  8. java bitmap图片_Bitmap图片的处理
  9. 怎样处理不让删除的病毒
  10. vue后台管理系统搭建