基于NodeJS的渔业资源调查数据采集系统框架重构

2020-01-02 05:58钟德福张良国黄小华吕俊霖
渔业现代化 2019年6期
关键词:渔业资源路由客户端

钟德福,张良国,艾 红,2,黄小华,2,吕俊霖

(1 中国水产科学研究院南海水产研究所,广东 广州 510300;2 农业农村部外海渔业开发重点实验室,广东 广州 510300)

近年来全球范围的渔业资源开发强度不断提高,海洋生态系统遭到不同程度的破坏,渔业资源调查对维护渔业可持续发展和生态系统平衡起着重要作用[1- 2]。其中进行生态研究、渔场开发、渔业资源评估和捕捞策略制定等都离不开现场数据的采集和处理[3- 4]。由于对渔业资源调查的要求提高,以往传统的数据采集方式已不能满足调查数据采集的需求。近年来互联网技术广泛应用于科学研究、野外调查和环境监测等领域,如针对野外数据采集而开发的基于移动智能平台、Android平台和Windows Phone平台的数据采集系统,均能在相关领域实现数据采集[5- 8]。同时,针对渔业数据的采集也开发出基于ArcGIS Mobile、Pocket PC平台的数据采集系统[9- 10],在一定程度上解决了渔业数据采集的智能化问题。但以上系统框架结构具有耦合程度高、移植性差、开发和维护成本高等缺点,不符合主流软件框架的标准[11- 13]。

鉴于渔业资源调查中数据采集具有复杂性、时效性和差异性等特点,重新构建高内聚和易维护的数据采集系统框架非常必要。为满足系统框架重构的要求,本数据采集系统整体框架采用前后端分离设计,前后端独立开发部署,使用统一Restful风格规范的接口提供数据服务。其中采用Nginx作为路由控制,对不同资源的请求进行分配,业务服务层可以专注于业务逻辑处理和提供统一的数据接口服务,从而使系统框架具有低耦合、易维护、可扩展等特点。

1 系统功能设计

渔业资源调查数据采集过程中由于参与者的需求各不相同,因此数据采集系统功能既要保证完整性又要降低使用的复杂性。按业务关系可划分为前端用户和后端用户,前端用户主要包括科研人员、基层数据采集人员等;后端用户主要包括系统维护人员、数据处理人员等。随着数据采集参与者的增加和数据采集需求的变化,导致传统的数据采集系统功能不足、设计复杂和维护成本高等问题。

为了确保系统功能的完整性、降低设计的复杂性,需根据不同参与者的需求设计功能模块和采集参数(表1)。其中,前端用户中的科研人员和基层人员都占有较多的原始数据资源,但科研人员在数据控制和识别需求上比基层人员高,而且科研人员还需根据不同场次的采集调整参数;后端用户中系统管理人员偏重对整个系统的设置,而数据处理人员多是对采集的数据进行加工与分析。

表1 渔业资源调查数据采集系统功能Tab.1 Functions of fishery resource survey data acquisition system

客户端系统:主要向用户提供数据采集、数据查询和数据编辑功能,针对不同需求的用户分别提供一般采集和复杂采集两种模式。根据不同采集场次,用户可通过参数设置对复杂采集进行个性化调整。

后台服务系统:主要向用户提供用户管理、数据处理和接口服务功能。系统管理人员通过用户管理模块对客户端系统用户和后台服务系统用户实现角色和权限控制。数据处理模块为用户提供全部采集数据的查询、导出功能。系统管理和维护人员通过接口服务模块快速定位系统故障,保障系统的稳定性。

2 前后端分离设计

随着互联网技术水平的不断提升,前后端分离逐渐成为业界标准的使用方式[14- 15]。通过合理的前后端分离方式进行有效解耦,并且为以后分布式框架、微服务、跨平台服务打下基础。传统的系统主要使用模型-视图-控制器(model view controller,MVC)[16]框架搭建服务应用,以Java服务器页面(java server pages,JSP)和服务器连接器(server applet,servlet)为例,结构如图1所示。其中前端所有的请求被发送到作为Controller层的Servlet,它根据请求信息将需求分发到指定的View层来响应和渲染。同时Servlet还根据JSP的需求生成Model层的JavaBeans的实例并输出给JSP环境。JSP通过标签方式调用JavaBeans中的数据。为了提高渲染效率,View层可以采用Freemaker、Velocity等模版引擎[17- 19]。这种框架结构在前端开发过度依赖后端,导致系统整体耦合性太强,而且前后端无法单独调试,对于后期维护和移植带来很大困难。

图1 传统MVC系统框架模型Fig.1 Framework of traditional MVC system

传统系统一般从物理层做区分,也即客户端为前端,服务端为后端[20],这种区分方法已经无法满足前后端分离的需求。前后端分离中的前端主要负责Controller层和View层,后端只是负责Model层、业务处理和数据持久化等,结构如图2所示。

图2 前后端分离系统框架模型Fig.2 Framework of the front- end and back- end separation system

在前端的结构中增加一个中间件程序用于连接前后端,相比以前的系统通过前后异步JavaScript 和XML(Asynchronous Javascript And XML,AJAX)到后端,后端直接返回所需的JS对象简谱(JavaScript Object Notation,JSON)数据作为响应[21- 22],中间件可以将请求按需求匹配路由,对响应的JSON数据进行二次处理,减低与后端的耦合性。因此,前后端分离的设计,扩展了前端的职能,如路由的匹配、页面的渲染等,后端更专注于业务的处理。同时,前后端可以独立调试,只需通过双方约定好的接口进行数据交互即可。

3 整体框架设计

3.1 设计目标

(1)对于系统客户端请求要区分静态资源和动态资源,合理分配资源调用,加快客户端页面渲染,提高交互体验。

(2)将Web服务器暴露于外网之中,负责接收请求和路由分配,再通过https模式访问业务服务器,提高数据交互的安全性。

(3)整个系统的请求都要通过规范的Restful风格的接口实现,接口对http中的各类请求做出区分,保障数据资源的安全。

(4)整体框架设计要达到前后端低耦合,实现前后端独立调试和运行,便于系统维护和扩展。

3.2 框架模型与实现

基于NodeJS构建的中间件和Koa2框架来搭建渔业资源调查数据采集系统框架模型见图3。移动客户层主要为系统用户提供友好的操作界面和个性化信息的交互,负责提交采集的数据,是系统框架的第一环。Web服务层主要负责对客户端请求的路由调配,存放静态资源,处理业务服务端返回的数据结构,为客户端调试提供模拟数据,是前后端分离结构的纽带。业务服务层主要负责对采集数据处理和持久化,并向Web服务端返回结果数据,是整个系统框架业务处理的基础。

图3 基于NodeJS的渔业资源调查数据采集系统框架模型Fig.3 Framework of fishery resource survey data acquisition system based on NodeJS

移动应用层的实现:针对移动设备不同的操作系统,采用Cordova+ionic+AngularJS框架来搭建移动客户端系统。其中Cordova作为快速创建跨平台移动应用程序的开发平台,结合HTML5移动开发框架ionic和AngularJS,可以高效开发出适配大部分主流移动设备的客户端系统[23- 25]。ionic提供了大量接近于原生的UI组件,快速创建客户端的交互界面,大大提高使用体验。AngularJS负责提供模板机制、数据绑定和动态请求,能快速处理返回的数据并渲染到页面中[26]。Cordova目前支持大部分的主流移动操作系统,比如Android、IOS、Windows Phone等,保障了客户端的兼容性。

Web服务层的实现:作为系统框架前后端分离设计重要的一环,主要采用Nginx搭建Web服务层,结构见图4。Nginx是一种基于Rest架构风格,支持高并发,作为反向代理进行负载均衡的高性能服务器[27- 29]。其中,Nginx主要负责请求的路由分配,实行反向代理到业务服务层,保障处于内网的业务服务层的安全。另外,采用NodeJS构建中间件应用程序部署于Nginx上,负责响应移动应用层的请求,如果是静态资源请求,则直接返回,如果是动态资源请求,则再向业务服务层发送https请求。对于业务服务层返回的JSON数据可以通过中间件应用程序实现二次处理,再渲染到页面上,减轻客户应用层的渲染压力。整个系统框架通过Web服务层可以避免传统的Ajax直接请求到服务器获取数据的高耦合情况,提高系统整体的运作效率,减低系统的维护成本。

图4 Web服务层框架模型Fig.4 Framework of Web service layer

业务服务层的实现:业务服务层主要负责处理采集数据的业务逻辑处理、提供移动应用端所需的接口服务,实现数据的持久化。业务服务层中采用基于NodeJS的Koa2框架来搭建业务管理系统,Koa2应用程序是具有极简路由配置和优秀错误处理机制的轻量级Web服务框架,能降低开发成本和提高扩展性和维护性[30- 32]。业务管理系统包括用户管理模块、数据处理模块和接口服务模块。用户可以通过业务管理系统在权限范围内对采集数据进行交互,并对整个系统进行个性化设置,实现采集数据的互联互通。

4 结果与分析

4.1 系统调试

对本系统框架进行实验调试,主要包括移动客户端系统测试、Web服务层路由测试、业务服务层测试和整个系统的数据采集流程测试。

(1)移动客户端系统测试。分别在Android 9.0版本、Android 10.0版本和IOS 13.2.2版本上测试安装客户端系统,能顺利安装系统,无出现闪退现象,各模块功能正常显示。

(2)Web服务层路由测试。在Web服务器上安装网络抓包工具WiresharkV1.113,客户端系统点击功能后,网络抓包工具在不同的路径和NodeJS中间件日志都有数据请求显示,表明Web服务层能成功获取客户端系统的请求和响应请求。

(3)业务服务层测试。通过浏览器成功登陆业务服务系统,各功能模块正常运行,并通过接口服务测试成功获取数据库数据。

(4)整体系统的数据采集流程测试。通过移动客户端系统提供的数据采集表单,填入对应数据,提交数据后在移动客户端系统和业务服务系统均能查询数据,检查数据库数据与新增采集数据一致,整个数据采集流程测试成功。

4.2 试验结果

为了验证经过框架重构后系统功能的可靠性,通过与传统前后端未分离的框架在请求静态资源和动态资源上进行对比(以下新系统代表重构后的系统,旧系统代表传统的系统)。试验采用模拟请求方式,在相同4G网络环境下对相同静态资源进行多次请求,试验结果见表2。

表2 静态资源请求结果对比Tab.2 Comparison of static resource request results

另外,试验结合数据采集和动态资源请求,对测试分为采集数据的查询、新增、编辑和删除操作4个方面,在相同4G网络环境下对相同操作进行模拟请求试验,以某次采集数据为例,试验结果见表3。由于渔业资源调查时数据采集的网络环境不同,因此在Android模拟器上安装移动客户端系统,分别在3G和4G的环境下测试整体数据采集情况,试验结果见表4。

从表2、表3和表4中可看出,新系统能成功请求静态资源和动态资源,所获数据与移动客户端系统的数据完全一致,响应时间与旧系统相比略有优势;在网络环境欠佳的情况下,虽然响应时长有所增加,但各功能依然能成功运行。结果表明该系统经过框架重构后能正常实现实时数据采集工作。

表3 动态资源请求结果对比Tab.3 Comparison of dynamic resource request results

表4 3G和4G环境下数据采集结果对比Tab.4 Comparison of data acquisition results on 3G and 4G

4.3 结果分析

经过调试和试验,基于NodeJS的渔业资源调查数据集采集系统达到了系统设计目标,能满足数据采集人员对渔业资源调查的需求,以及系统开发人员和维护人员对系统可扩展、易维护的需求,提高了数据采集系统的数据安全,降低了维护成本。但是,该系统也存在一些不足,如在网络环境欠佳情况下提高响应不稳定,以及Web服务器的安全和负载均衡等问题。

5 结论

本系统框架重构充分发挥了前后端分离设计低耦合、易维护、可扩展等优点,既能实现数据采集人员实时数据采集功能,还可方便系统开发人员对各层系统独立进行维护和拓展。由于该框架设计是以Restful风格接口实现各类请求,对于移动应用层、业务服务层的变更可独立进行,降低了联调成本,提高了可靠性,对于日后多端应用的拓展有一定的优势。

猜你喜欢
渔业资源路由客户端
你的手机安装了多少个客户端
你的手机安装了多少个客户端
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
沅江怀化段渔业资源增殖保护措施
数据通信网VRRP与MSTP联动引发的次优路由问题分析
路由选择技术对比
中韩渔业资源联合增殖放流活动在青岛举行
简述鱇浪白鱼渔业资源相关研究成果、问题与建议
路由重分发时需要考虑的问题
基于AODV 的物联网路由算法改进研究