`
tcxiang
  • 浏览: 88029 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于Java框架Vert.x的几点思考(转)

 
阅读更多

同步和异步区别:有无通知(是否轮询)
堵塞和非堵塞区别:操作结果是否等待(是否马上有返回值),只是设计方式的不同

 

Vert.x简介

在Java20周年之际,Java用户对Java的抱怨与日俱增,比如内存管理、笨重的JavaEE等。而Java依然在TIOBE编程语言排行榜上艰难的维持第一名的位置,随着一些新编程语言的兴起,这个领域目前呈现一种混战的态势。

在这种背景下,Java届的小鲜肉框架——Vert.x于2015年5月7日发布了3.0-milestone5版本,距离计划6月22日发布Vert.x3.0.0-final越来越近了,Vert.x用户组的粉丝们近期已经迫不及待地在宇宙中心(注:北京五道口)组织了一次Vert.x中国用户组Meetup,针对Vert.x工程化开发问题以及Vert.x3新特性展开了探讨。Vert.x(http://vertx.io/)是一个基于JVM、轻量级、高性能的应用平台,非常适用于最新的移动端后台、互联网、企业应用架构。

Vert.x基于全异步Java服务器Netty,并扩展出了很多有用的特性。Vert.x的亮点有:

同时支持多种编程语言——目前已经支持了Java、JavaScript、Ruby、Python、Groovy、Clojure、Ceylon等。对程序员来说,直接好处就是可以使用各种语言丰富的LIB,同时也不再为编程语言选型而纠结;

异步无锁编程——经典的多线程编程模型能满足很多Web开发场景,但随着移动互联网并发连接数的猛增,多线程并发控制模型性能难以扩展,同时要想控制好并发锁需要较高的技巧,目前Reactor异步编程模型开始跑马圈地,而Vert.x就是这种异步无锁编程的一个首选;

对各种IO的丰富支持——目前Vert.x的异步模型已支持TCP、UDP、FileSystem、DNS、EventBus、Sockjs等;

极好的分布式开发支持——Vert.x通过EventBus事件总线,可以轻松编写分布式解耦的程序,具有很好的扩展性;

生态体系日趋成熟——Vert.x归入Eclipse基金会门下,异步驱动已经支持了Postgres、MySQL、MongoDB、Redis等常用组件,并且有若干Vert.x在生产环境中的应用案例。

Reactor模式

和传统Java框架的多线程模型相比,Vert.x Netty是 Reactor模式的Java实现。考古了一下Reactor模式, 其理论最早由Washington University的Douglas C. Schmidt教授在1995年提出,在《Proactor - An Object Behavioral Pattern for Demultiplexing and Dispatching Handlers for Asynchronous Events 》这篇论文中做了 完整介绍。 

图1-6是对其关键原理部分展开分析。

图1 一个经典Web Server在收到Web浏览器请求后的处理过程

图2 一个经典Web Server使用多线程模型,并发处理来自多个Web浏 览器的请求

图3 Web浏览器连接到一个Reactor模式的Web Server处理过程。利 用了Initiation Dispatcher组件,把耗时的IO操作事件注册到Initiation Dispatcher组件

图4 Web浏览器访问一个Reactor模式的Web Server处理过程。耗时IO 操作由其它线程执行,IO执行完成后通知Initiation Dispatcher,再回到 Http Handler执行

图5 Web浏览器连接一个Proactor模式的Web Server处理过程。和Reactor的主要区别是耗时IO操作交给操作系统异步IO库执行(例如 GNU/Linux aio),操作系统异步IO库执行完毕后,通过异步IO通知机制(例如epoll)触发Completion Dispatch,再交给Http Handler执行

图6 Web浏览器访问一个Proactor模式的Web Server处理过程。和Reactor的主要区别是耗时IO操作交给操作系统异步IO库执行(例如 GNU/Linux aio),操作系统异步IO库执行完毕后,通过异步IO通知机制(例如epoll)触发Completion Dispatch,再交给Http Handler执行

事实上,Vert.x/Netty的Reactor实现部分是在Netty 4.0如上述所示的代码中实现,和上述图中能对应的几个类是io.netty.channel.nio.NioEventLoop,io.netty. channel.epoll.EpollEventLoop,java.nio.channels.spi.SelectorProvide。

 

Vert.x3.0的更新

Vert.x3.0是对Vert.x2.x的重大升级,不仅仅是package从org.vertx到io.vertx的全面替换,一些重要的核心类也都做了破坏式的重构,几乎很难从vert.x2程序升级到vert.x3.0程序。建议新项目直接从Vert.x3.0开始。以下是Vert.x3的一些功能升级:

  • Vert.x2.x中的模块体系去掉了。目前Vert.x3.0推荐用Maven的模块体系,当然不仅限于Maven;支持其他语言在Vert.x上的代码生成;
  • Vert.x3.0项目构建,从Gradle改为Maven;为了更好地利用Java8的Lambdas表达式,只支持Java8;默认采用扁平的classpath结构;
  • Verticle工厂方式简化;支持用编程的方式实例化Verticle、以及部署Verticle实例;当你阻塞Eventloop主线程时警告,阻塞Reactor主线程是一种错误的使用方式;移除了PlatformManager模块;集群管理可以用编程的方式调用支持集群节点之间的共享数据;完全重写了HTTPclient,更完善;
  • WebSocketAPI改善;
  • SSL/TLS的改善;
  • Eventbus的API改善;
  • 支持Eventbus代理;增加了扩展项目集'ext'stack;
  • 增加了MongoService,支持MongoDB的纯异步驱动;
  • 实现ReactiveStreams;
  • 对reactive-streams的实现;
  • 支持Options类的使用,可以构造函数带参数进去;
更完整的样例工程。请见:https://github.com/vert-x3/example-proj

 

综述

分享到:
评论

相关推荐

    关于Java框架Vert.x的几点思考.docx

    Java框架Vert.x是近年来在Java社区中备受关注的一个轻量级、高性能的应用平台,它基于全异步的Java服务器Netty,旨在解决传统Java框架在处理高并发、低延迟场景下的性能瓶颈。本文将深入探讨Vert.x的核心特性和优势...

    vert.x中文 PDF 下载

    vert.x 是一个开源的、高性能的事件驱动应用框架,用于构建反应式的Java应用程序。它以其轻量级、非阻塞I/O模型而闻名,能够充分利用现代多核处理器的潜力,为开发人员提供了一种高效且灵活的方式来构建分布式系统。...

    vert.x-3.4.0.tar.gz

    vert.x 是一个轻量级、高性能的事件驱动的Java应用框架,它允许开发人员以反应式方式编写分布式系统。vert.x 提供了一种基于异步I/O和非阻塞模型的方式来构建可扩展的网络应用程序,这使得它在处理高并发场景时表现...

    Vert.x3.4.2 windows完整版

    在Vert.x 3.4.2中,有几个关键知识点值得我们深入了解: 1. **事件循环(Event Loop)**:Vert.x 的核心是事件循环模型,它基于NIO(非阻塞I/O)来处理并发。每个Vert.x实例都有多个事件循环,它们负责处理异步操作和...

    java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB.zip

    关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业...

    java面试笔试题库java学习笔记开发教程互联网公司面试资料大全合集.zip

    关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业...

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集.zip

    关于Java框架Vert.x的几点思考.docx 关于堆和栈的那些事.docx 写好Java代码的30条经验总结.docx 华为java笔试面试题2014.doc 多态的理解.docx 大公司最喜欢问的Java集合类面试题.docx 大公司的Java面试题集.doc 就业...

    vertx-mail-test:Vert.x 单元示例测试

    `vertx-mail-test` 是一个基于 Vert.x 框架的单元测试示例项目,主要展示了如何对 `vertx-mail` 包进行有效的单元测试。在 Java 开发中,单元测试是确保代码质量、可维护性和可扩展性的重要环节。Vert.x 是一个轻量...

    vertx-gradle-errorprone-bug-reproducer:在Gradle中使用Vert.x APT代码生成器和容易出错时遇到的小样本项目重现问题

    5. **问题排查**:在解决这类问题时,开发者通常会检查以下几点:Gradle插件版本是否与Vert.x和Error Prone兼容,APT的配置是否正确,Error Prone的规则是否过于严格导致误报,以及构建脚本中是否有任何可能导致冲突...

    dasein-cloud-openstack-2013.04.6.zip

    vert.x是一个轻量级、反应式的Java开发框架,用于构建可扩展的、非阻塞式服务器端应用。在这个场景中,"simple mailer"模块可能是一个用于发送电子邮件的组件,但是由于某些原因(可能是性能、兼容性或维护问题),...

    Ktor是一个使用Kotlin以最小的成本快速创建Web应用程序的框架

    Ktor是一个由JetBrains开发的高性能、轻量级的Web框架,专为使用Kotlin语言构建服务器端应用程序而设计。它的主要目标是提供一个简洁、高效且易于使用的工具集,帮助开发者快速搭建Web服务,无需过多关注底层实现...

    Vertx-course

    【顶点训练】课程主要关注的是Vert.x框架的使用,这是一个用Java编写的轻量级、高性能的事件驱动的应用程序开发平台。Vert.x允许开发者构建分布式、反应式的应用系统,适用于微服务架构和云环境。它支持多种编程语言...

    nubes-vertx-benchmark:其余样本应用程序比较vertx和nubes性能

    【标题】"nubes-vertx-benchmark"是一个项目,主要目标是对比和评估两个不同的Java框架——Vert.x和Nubes在性能上的表现。这个项目提供了详细的基准测试,以帮助开发者了解这两个框架在处理高并发、低延迟场景时的...

    compound-sort-helpers_2.9.2-1.0.0.zip

    1. **Vert.x框架**:Vert.x是一个基于Java的轻量级框架,提供了一个异步、非阻塞的I/O模型,使得它在处理高并发场景时表现出色。它支持多种编程语言,包括JavaScript、Ruby、Groovy等,并提供了事件总线、HTTP服务器...

    vertx-hazelcast-3.3.0.CR1.zip

    Vert.x是一个轻量级、高性能的Java库,用于构建反应式应用程序。它提供了一种事件驱动、非阻塞I/O的编程模型,适用于现代云环境。Hazelcast则是一个开源的分布式内存数据存储,常用于缓存、分布式计算和消息队列。...

    npebug_vertx

    【描述】"启动 MainVertx" 提示我们这个项目有一个名为“MainVertx”的主入口点,这通常是指Java程序中的主类,其中包含了启动Vert.x应用的逻辑。在Vert.x中,主类通常会创建一个 Verticle 实例,并部署到Vert.x事件...

    ApexJSTemplates:最简单的 Apex JavaScript 模板示例

    Vert.x是一个开源的、多语言的事件驱动平台,它允许开发者在Java虚拟机(JVM)上构建反应式应用程序。Vert.x的核心设计理念是高并发、低延迟,非常适合微服务架构。通过使用非阻塞I/O和事件循环模型,Vert.x能够高效...

    基于java的docker图形化界面管理WEB应用.zip

    2. **Web框架**:为了构建图形化界面,项目可能使用了Spring Boot、Play Framework或Vert.x等Java Web框架,它们能够快速开发出响应式的、RESTful的Web服务。 3. **前端技术**:Web界面可能使用HTML、CSS和...

Global site tag (gtag.js) - Google Analytics