关于Java框架Vert.x的几点思考-CSDN.NET

标签: | 发表时间:2018-09-26 13:39 | 作者:
出处:https://www.csdn.net

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

综述

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


白小勇

作者简介:白小勇,炼石网络CipherGateway创始人、CEO,专注公有云安全。曾就职 于中国数码集团负责研发CMS、在用友工程负责研发ERP和代码 生成器平台、用友电信事业部研发平台总监,毕业于北京理工大 学。关注领域:密码应用、数据处理引擎技术、云平台、快速应 用开发平台。

相关 [java 框架 vert] 推荐:

JAVA RPC 通讯框架

- - 经验沉淀 知识结晶
Bison 是一个JAVA 程间的通信框架,基于apache mina 实现,对mina进行了byteBuffer 缓冲区重用以及半包出处时减少拷贝. 客户端(bison-client) 功能点. 2 支持高用性:高可用的一个基本原则,可以接受快速的失败,但不能接受长时间的等待. Githup地址:https://github.com/gavenpeng/Bison.

Grizzly 2.2发布,开源Java NIO框架

- - ITeye资讯频道
Grizzly框架近日 发布了2.2版本,该版本带来了相当多新特性与改进,而且加入了最新WebSocket规范的实现. Grizzly是一个应用程序框架,专门用于解决编写成千上万用户访问服务器时候产生的各种问题. Grizzly框架诞生于GlassFish项目,能够帮助开发人员利用Java NIO API构建可扩展、高性能、健壮的服务器,编写出可伸缩的服务器端应用.

Java RESTful框架的性能比较

- - 鸟窝
在微服务流行的今天,我们会从纵向和横向分解代码的逻辑,将一些独立的无状态的代码单元实现为微服务,可以将它们发布到一些分布式计算单元或者Docker中,并在性能需要的时候及时地创建更多的服务单元. 微服务是一个概念,并没有规定服务的格式,但是很多厂商和框架都不约而同的采用RESTful的架构,尽管也有一些其它的性能很好的RPC框架.

最好的8个 Java RESTful 框架

- - ITeye资讯频道
原文: Top 8 Java RESTful Micro Frameworks. 译文来自: http://colobu.com/. 过去的每一年,涌现出越来越多的Java框架. 就像JavaScript,每个人都认为他们知道一个好的框架的功能应该是怎么样的. 连我的老祖母现在也使用一个我从来没有听说过而且可能永远不会使用的框架.

Java开发框架之日志

- - 后端技术杂谈 | 飒然Hang
日志在应用开发中是一个非常关键的部分. 有经验的工程师能够凭借以往的经验判断出哪里该打印日志、该以何种级别打印日志. 这样就能够在线上发生问题的时候快速定位并解决问题,极大的减少应用的运维成本. 使用控制台输出其实也算日志的一种,在容器中会打印到容器的日志文件中. 但是,控制台输出过于简单,缺乏日志中级别控制、异步、缓冲等特性,因此在开发中要杜绝使用控制台输出作为日志(System.out.println).

Atmosphere 1.0:支持Java/JavaScript的异步通信框架

- - InfoQ cn
Atmosphere 1.0是一个新的Java/Scala/Groovy框架,它试图将Web浏览器与应用服务器之间的通信抽象出来. 在Web Socket、HTML5服务器端事件和其他特定于应用服务器的解决方案可用时,该框架可以透明地支持,此外还可将长轮询作为一种备选方案. 最初,Web应用程序是采用客户端/服务器模型构建的,始终由客户端向服务器发起连接.

webmagic 0.3.0 发布,高性能Java爬虫框架

- - 开源中国社区最新新闻
webmagic的是一个无须配置、便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫. 之前两个版本的主题分别是"灵活","方便",而此次更新的主题是"性能". 重写了XPath解析器,替换了HtmlCleaner. 这个XPath解析器(我另外建立了一个项目 Xsoup)基于Jsoup完成,比HtmlCleaner性能好一倍以上,同时有更友好的错误提示.

介绍几个java把网页报存为图片的框架

- - CSDN博客Web前端推荐文章
用java实现java截图倒不难,原理吗就是把当前屏幕存成一个图,然后获取鼠标拉去的想去位置然后把截取的图保存到panel里边,再生成图片即可:示例代码就不展示了,网上很多. 下边说几个将网页保存为图片的框架:. 我说这个就是原声的java代码进行封装的一个jar包. 效果非常差,代码就不贴了网上好多.

序列化框架比较:kryo & hessian & Protostuff & java

- - zzm
序列化框架性能对比(kryo、hessian、java、protostuff). 无需静态编译,但序列化前需预先传入schema. 不支持无默认构造函数的类,反序列化时需用户自己初始化序列化后的对象,其只负责将该对象进行赋值. 测试方法:(参考自 https://github.com/eishay/jvm-serializers).

【技术贴】9个基于Java的搜索引擎框架

- - 行业应用 - ITeye博客
9个基于Java的搜索引擎框架. 1.Java全文搜索引擎框架Lucene. 毫 无疑问,Lucene是目前最受欢迎的Java全文搜索框架,准确地说,它是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引 擎. Lucene为开发人员提供了相当完整的工具包,可以非常方便地实现强大的全文检索功能.