Vert.X企业级Web应用设计与实现

2015-07-25 06:51吕海东葛日波
微型电脑应用 2015年11期
关键词:服务器端企业级客户端

吕海东,葛日波

0 引言

当前由于移动互联网的飞速发展,智能手机和平板请求访问Web应用极为普遍,进而产生大量移动客户端访问Web应用导致Web Server无法满足如此巨大的高并发性访问需求,即所谓的C10K问题,当并发连接超过10,000以上时使用传统技术会引发暂停,类似微信的实时数据传输类应用尤为突出。

传统的企业级 Web应用一般使用基于 Oracle公司的JavaEE的JSSHA(JavaEE+Struts+Spring+Hibernate+AJAX)框架[3],或基于微软 DOTNET平台开发,它们都使用多线程技术实现多连接请求,因此都面临C10K性能瓶颈,要解决大并发客户的请求只能进行服务器群集,导致系统设备投资巨大,中小企业难以承受。

为解决以上问题,最先出现的解决方案就是Node,js技术,通过采用单线程、非阻塞、异步工作模式、事件循环机制很好解决了C10K问题,一般情况下单CPU服务器即可支持超万个并发连接。其后Vert.x在Node.js的优点之上,将基础平台移到JVM上,引入分布式并发机制以及自动支持多核CPU的能力,在一个单CPU八核的Intel E5服务器上即可支持数十万并发连接请求,因此Vert.x必将成为未来开发移动Web应用的首选平台。

本文重点介绍了使用Vert.x服务器框架实现企业级Web应用的设计和实现,并结合一个使用微信公共平台技术的Web应用的开发进行说明。

1 Vert.x概述

Vert.x是基于JVM平台的轻量级,高性能的服务器端框架。专门用于开发移动应用,Web和企业级应用,它的核心特点是单线程,非阻塞,事件驱动模型,多样性,高并发。

Vert.x的核心是Vert.x实例[4],它是运行所有Vert.x组件的容器,Vert.x框架自动识别CPU内核个数,在每个内核上都创建一个实例,并把所有组件同时部署在每个实例中,实现组件的并行运行,并内置机制自动执行动态负载均衡,当一个事件接收时自动选择空闲的组件执行,从而实现高并发Web应用。更进一步Vert.x实例可以分布到多个服务器上,实现分布式处理,实现系统的可伸缩性,实现超大量级并发请求。

Vert.x使用基于角色的事件循环监测的并发模式(Actor-like Concurrency Model)[5],彻底地解决了C10K问题。Vert.x基本编程组件称为Verticle,可将企业级应用的各个功能分解为众多Verticle,每个Verticle执行单一的业务功能,所有Verticle都独立运行在Vert.x实例一个线程中,而非传统的多线程模式。当应用业务复杂,使用的Verticle较多时,可以使用模块(Module)机制将相似功能的 Verticle打包到模块中,整个项目就是由不同的模块组成,载入模块时,模块中包含的Verticle会自动载入Vert.x实例中运行。

Verticle之间不能直接调用和传递数据,只能通过在分布式Event Bus上发布和接收事件完成。Verticle通过在Event Bus上注册事件处理器来接收事件和事件中携带的数据,也可以向Event Bus上发送事件和传输数据。

事件的发送和接收可以采用3种模式:

(1)发布-订阅模式:一个Event Bus上的事件可以被所有注册的接收者接收,实现群发功能,如数据的检索和显示等。

(2)点对点模式:一个事件只能被一个接收者接收,完成定点数据传输功能,如工作流审批等业务可以通过此模式完成。

(3)请求-回复模式:在点对点基础上增加自动回复功能,可以实现对用户的操作结果提示功能。

使用Vert.x框架设计实现企业级应用的核心工作就是编写完成实现各种业务功能的 Verticle,定义各种 Event Bus的事件地址和事件处理器注册,通过在Event Bus发布和接收事件,业务Verticle之间完成间接调用,以此实现整个系统的业务功能。

2 系统设计与实现

2.1 系统总体结构设计

传统的企业级应用设计开发中,如基于 JSSHA(JavaEE+Struts+Spring+Hibernate+Ajax),通常采用分层的架构设计,将整个项目分解为数据服务层(DS-DataBase Service),数据访问层(DAO-Data Access Object),业务层(Bo-Business Object),数据传输层(DTO-Data Transfer Object),控制层(CO-Controller Object),视图层(VO-View Object)。

本文使用Vert.x开发设计了基于微信公共平台的高校学生课程考勤系统,由于在每节课的课前和课后需要学生使用微信扫描投影布显示的二维码进行课程的签到,全校平均一万多学生同时进行扫描并接收处理,使用传统的Tomcat服务器,无法完成如此高并发的请求,因此在综合评估Node.js和Vert.x后,最终选择Vert.x框架实现。

由于Vert.x框架出现较晚,并没有一个成熟的应用开发架构,目前还处于探索和创新阶段。本文借鉴JSSHA架构成熟的分层设计技术,采用了类似的架构设计,系统总体组成参如图1所示:

图1 基于Vert.x的企业级应用架构组成

另外在开发语言选择时,虽然Vert.x支持多语言开发,如 Java、JavaScript、CoffeeScript、Ruby、Python or Groovy等,考虑到Vert.x的异步编程模式,使用Java编程代码量过大,不适合异步编程,JavaScript是最佳选择,内置的回调函数是实现异步编程的最佳选择。

2.2 数据服务层设计实现

数据服务层组件Verticle负责连接MySQL数据库,执行 SQL语句,完成数据的增删改查操作。该层选择成熟的第三方模块 io.vertx~mod-mysql-postgresql_2.10~0.3.1[6],实现操作MySQL数据库,并使用异步工作模式,通过在Event Bus上发送事件,完成对数据表的 SQL操作。该层的核心实现示意代码如下程序所示。

部署该模块并传入数据库配置信息即可,参数 address表示模块监听的事件地址,通过向地址city.oa.lesson.dao发送事件,并传递标准的SQL 动作即可实现对数据库的操作。

2.3 数据访问层(DAO)设计实现

数据访问层负责对业务对象的持久化操作,实现与Hibernate相同的功能。每个数据表的读写设计为一个Verticle,将所有表的数据访问Verticle打包到DAO模块中。如下代码为分院管理的DAO层实现示意代码。

MySQL模块接收标准化的Action参数,以此完成SQL执行并返回执行结果。

2.4 业务层(BO)设计实现

业务层模块包含实现各种业务功能的 Verticle,一般情况下将每个业务对象的管理形成单独的模块,如本系统中的分院模块,专业模块,班级和选课模块等。业务模块接收界面模块发出的业务处理请求事件,对传输的参数进行解析,发出对DAO层调用的事件,完成业务处理。由于编程代码较多,只简要示意对分院增加的代码。

2.5 控制层(CO)设计实现

使用 Vert.x框架,不需要进行控制层编程,Event Bus担当控制层的角色,只需在Event Bus注册不同的事件地址,并注册事件接收处理器即可。

2.6 视图层(UIO)实现

视图层负责用户操作界面的显示和数据输入,采用Web页面技术 HTML、CSS、JavaScript以及 jQuery,Bootstrap框架,结合Vert.x的Event Bus Bridge,将服务器端的Event Bus延伸到客户端,实现服务器端和客户端的实时数据通讯,客户端可以发送事件调用服务器端的 Verticle,也可以定义事件接收处理回调函数接收服务器发送的事件和数据,实现业务数据的查询显示。并且这种数据传输是服务器推送实现的,不需要客户端进行HTTP请求,因此实现了与WebSocket技术相同的实时Web(Real Time Web)功能,由于只传输包含数据的JSON对象,克服了以往普通HTTP或AJAX请求包含的请求头和响应头信息,传输效率高,响应速度快,特别适合各种实时性场合,如工业监控,股票行情,铁路航空订票等。

客户端页面要连接Vert.x服务器的Event Bus,需要在页面中引入Event Bus Bridge和SockJ,为管理客户端元素,引入jQuery框架,引入代码如下:

客户端页面通过 jQuery取得表单元素输入的数据,通过Event Bus Bridge连接到服务器端的Event Bus上,对指定的地址发送事件即可,服务器端的业务处理Verticle会监听此地址的事件,完成对应的业务处理,界面的显示效果如图2所示:

图2 增加分院视图层页面显示

2.7 传输层的(DTO)实现

在传统的Java项目中,需要编程JavaBean实现各层的数据传递,在Vert.x中可以直接使用JavaScript的JSON对象完成数据的传输,而且Vert.x推荐在Event Bus传输JSON对象。如下代码是对分院信息进行封装的JSON对象实现代码,显而易见要比JavaBean简单得多。

3 总结

Vert.x天生的大客户并发连接请求的的处理能力,以及全新的异步响应式工作模式,支持分布式Event Bus,组件调用完全解耦和,超级简单的编程能力必将在企业级应用系统中得到广泛的应用。Vert.x全面超越 Node.js性能上绝对优势,而Node.js又极大超越传统Web框架,如JavaEE,DOT.NET,必将推动Vert.x的飞速发展,进而引起Web领域颠覆性的革命,极有可能彻底淘汰以AJAX为主的web2.0客户端技术,以及传统的服务器框架,引领新的 Web应用开发模式。

[1] Tero Parviainen. Real-time Web Application Development using Vert.x 2.0 [M]. BIRMINGHAM -MUMBAI:Packt Publishing,2013.

[2] Vert.x官方网址 [EB/OL].http://vertx.io/.

[3] 吕海东,张坤著.JavaEE企业级应用开发实例教程[M].北京:清华大学大学出版社,2009.

[4] Enterprise messaging and integration with Vert.x [EB/OL]http://www.javaworld.com/article/2078838/mobile-java/o pen-source-java-projects-vert-x.html/.

[5] Simone Scarduzio. Instant Vert.x [M]. BIRMINGHAM -MUMBAI: Packt Publishing,2013.

[6] Vert.x mysql官方网址 [EB/OL]. https://github.com/ver t-x/mod-mysql-postgresql.

猜你喜欢
服务器端企业级客户端
企业级BOM数据管理概要
Linux环境下基于Socket的数据传输软件设计
如何看待传统媒体新闻客户端的“断舍离”?
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
基于慕课网的“企业级应用开发”课堂教学改革探索
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
企业级信息系统应用级灾备建设与应用