趙偉華,鄒 賢
(昆明電力交易中心有限責(zé)任公司,昆明 650011)
從2015年以來(lái),全國(guó)各省紛紛推行電力市場(chǎng)化改革,市場(chǎng)信息的公開、透明已經(jīng)成為市場(chǎng)主體的關(guān)注焦點(diǎn)[1-2]。當(dāng)前的電力市場(chǎng)信息披露存在以下問題:不同平臺(tái)發(fā)布的信息分散且割裂,市場(chǎng)主體難以準(zhǔn)確、迅速的獲取自身需要的信息,市場(chǎng)信息有待進(jìn)一步分類和整合;市場(chǎng)主體查詢自己的交易信息只能通過PC端的交易系統(tǒng),獲取信息的便捷性和及時(shí)性有待改進(jìn)。針對(duì)以上問題,本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于移動(dòng)互聯(lián)網(wǎng)的電力市場(chǎng)信息實(shí)時(shí)查詢系統(tǒng),主要研究點(diǎn)為:對(duì)市場(chǎng)信息進(jìn)一步分類和整合,并對(duì)不同種類的用戶進(jìn)行自定義群組劃分和管理,在此基礎(chǔ)上完成了系統(tǒng)的功能設(shè)計(jì);基于MVC[3]和MVP[4]邏輯架構(gòu),實(shí)現(xiàn)了一個(gè)以交互式信息查詢?yōu)楹诵墓δ艿南到y(tǒng);設(shè)計(jì)了一種基于Redis緩存[5]的數(shù)據(jù)查詢機(jī)制,保證了信息查詢的效率;設(shè)計(jì)并實(shí)現(xiàn)了一種基于Token驗(yàn)證和RSA加密技術(shù)相結(jié)合的數(shù)據(jù)安全機(jī)制[6];設(shè)計(jì)并實(shí)現(xiàn)了一種基于線程池技術(shù)的并發(fā)服務(wù)端模式[7-8],有效的支持了高并發(fā)訪問。
本系統(tǒng)由前端應(yīng)用和后臺(tái)管理兩大部分組成,前端應(yīng)用在手機(jī)上(Android和IOS)為用戶提供服務(wù),后臺(tái)管理通過瀏覽器為管理員服務(wù),系統(tǒng)功能架構(gòu)如圖1所示。
圖1 系統(tǒng)架構(gòu)
前端應(yīng)用為用戶提供市場(chǎng)信息的統(tǒng)計(jì)與查詢功能,分為三大功能模塊:統(tǒng)計(jì)模塊、消息查看模塊和個(gè)人中心模塊。
(1)統(tǒng)計(jì)模塊提供對(duì)市場(chǎng)相關(guān)數(shù)據(jù)的統(tǒng)計(jì)和展示功能,包括全網(wǎng)交易數(shù)據(jù)統(tǒng)計(jì)、市場(chǎng)主體注冊(cè)數(shù)據(jù)統(tǒng)計(jì)和我的交易數(shù)據(jù)統(tǒng)計(jì)等三個(gè)子模塊。全網(wǎng)交易數(shù)據(jù)統(tǒng)計(jì)模塊根據(jù)不同的交易品種將數(shù)據(jù)進(jìn)行分類和整合,按照不同的粒度分為三塊進(jìn)行統(tǒng)計(jì)和展示:月度交易匯總、月度交易品種和日前交易信息。市場(chǎng)主體注冊(cè)數(shù)據(jù)統(tǒng)計(jì)模塊展示市場(chǎng)主體詳細(xì)信息,包含不同類型的電廠數(shù)量占比、電廠裝機(jī)占比、注冊(cè)用戶數(shù)、售電公司等。我的交易數(shù)據(jù)統(tǒng)計(jì)模塊展示登錄用戶交易數(shù)據(jù)的統(tǒng)計(jì),包含年度交易、月度交易、日前交易等。
(2)消息查看模塊展示電力交易中心向用戶發(fā)布的消息,消息分為公告通知、市場(chǎng)簡(jiǎn)報(bào)、市場(chǎng)主體信息公開等類別,該模塊為用戶提供分類查看功能。
(3)個(gè)人中心模塊展示用戶的基本信息,并提供登錄賬戶的交易信息查詢、與售電公司的委托關(guān)系查詢、APP的個(gè)性化設(shè)置等功能。
后臺(tái)管理為管理員提供綜合管理功能,分為四大功能模塊:系統(tǒng)管理模塊、用戶管理模塊、消息管理模塊和版本管理模塊。
(1)系統(tǒng)管理模塊提供對(duì)系統(tǒng)基礎(chǔ)功能的管理,包括系統(tǒng)設(shè)置、權(quán)限管理、日志管理等功能。
(2)用戶管理模塊提供對(duì)系統(tǒng)前端登錄用戶的管理,包括用戶的新增、啟用/停用、修改等功能,其中系統(tǒng)前端登錄用戶數(shù)據(jù)全部與市場(chǎng)交易系統(tǒng)數(shù)據(jù)庫(kù)同步,在后臺(tái)中,此類用戶不可進(jìn)行新建。
(3)消息管理模塊為交易中心提供向用戶發(fā)布消息的管理,包括編輯消息、刪除消息、發(fā)布消息等功能。
(4)版本管理模塊提供系統(tǒng)版本的后臺(tái)管理,包括版本更新、版本刪除、版本文件下載等功能。
系統(tǒng)的移動(dòng)端包含Android和IOS兩部分應(yīng)用程序,采用C/S模式,在成熟的Android框架和Apple Cocoa Touch框架的基礎(chǔ)上,整體邏輯上使用了MVC和MVP設(shè)計(jì)架構(gòu);后端服務(wù)使用了基于線程池的并發(fā)模式,很好的支持了大規(guī)模并發(fā)訪問;存儲(chǔ)采用了Oracle數(shù)據(jù)庫(kù)和Redis緩存相結(jié)合的方式,大大提高了數(shù)據(jù)讀取的效率。
本系統(tǒng)的開發(fā)整體上采用了MVC邏輯模型,較好的滿足了交互式應(yīng)用的要求。但是,MVC模型應(yīng)用到手機(jī)應(yīng)用開發(fā)還存在不同層間耦合度高等問題,因此,在MVC的基礎(chǔ)上引入了MVP框架,進(jìn)一步拆分了應(yīng)用的業(yè)務(wù)邏輯,極大地的提高了開發(fā)的靈活性。
(1)MVC(Model-View-Controller)框架:MVC(如圖2(a)所示)主要適用于交互式的應(yīng)用,這種體系結(jié)構(gòu)將軟件開發(fā)過程中的數(shù)據(jù)處理、程序輸入/輸出控制和數(shù)據(jù)表示分離開來(lái),并描述了不同部分的對(duì)象之間的通信方式,使開發(fā)結(jié)構(gòu)清晰而靈活。傳統(tǒng)的手機(jī)應(yīng)用開發(fā)普遍采用了MVC邏輯模型,其中Model層負(fù)責(zé)業(yè)務(wù)處理和數(shù)據(jù)操作,Controller對(duì)應(yīng)Activity,負(fù)責(zé)事件的派發(fā)和回調(diào),View對(duì)應(yīng)各種Layout布局文件,負(fù)責(zé)數(shù)據(jù)展現(xiàn)。然而,將MVC框架直接應(yīng)用到手機(jī)應(yīng)用開發(fā)中會(huì)存在問題:Activity不僅僅負(fù)責(zé)事件的派發(fā)和回調(diào),還負(fù)責(zé)很多UI操作,這就導(dǎo)致Controller和View之間存在嚴(yán)重的耦合。
(2)MVP(Model-View-Presenter)框架:在MVC框架的基礎(chǔ)上,MVP(如圖2(b)所示)將Activity和Layout合并作為View層,并在Model層和View層之間增加了Presenter層,負(fù)責(zé)所有的業(yè)務(wù)邏輯工作,Controller作為View和Presenter之間的一個(gè)中間層,專門負(fù)責(zé)事件的派發(fā)。這樣進(jìn)一步明確了不同層的職能范疇,優(yōu)化了不同層之間的協(xié)作機(jī)制,一方面降低了不同層之間的耦合度,另一方面大大簡(jiǎn)化了Activity中的工作。
圖2(a)MVC框架
圖2(b)MVP框架
數(shù)據(jù)查詢是系統(tǒng)的核心功能,涉及到前后端的交互,前端負(fù)責(zé)發(fā)起請(qǐng)求并根據(jù)反饋結(jié)果展示數(shù)據(jù),后端負(fù)責(zé)處理請(qǐng)求并返回結(jié)果(如圖3所示)。
(1)數(shù)據(jù)查詢流程:前端發(fā)起的數(shù)據(jù)查詢請(qǐng)求通過一個(gè)請(qǐng)求隊(duì)列進(jìn)行管理,隊(duì)列中的數(shù)據(jù)通過網(wǎng)絡(luò)傳輸?shù)胶笈_(tái),同樣由一個(gè)請(qǐng)求隊(duì)列管理,請(qǐng)求被后臺(tái)服務(wù)受理后,進(jìn)行邏輯拆分,并通過數(shù)據(jù)讀寫模塊查詢需要的數(shù)據(jù)。數(shù)據(jù)讀寫模塊首先從緩存中讀取數(shù)據(jù),如果緩存中沒有所需數(shù)據(jù),則查詢數(shù)據(jù)庫(kù)并將該條數(shù)據(jù)放入緩存。
(2)緩存管理機(jī)制:緩存機(jī)制的引入是為了降低直接訪問數(shù)據(jù)庫(kù)的頻率,提高數(shù)據(jù)查詢的效率。在兩種情況下需要更新緩存:一種是需要查詢的數(shù)據(jù)沒有在緩存中,則將該數(shù)據(jù)放入緩存;另一種是數(shù)據(jù)庫(kù)中的數(shù)據(jù)有更新時(shí),要同步更新緩存中相關(guān)數(shù)據(jù)。
圖3 前后端數(shù)據(jù)交互機(jī)制
為了保證數(shù)據(jù)的安全性,采用了token驗(yàn)證和數(shù)據(jù)加密相結(jié)合的方式:服務(wù)端收到客戶端發(fā)起的登錄驗(yàn)證請(qǐng)求后,檢查用戶名和密碼的正確性,如果驗(yàn)證通過,則隨機(jī)生成并返回一個(gè)唯一的token字符串,在緩存中維護(hù)一個(gè)token字符串和用戶信息的映射表;客戶端發(fā)起的請(qǐng)求涉及到敏感數(shù)據(jù)時(shí),需要將token字符串一并發(fā)送給服務(wù)器,服務(wù)端通過緩存中的映射表進(jìn)行身份驗(yàn)證后才能進(jìn)行相關(guān)處理;當(dāng)用戶退出登錄時(shí),客戶端和服務(wù)端刪除對(duì)應(yīng)的token;為了進(jìn)一步保證數(shù)據(jù)的安全性,在傳輸過程中使用基于RSA的數(shù)字信封技術(shù)進(jìn)行加密。
為了提高數(shù)據(jù)查詢響應(yīng)的及時(shí)性,本系統(tǒng)采用了并發(fā)服務(wù)端模式。傳統(tǒng)的多線程服務(wù)端模式分為主線程和工作線程,主線程負(fù)責(zé)建立連接,工作線程負(fù)責(zé)處理具體的業(yè)務(wù)邏輯。在這種模式下,工作線程根據(jù)業(yè)務(wù)邏輯的需求進(jìn)行創(chuàng)建或銷毀,而由于業(yè)務(wù)邏輯的不確定性,導(dǎo)致了線程的頻繁創(chuàng)建和銷毀,造成了資源的大量消耗。為了解決這個(gè)問題,我們采用了線程池技術(shù),讓線程得到復(fù)用,大大降低了服務(wù)器創(chuàng)建和銷毀線程所花費(fèi)的時(shí)間和資源。
線程池技術(shù)的應(yīng)用:后端服務(wù)在線程池中預(yù)先創(chuàng)建部分線程,前端發(fā)起的請(qǐng)求通過網(wǎng)絡(luò)傳輸?shù)胶蠖擞梢粋€(gè)請(qǐng)求隊(duì)列進(jìn)行管理,線程管理器通過輪詢的方式查看請(qǐng)求隊(duì)列,只要請(qǐng)求隊(duì)列不為空,則將請(qǐng)求提取出隊(duì),并喚醒相應(yīng)的線程進(jìn)行處理,將處理結(jié)果放入響應(yīng)隊(duì)列中進(jìn)行管理。如果線程池中沒有能處理請(qǐng)求的線程,則創(chuàng)建新的線程進(jìn)行處理并添加到線程池中。
系統(tǒng)部署架構(gòu)如圖4所示。前端應(yīng)用采用C/S模式進(jìn)行部署,APP客戶端安裝于市場(chǎng)主體用戶的移動(dòng)端(提供iOS和Android版本),通過互聯(lián)網(wǎng)訪問后臺(tái)應(yīng)用服務(wù)器。后端管理采用B/S架構(gòu)進(jìn)行部署,后端服務(wù)部署于電力交易中心后臺(tái)應(yīng)用服務(wù)器上,并支持軟、硬件負(fù)載均衡機(jī)制,后臺(tái)應(yīng)用服務(wù)器通過接入互聯(lián)網(wǎng)為移動(dòng)客戶端提供服務(wù)。后端數(shù)據(jù)存儲(chǔ)采用SAN架構(gòu)存儲(chǔ)方式進(jìn)行部署,后臺(tái)服務(wù)器通過訪問緩存和數(shù)據(jù)庫(kù)服務(wù)器集群進(jìn)行數(shù)據(jù)的存取,數(shù)據(jù)庫(kù)服務(wù)器集群通過SAN交換機(jī)與存儲(chǔ)進(jìn)行數(shù)據(jù)交互。
圖4 系統(tǒng)部署架構(gòu)
本文結(jié)合當(dāng)前電力市場(chǎng)信息披露的實(shí)際情況,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于移動(dòng)互聯(lián)網(wǎng)的電力市場(chǎng)信息實(shí)時(shí)查詢系統(tǒng),滿足了市場(chǎng)主體對(duì)移動(dòng)端即時(shí)消息接收和交易結(jié)果快捷查詢的相關(guān)需求,為市場(chǎng)主體與交易中心之間構(gòu)建了一條即時(shí)、安全、可信、便捷的信息通道。
[1] 夏清,葉澤.當(dāng)前中國(guó)電力改革與電力市場(chǎng)建設(shè)的熱點(diǎn)聚焦[J].中國(guó)電力,2017(4):6-6.
[2] 張粒子,許傳龍.中國(guó)能源大省電力市場(chǎng)建設(shè)經(jīng)驗(yàn)分析[J].中國(guó)電力,2017,50(4):7-10.
[3] 田娟,徐釗.基于J2EE的MVC設(shè)計(jì)模式的分析與思考[J].計(jì)算機(jī)與現(xiàn)代化,2010,1(10):54-58.
[4] 王念橋.應(yīng)用MVP模式改進(jìn)軟件架構(gòu)[J].計(jì)算機(jī)時(shí)代,2012(4):37-38.
[5] 曾超宇,李金香.Redis在高速緩存系統(tǒng)中的應(yīng)用[J].微型機(jī)與應(yīng)用,2013,32(12):11-13.
[6] 方文和,李國(guó)和,吳衛(wèi)江.面向Android的RSA算法優(yōu)化與二維碼加密防偽系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)科學(xué),2017,44(1):176-182.
[7] 陳濤,任海蘭.基于Linux的多線程池并發(fā)Web服務(wù)器設(shè)計(jì)[J].電子設(shè)計(jì)工程,2015(11):167-169.
[8] 吉利,潘林云,劉姚.線程池技術(shù)在網(wǎng)絡(luò)服務(wù)器中的應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2017,27(7):149-151.