阅读更多

7顶
0踩

编程语言

原创新闻 关于Java框架Vert.x的几点思考

2015-05-21 16:19 by 副主编 mengyidan1988 评论(2) 有5987人浏览
在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
综述

综合来看,Vert.x3还未正式发布,但其主体功能已经开发完毕并趋于稳定,在应用开发中已经可以考虑使用。程序员在适应了异步回调式的编程方式后,相信很快可能感受到Reactor模式的性能红利和Vert.x的魅力。也许Vert.x会给Java和应用框架领域带来不一样的惊喜。



作者简介:白小勇,炼石网络CipherGateway创始人, CEO,专注公有云安全。曾就职 于中国数码集团负责研发CMS、在用友工程负责研发ERP和代码 生成器平台、用友电信事业部研发平台总监,毕业于北京理工大 学。关注领域:密码应用、数据处理引擎技术、云平台、快速应 用开发平台。
  • 大小: 118.7 KB
  • 大小: 209.9 KB
  • 大小: 125.8 KB
  • 大小: 143.9 KB
  • 大小: 147.9 KB
  • 大小: 148.9 KB
  • 大小: 160.4 KB
7
0
评论 共 2 条 请登录后发表评论
2 楼 Vity 2015-05-27 12:01
白兄~  我来顶你了
1 楼 zhangthe9 2015-05-22 22:31
项目链接没了。。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

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

    Java面试经验

  • Vert.x(vertx) 简明介绍

    Vert.x最大的特点就在于异步(底层基于Netty),通过事件循环(EventLoop)来调起存储在异步任务队列(CallBackQueue)中的任务,大大降低了传统阻塞模型中线程对于操作系统的开销。因此相比较传统的阻塞模型,异步...

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

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

  • 27Vert.X框架学习笔记

    vert.x框架学习笔记 文章目录1 Vert.x简明介绍1.1 Vert.x能干什么1.2 Vert.x快速体验1.3 Vert.x的简单介绍1.4 Vert.x的一些优势1.4.1 异步非阻塞1.4.2 Vertx支持多种编程语言1.4.3 不依赖中间件1.4.4 完善的生态...

  • Vert.x实战 事件总线:Vert.x应用程序的主干

    如何在事件总线上拥有点对点通信【point-to-point】、请求-应答通信【request-reply】、发布/订阅通信【publish/subscribe】 用于在网络上进行verticle到verticle通信【verticle-to-verticle】的分布式事件总线 .....

  • Vert.x实战 Verticles:Vert.x的基本处理单元

    如何混合【mix】Vert.x的线程以及非Vert.x线程 简单地说,verticle是Vert.x中的基本处理单元。verticle的角色是封装用于处理事件的技术功能单元【technical functional unit】,例如暴露HTTP API并响应请求、在...

  • 高性能框架Vert.x

    为什么使用Vert.x框架? 有哪些关键的特性和功能? 是如何做到高性能的?高性能机制详解 简单的开发事例 如何使用vert.x进行优雅的异步开发? 性能到底如何? 生态及发展展望 vert.x是什么? 由Tim Fox于2011年...

  • Vert.x简介、原理与HelloWorld

    关于Vert.x Vertx,是一个基于JVM、轻量级、高性能的应用平台,非常适用于移动端后台、互联网、企业应用架构。 Vertx,基于Netty全异步通信,并扩展出了很多有用的特性。 Vertx,是基于事件总线设计的高性能架构,...

  • 第一章: Vert.x 异步编程的基础知识

    本书这部分的章节将通过使用Vert.x工具包教你异步编程的基本概念。使用Vert.x思考异步操作绝对是可行的(而且很有趣!),我们将探讨Vert.x应用程序的主要构建块。

  • vert.x源码解析之redis集成

    文章目录前言vertx是什么vertx-redis-client是什么vertx-redis-client有哪些特性...vert.x是一个全异步框架,它是reactor线程模型的一种实现,通过内部的event bus跟event loop做到了处处皆异步。关于里面的细节,后面

  • vert.x java_使用Java 9模块和Vert.x微服务构建CI系统

    vert.x java 重要要点 Java 9和Vert.x微服务与构建应用程序兼容 许多Java库仍无法作为模块使用 “自动模块”(库尚未打包为模块)需要格外小心 Java的内置Nashorn Javascript环境对于编写Vert.x应用程序很...

  • Vert.x源码解析 - Core

    希望通过本文的解析,让读者了解...Vert.x是一个事件驱动,基于Netty库构建的高性能应用程序框架。实现了所谓的Multi-Reactor模型,能够充分利用多核CPU实现以事件循环为基础的基本编程模型。同时在此基础上构建了.

  • vert.x 微服务_Tim Fox采访有关Vert.x 3(用于JVM的原始React式微服务工具包)

    vert.x 微服务 Vert.x是用于JVM的React性微服务工具包,它提供了异步,可扩展的并发服务开发模型。 它支持多语种语言开发,并具有对JavaScript,Ruby,Groovy,Scala以及Java的一流支持。 InfoQ有机会赶上了Vert.x...

  • Vert.x入门1 —— 《基础概念》

    Vert.x 在JVM上构建响应式应用程序的工具包,Vert.x不是框架而是工具包。Vert.x基于Netty项目,该项目是JVM的高性能异步网络库。 此描述中有三个重要点:工具包,响应式和“在JVM上”。 首先,Vert.x是一个工具包。...

  • Vert.x框架实现MQTT服务,代码实现及其详解

    Vert.x框架实现MQTT服务代码实现以及详解

  • 记录vert.x的几个BUG

    vert.x本身也有一些bug,用的过程当中发现了,一定会去找到根本原因,能修复的就直接修复了,修复不了的就想办法跳过。 我这边用的是3.5.2。版本有点旧了,至于新的有没有修复,我也就不去探究了,简单记录一下。 ...

  • Vert.x!这是目前最快的 Java 框架

    如果您搜索“最佳网络框架”,您可能会偶然发现Techempower基准测试,其中排名超过300个框架,在那里你可能已经注意到Vert.x是排名最高的。Vert.x是一个多语言 Web 框...

  • 基于AT89C51单片机的三电梯联动控制系统+全部资料+详细文档(高分项目).zip

    【资源说明】 基于AT89C51单片机的三电梯联动控制系统+全部资料+详细文档(高分项目).zip基于AT89C51单片机的三电梯联动控制系统+全部资料+详细文档(高分项目).zip基于AT89C51单片机的三电梯联动控制系统+全部资料+详细文档(高分项目).zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

  • 梯度下降算法:介绍梯度下降算法 实例说明其运行原理

    梯度下降算法,介绍梯度下降算法 实例说明其运行原理,供学习参考。

Global site tag (gtag.js) - Google Analytics