基于移动互联网的电力市场信息实时查询系统设计与实现
2018-04-18赵伟华
赵伟华,邹 贤
(昆明电力交易中心有限责任公司,昆明 650011)
1 引言
从2015年以来,全国各省纷纷推行电力市场化改革,市场信息的公开、透明已经成为市场主体的关注焦点[1-2]。当前的电力市场信息披露存在以下问题:不同平台发布的信息分散且割裂,市场主体难以准确、迅速的获取自身需要的信息,市场信息有待进一步分类和整合;市场主体查询自己的交易信息只能通过PC端的交易系统,获取信息的便捷性和及时性有待改进。针对以上问题,本文设计并实现了一个基于移动互联网的电力市场信息实时查询系统,主要研究点为:对市场信息进一步分类和整合,并对不同种类的用户进行自定义群组划分和管理,在此基础上完成了系统的功能设计;基于MVC[3]和MVP[4]逻辑架构,实现了一个以交互式信息查询为核心功能的系统;设计了一种基于Redis缓存[5]的数据查询机制,保证了信息查询的效率;设计并实现了一种基于Token验证和RSA加密技术相结合的数据安全机制[6];设计并实现了一种基于线程池技术的并发服务端模式[7-8],有效的支持了高并发访问。
2 功能设计
本系统由前端应用和后台管理两大部分组成,前端应用在手机上(Android和IOS)为用户提供服务,后台管理通过浏览器为管理员服务,系统功能架构如图1所示。
图1 系统架构
2.1 前端应用功能设计
前端应用为用户提供市场信息的统计与查询功能,分为三大功能模块:统计模块、消息查看模块和个人中心模块。
(1)统计模块提供对市场相关数据的统计和展示功能,包括全网交易数据统计、市场主体注册数据统计和我的交易数据统计等三个子模块。全网交易数据统计模块根据不同的交易品种将数据进行分类和整合,按照不同的粒度分为三块进行统计和展示:月度交易汇总、月度交易品种和日前交易信息。市场主体注册数据统计模块展示市场主体详细信息,包含不同类型的电厂数量占比、电厂装机占比、注册用户数、售电公司等。我的交易数据统计模块展示登录用户交易数据的统计,包含年度交易、月度交易、日前交易等。
(2)消息查看模块展示电力交易中心向用户发布的消息,消息分为公告通知、市场简报、市场主体信息公开等类别,该模块为用户提供分类查看功能。
(3)个人中心模块展示用户的基本信息,并提供登录账户的交易信息查询、与售电公司的委托关系查询、APP的个性化设置等功能。
2.2 后台管理功能设计
后台管理为管理员提供综合管理功能,分为四大功能模块:系统管理模块、用户管理模块、消息管理模块和版本管理模块。
(1)系统管理模块提供对系统基础功能的管理,包括系统设置、权限管理、日志管理等功能。
(2)用户管理模块提供对系统前端登录用户的管理,包括用户的新增、启用/停用、修改等功能,其中系统前端登录用户数据全部与市场交易系统数据库同步,在后台中,此类用户不可进行新建。
(3)消息管理模块为交易中心提供向用户发布消息的管理,包括编辑消息、删除消息、发布消息等功能。
(4)版本管理模块提供系统版本的后台管理,包括版本更新、版本删除、版本文件下载等功能。
3 系统实现
系统的移动端包含Android和IOS两部分应用程序,采用C/S模式,在成熟的Android框架和Apple Cocoa Touch框架的基础上,整体逻辑上使用了MVC和MVP设计架构;后端服务使用了基于线程池的并发模式,很好的支持了大规模并发访问;存储采用了Oracle数据库和Redis缓存相结合的方式,大大提高了数据读取的效率。
3.1 逻辑模型
本系统的开发整体上采用了MVC逻辑模型,较好的满足了交互式应用的要求。但是,MVC模型应用到手机应用开发还存在不同层间耦合度高等问题,因此,在MVC的基础上引入了MVP框架,进一步拆分了应用的业务逻辑,极大地的提高了开发的灵活性。
(1)MVC(Model-View-Controller)框架:MVC(如图2(a)所示)主要适用于交互式的应用,这种体系结构将软件开发过程中的数据处理、程序输入/输出控制和数据表示分离开来,并描述了不同部分的对象之间的通信方式,使开发结构清晰而灵活。传统的手机应用开发普遍采用了MVC逻辑模型,其中Model层负责业务处理和数据操作,Controller对应Activity,负责事件的派发和回调,View对应各种Layout布局文件,负责数据展现。然而,将MVC框架直接应用到手机应用开发中会存在问题:Activity不仅仅负责事件的派发和回调,还负责很多UI操作,这就导致Controller和View之间存在严重的耦合。
(2)MVP(Model-View-Presenter)框架:在MVC框架的基础上,MVP(如图2(b)所示)将Activity和Layout合并作为View层,并在Model层和View层之间增加了Presenter层,负责所有的业务逻辑工作,Controller作为View和Presenter之间的一个中间层,专门负责事件的派发。这样进一步明确了不同层的职能范畴,优化了不同层之间的协作机制,一方面降低了不同层之间的耦合度,另一方面大大简化了Activity中的工作。
图2(a)MVC框架
图2(b)MVP框架
3.2 数据查询机制
数据查询是系统的核心功能,涉及到前后端的交互,前端负责发起请求并根据反馈结果展示数据,后端负责处理请求并返回结果(如图3所示)。
(1)数据查询流程:前端发起的数据查询请求通过一个请求队列进行管理,队列中的数据通过网络传输到后台,同样由一个请求队列管理,请求被后台服务受理后,进行逻辑拆分,并通过数据读写模块查询需要的数据。数据读写模块首先从缓存中读取数据,如果缓存中没有所需数据,则查询数据库并将该条数据放入缓存。
(2)缓存管理机制:缓存机制的引入是为了降低直接访问数据库的频率,提高数据查询的效率。在两种情况下需要更新缓存:一种是需要查询的数据没有在缓存中,则将该数据放入缓存;另一种是数据库中的数据有更新时,要同步更新缓存中相关数据。
图3 前后端数据交互机制
3.3 数据安全机制
为了保证数据的安全性,采用了token验证和数据加密相结合的方式:服务端收到客户端发起的登录验证请求后,检查用户名和密码的正确性,如果验证通过,则随机生成并返回一个唯一的token字符串,在缓存中维护一个token字符串和用户信息的映射表;客户端发起的请求涉及到敏感数据时,需要将token字符串一并发送给服务器,服务端通过缓存中的映射表进行身份验证后才能进行相关处理;当用户退出登录时,客户端和服务端删除对应的token;为了进一步保证数据的安全性,在传输过程中使用基于RSA的数字信封技术进行加密。
3.4 并发服务端模式
为了提高数据查询响应的及时性,本系统采用了并发服务端模式。传统的多线程服务端模式分为主线程和工作线程,主线程负责建立连接,工作线程负责处理具体的业务逻辑。在这种模式下,工作线程根据业务逻辑的需求进行创建或销毁,而由于业务逻辑的不确定性,导致了线程的频繁创建和销毁,造成了资源的大量消耗。为了解决这个问题,我们采用了线程池技术,让线程得到复用,大大降低了服务器创建和销毁线程所花费的时间和资源。
线程池技术的应用:后端服务在线程池中预先创建部分线程,前端发起的请求通过网络传输到后端由一个请求队列进行管理,线程管理器通过轮询的方式查看请求队列,只要请求队列不为空,则将请求提取出队,并唤醒相应的线程进行处理,将处理结果放入响应队列中进行管理。如果线程池中没有能处理请求的线程,则创建新的线程进行处理并添加到线程池中。
3.5 系统部署
系统部署架构如图4所示。前端应用采用C/S模式进行部署,APP客户端安装于市场主体用户的移动端(提供iOS和Android版本),通过互联网访问后台应用服务器。后端管理采用B/S架构进行部署,后端服务部署于电力交易中心后台应用服务器上,并支持软、硬件负载均衡机制,后台应用服务器通过接入互联网为移动客户端提供服务。后端数据存储采用SAN架构存储方式进行部署,后台服务器通过访问缓存和数据库服务器集群进行数据的存取,数据库服务器集群通过SAN交换机与存储进行数据交互。
图4 系统部署架构
4 结束语
本文结合当前电力市场信息披露的实际情况,设计并实现了一个基于移动互联网的电力市场信息实时查询系统,满足了市场主体对移动端即时消息接收和交易结果快捷查询的相关需求,为市场主体与交易中心之间构建了一条即时、安全、可信、便捷的信息通道。
[1] 夏清,叶泽.当前中国电力改革与电力市场建设的热点聚焦[J].中国电力,2017(4):6-6.
[2] 张粒子,许传龙.中国能源大省电力市场建设经验分析[J].中国电力,2017,50(4):7-10.
[3] 田娟,徐钊.基于J2EE的MVC设计模式的分析与思考[J].计算机与现代化,2010,1(10):54-58.
[4] 王念桥.应用MVP模式改进软件架构[J].计算机时代,2012(4):37-38.
[5] 曾超宇,李金香.Redis在高速缓存系统中的应用[J].微型机与应用,2013,32(12):11-13.
[6] 方文和,李国和,吴卫江.面向Android的RSA算法优化与二维码加密防伪系统设计[J].计算机科学,2017,44(1):176-182.
[7] 陈涛,任海兰.基于Linux的多线程池并发Web服务器设计[J].电子设计工程,2015(11):167-169.
[8] 吉利,潘林云,刘姚.线程池技术在网络服务器中的应用[J].计算机技术与发展,2017,27(7):149-151.