999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Node.js的高性能站群系統設計與實現

2018-09-14 07:43:58張文盛錢立三
軟件 2018年8期
關鍵詞:用戶信息系統

童 敏,張文盛,錢立三

?

基于Node.js的高性能站群系統設計與實現

童 敏,張文盛,錢立三

(安徽廣播電視大學 信息技術與網絡管理中心,安徽 合肥 230022)

站群系統是統一數據、標準和管理的建站模式,可以輕松建立多個站點,并在各站點間共享信息,從而顯著減少信息孤島現象。Node.js是javascript語言在服務器端的實現,采用V8高性能引擎,結合語言本身獨特的異步特性,可以構建高性能網站。提出一種基于Node.js的網站架構,采用MVC、Widgets和SOA進行解耦,增加并行性,提高系統性能。在此架構上,設計和實現一套高性能站群系統,該系統結構清晰簡單,可擴展性好,穩定性高,性能優越,適合高校使用。

Node.js;站群系統;MVC;Widgets;SOA

0 引言

隨著信息技術的不斷發展,技術驅動和需求驅動讓我們在許多領域開發軟件,隨之軟件之間的關聯又成為新的問題,形成信息孤島。信息孤島是指信息系統之間相互不關聯,信息不能共享,數據不能交換,以及信息與業務流程和應用相互脫節。信息孤島是信息化進程中的必然產物。人們嘗試著從數據庫、集成總線的方向努力把各個信息系統進行關聯,但是總是不能如愿,孤島依然普遍存在。具體到高校,由于每個部門和院系普遍都有網站,各個網站之間互相獨立,自成一體,因此高校網站信息孤島現象最為典型。網站信息孤島有如下特點:技術架構千差萬別,界面風格各顯神通,安全防護形同虛設,穩定性無法保證,性能參差不齊,管理隨意分散。

針對網站信息孤島問題,目前通用的解決方案是采用站群系統。站群系統是指在統一規劃、統一標準和統一技術構架基礎之上,實現分級管理、分級維護、耦合程度高和基于特定權限共享呈送信息的網站集合[1]。站群系統中的所有站點遵從相對一致的網站運行和服務規范,能夠互聯互通,實行集群化管理。站群系統并不是多個網站的簡單堆砌,站群系統的特點是統一建設、分級管理、信息共享和單點登錄,此外站群系統還具有界面風格一致,安全防護可控,運行穩定,性能卓越,輕松建站,建設成本低等諸多優點[2]。

站群系統已經有很多成熟產品面世,功能豐富,可以定制。各高校正在不遺余力進采購和建設站群系統,逐步將分散的網站遷移到站群系統中。站群系統采用的技術架構主要有PHP,ASP.net和JSP,相比較而言,Node.js算后起之秀[3]。Node.js是javascript語言在服務器端的實現,解決了javascript只能應用在客戶端的缺點。Node.js采用Chrome V8高性能引擎,能夠將腳本直接編譯成機器碼運行,性能優異。Node.js 使用了一個事件驅動、非阻塞式I/O的模型,使其輕量又高效[4]。javascript是異步編程語言,單進程就可以承載大負荷處理任務。因此Node.js可以構建高性能網站,新的應用層出不窮[5]。本文采用Node.js構建高性能網站群系統,探討設計和實現問題。

1 基于Node.js網站架構

1.1 系統結構

本架構采用MVC設計。MVC的全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,是一種軟件設計規范[6]。它是用一種業務邏輯、數據與界面顯示分離的方法來組織代碼,將眾多的業務邏輯聚集到一個部件里面,在需要改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯,達到減少編碼的時間[7]。

本架構還采用SOA(Service-Oriented Architecture,面向服務架構)技術。SOA是一種使用松耦合的黑盒子服務構建業務應用的體系架構,這些服務可以通過編排連接在一起以實現特定的功能。SOA具有更易維護、更高的可用性和更好的伸縮性等優點。

本架構包括兩層:前端和后端。前端和客戶端直接交互,提供業務邏輯處理和html靜態資源訪問,采用Node.js實現。后端向前端提供數據存儲和檢索服務,采用ASP.net+SQL server 2005實現。系統結構如圖1所示。

圖1中,服務器端使用兩臺服務器,一臺負責前端功能,一臺負責后端功能。前端服務器安裝Linux CentOS 7.2操作系統,運行Node.js。后端服務器安裝Winows 2008 R2操作系統,運行II7(ASP.net)和SQL server 2005。客戶端使用瀏覽器訪問Node.js。Node.js接受用戶請求,執行路由,定位視圖模版,向后端請求數據,處理數據,渲染模版,返回最終結果給客戶端。ASP.net提供Web接口管理數據,數據存儲在SQL server 2005數據庫中。Node.js訪問Web接口獲取數據,Web接口使用JSON(JavaScript Object Notation)返回操作結果。本架構中,前端負責View和Controller,后端負責Model。

圖1 Node.js網站系統結構

1.2 Widget

Node.js采用Express框架提供前端服務。Express 是一個簡潔而靈活的Node.js Web應用框架, 提供了一系列強大特性幫助創建各種Web應用和豐富的HTTP工具。使用 Express可以快速地搭建一個完整功能的網站。Express框架核心特性有:可以設置中間件來響應HTTP請求,定義路由表用于執行不同的HTTP請求動作,可以通過向模板傳遞參數來動態渲染HTML頁面。

本架構設計小部件(Widgets)技術,使用中間件方式處理Widgets。Widgets是在視圖中使用的可重用單元,使用面向對象方式創建復雜和可配置用戶界面單元。傳統的MVC和基于Widgets的MVC工作原理比較如圖2所示。

傳統MVC中一個頁面對應一個Controller和一個View文件,Controller從多個Model獲取數據,然后渲染View文件,并輸出最終結果。基于Widgets的MVC,一個頁面可以對應多個皮膚(Skin)文件。不同的Skin有不同的布局和風格,可以根據用戶喜好選擇,使網站表現豐富多彩[8]。Skin將不同的功能區域封裝成不同的Widget。Widget只有一個Controller和一個View,通常只調用一個Model,功能單一,方便重用。

圖2 傳統MVC和基于Widgets的MVC比較

一個Skin通常有多個Widget占位符,一個Widget占位符代表一個Widget。Widgets中間件采用并行方法進行處理,同時處理所有Widget,等到所有Widget處理完成,再將Skin中的Widget占位符全部替換成對應結果,形成最終頁面。

1.3 數據交換

后端負責業務邏輯和數據存儲,以Web接口對方式對外提供服務,采用JSON標準交換數據。JSON是一種輕量級的數據交換格式,易于閱讀和編寫,同時也易于機器解析和生成。本架構定義的JSON格式如下:

{

code=1,//成功代碼

msg=’錯誤消息’,//出錯消息,可選

data1=’’,//數據部分

data2=’’,//更多的數據

}

其中code指示操作是否成功,1表示成功,0表示失敗。msg指出錯誤信息,code為1時可選,code為0時必須有。根據具體業務的不同,后面附上相應的業務數據。

1.4 狀態控制

現代網站通常采用cookie+session的方式執行狀態控制,包括記錄用戶登錄狀態和對用戶操作進行權限檢查[9]。本架構中,狀態控制主要由后端處理,包括session的生成、存儲和檢索,并使用cookie跟蹤session ID。前端負責在客戶端和后端之前傳遞cookie。當調用后端服務返回cookie信息時,前端將cookie再傳給瀏覽器。當瀏覽器的請求中包含cookie時,前端就將cookie傳給后端服務。

2 基于node.js的站群系統設計

2.1 系統結構

基于node.js的站群系統結構如圖3所示。

圖3 站群系統結構

圖3中,站群系統由一個主站、多個子站和一個管理后臺站點組成。在結構上各個站點是平行關系。在邏輯上,主站是所有子站和管理后臺的入口,子站可以推送信息到主站,管理后臺執行賬戶管理,配置主站和子站,發布和推送信息。

站群系統通常只配置一個域名,需要為各個站點規劃URL。本系統中,在站點名稱和URL之間建立直接映射。例如主站命名為portal,則訪問http://域名/portal/就是訪問主站。管理后臺命名為manger。根據規則,主站URL是http://域名/portal,而不是 http://域名/。因此當訪問http://域名/時,需要重定向到主站URL。

每個站點都需要創建一個路由文件,建立站點下所有頁面到各自Skin的映射規則。例如訪問http://域名/portal/search,實際上訪問的皮膚文件是/var/wwwroot/themes/portal/skins/search.html。路由文件以站點名稱命名,例如portal.js。

2.2 數據庫設計

本系統中,為了減少表的數量,將所有的展示類信息歸一化存儲到單個表中,命名為文章表,可以存儲多條信息如新聞和公告,也可以存儲單條信息如學校簡介、辦公電話和校歷等。除此之外還有站點表,欄目表,用戶表和權限表。ER圖如圖4所示。

圖4 ER圖

圖4中,站點表存儲站點信息,一個站點表示為一條記錄。一個站點可有擁有多個欄目。一個欄目可以擁有多個文章。一個用戶有權維護多個欄目,一個欄目也可以有多個用戶維護,是多對多關系。

2.3 安全設計

站群系統維護多個站點,更容易遭受攻擊,因此安全設計更要仔細[10]。本系統主要防范注入攻擊,跨站腳本攻擊,跨站請求偽造和枚舉攻擊,此外還進行數據庫安全加固。

針對目前比較流行的腳本注入攻擊,最有效方法是采用參數化查詢,先編譯SQL語句,將執行計劃固定,再傳參,確保最終執行邏輯沒有偏差。微軟推出LINQ語言,不但是ORM(Object Relational Mapping,對象關系映射)框架,而且也是參數化查詢技術,只要使用得當,不存在注入漏洞。本系統后端采用ASP.net,使用LINQ操縱數據庫。

跨站腳本攻擊是一種極難防范的攻擊[11]。針對跨站腳本攻擊,通常對用戶的輸入執行嚴格檢查,轉義非法字符。文章表是防范重點,主要是內容字段。為了方便排版允許內容字段帶有html代碼,因此內容字段處理比較復雜。考慮到本系統中可以發表文章的地方只有后臺站點,且只有授權用戶才有權發表,合法用戶執行跨站攻擊的可能性很小。即使執行了跨站腳本攻擊,如果將最后一道防線session保護好,就可以阻止權限竊取。本系統采用最小化保護策略,將包含session ID的cookie設置http only和path=/manager屬性。

針對跨站請求偽造,為關鍵操作設置驗證碼,例如刪除文章時,彈出驗證碼窗口,提示正在刪除文章,要求輸入驗證碼,驗證碼正確才允許刪除。

枚舉攻擊是指當文章的ID采用自增整數時,如果顯示文章頁面URL是show?id=x,通過不斷自增id的值,即可將所有文章枚舉出來。本系統中文章ID采用隨機生成的字符串,不可預測,沒有枚舉的可能。

數據庫安全加固包括使用普通賬戶和執行邏輯刪除。使用普通賬戶而不是超級用戶連接數據庫,該普通賬戶只能操作站群數據庫,且只能select,create和update。采用邏輯刪除策略,當刪除數據時將deleted字段從0改成1。

4 基于node.js的站群系統實現

4.1 Widget中間件

重點給出widget的實現代碼。以portal的默認文檔index.html為例,其路由規則如下:

router.get('/', function (req, res, next) {// 對/ GET的路由規則

res.context = {};

res.context._r_widget = true;//有widget

res.context._r_widget_skin = 'index.html';//皮膚文件

next();

});

index.html前兩行如下:

定義了兩個widget:header和banner。

處理widget的中間件代碼如下:

const reg = new RegExp(//gmi);//匹配模式

function widget(req, res, next) {

var skin = path.join(req.site.paths.skins, res. context ._r_widget_skin); //取skin路徑

fs.readFile(skin, 'utf8', (err, data) => { /讀skin文件

var widgets = [],temp = {},runs = [],widget_ids = [];

while ((temp = reg.exec(data)) !== null) {//解析出所有的widget

widgets.push({holder: temp[0],id: temp[1]});

widget_ids.push(temp[1]);}

//執行widget的data.js腳本從后端獲取數據,用數據渲染模版

widgets.forEach(function (e) {//對于每個widget

runs.push(function (callback) {//定義渲染過程,后面同時發射

var _w_path = path.join(req.site.paths. widget, e.id),

_w_js = path.join(_w_path, 'data.js'), //data.js

_w_html = path.join(_w_path, 'view'); //view.html

//準備結果對象

var result = {site: req.site, _widget_name: _w_real.name, _widget_path: util.format('widgets/%s', _w_real.name) };

fs.accessSync(_w_js, fs.R_OK); //data.js存在

//執行data.js

require(_w_js)(req, res, utils). then(function (r) {

r.site = req.site;

r._widget_name = result._widget_name;

r._widget_path = result._widget_path;

//用數據渲染模版

var content = template.renderFile (_w_html, r);

callback(null, {js: _w_js, holder: e.holder, content: content}); //渲染結果傳遞給回調函數,替換占位符

});

});

}, this);

//并發執行前面的渲染過程,傳入回調函數。全部執行完成,才回調。

async.parallel(runs, function (err, result) {

result.forEach(function (e) {//用渲染結果替換占位符

data = data.replace(e.holder, e.content);});

res.send(data);

next();

});

});

}

4.2 新聞推送

子站可以將新聞推送到主站,實現信息共享。根據ER圖,一條新聞只能對應一個站點[12]。因此新聞推送將創建兩條文章記錄,一條是子站點所有,一條是主站點所有。兩條記錄通過PID(party ID,對方ID)字段指向對方,即主站新聞的PID字段設置為子站新聞ID,主站新聞的PID字段設置為子站新聞ID。主站新聞重要性高于子站。當主站新聞未通過審核時,修改子站新聞將同步到主站新聞。當主站新聞通過審核后(審核標志為1),修改子站新聞將無法同步到主站新聞。反過來,主站新聞修改總是同步到子站新聞。

5 結論

站群系統建設不但是解決信息孤島現象的重要手段,也是推進高校信息化向前發展的一個抓手。本文通過Node.js構建高性能站群系統,采用了諸多熱門技術,包括MVC,Widget和SOA等,結構輕量,穩定可靠,給出站群系統建設的新模式。實際部署表明系統支持高并發請求,用戶體驗良好,完全滿足需求。

[1] 陳潔, 雷萌. 基于脈沖耦合神經網絡的乳鼠心肌細胞圖像增強[J]. 軟件, 2018, 39(02): 41-43.

[2] 李軍. 高并發Web系統的設計與優化[D]. 北京交通大學, 2009.

[3] 郭家寶. Node. js開發指南[M]. 人民郵電出版社, 2012.

[4] 閆曉甜, 李玉斌. 微信平臺支持下的高校微課程設計與應用研究[J]. 中國遠程教育, 2015(07): 52-57+80.

[5] 冼學輝. 基于Web的實時信息推送技術的研究[D]. 華北電力大學, 2013.

[6] 劉欣. 基于MVC模式的Web軟件系統開發框架設計與實現[D]. 山東大學, 2013.

[7] 宋婷婷, 徐世許. 基于全采樣和L1范數降采樣的卷積神經網絡圖像分類方法[J]. 軟件, 2018, 39(02): 75-80.

[8] 付向東, 孫寧, 何長鵬. 高等院校站群系統建設與實踐[J]. 中國教育信息化, 2014(05): 82-84.

[9] 賀盈. 重慶文理學院站群系統開發研究與實現[D]. 電子科技大學, 2012.

[10] 楊盾, 王小鵬. 應對DDoS攻擊的SDN網絡安全特性研究[J]. 軟件, 2018, 39(03): 175-180.

[11] 羅淑元. Android系統中Widget的設計與實現[D]. 北京交通大學, 2012.

[12] 陳培君. 基于SOA的數字校園綜合信息服務平臺的研究與設計[D]. 電子科技大學, 2013.

Design and Implementation of High Performance Station Cluster System Based on Node.js

TONG Min, ZHANG Wen-sheng, QIAN Li-san

(Anhui Radio and TV University Information Technology and Network Management Center, Hefei, Anhui, 230022)

Station cluster system is station model with unified data, standard and management, which can establish a number of sites easily and share information between sites, and reduce information island phenomenon significantly. Node.js is implementation of JavaScript language on server side, with V8 high performance engine, combined with unique asynchronous features of language, it can build high performance web site. The article proposes a website architecture based on Node.js, to decouple with MVC, Widgets and SOA, increase parallelism and improve system performance. Under the framework, the article discusses design and implemention of a set of high performance station cluster system, which has advantages of clear and simple structure, good scalability, high stability and superior performance, and is suitable for colleges and universities.

Node.js; Station cluster system; MVC; Widgets; SOA

TN711

A

10.3969/j.issn.1003-6970.2018.08.003

安徽廣播電視大學軟件開發項目“電大移動服務平臺”(編號RJ17-01)

童敏(1992-),女,助理工程師,碩士,研究方向:計算機網絡應用;張文盛(1980-),男,高級工程師,本科,研究方向:計算機網絡應用;錢立三(1970-),男,高級工程師,本科,研究方向:計算機網絡應用。

本文著錄格式:童敏,張文盛,錢立三. 基于Node.js的高性能站群系統設計與實現[J]. 軟件,2018,39(8):09-13

猜你喜歡
用戶信息系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
如何獲取一億海外用戶
創業家(2015年5期)2015-02-27 07:53:25
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
主站蜘蛛池模板: 久久久久久高潮白浆| 亚洲福利视频一区二区| a级毛片免费播放| 亚洲欧美在线看片AI| 草草影院国产第一页| 国产精品国产主播在线观看| 国产精品无码影视久久久久久久| 亚洲精品国产成人7777| 国产一级小视频| a级毛片毛片免费观看久潮| 五月激激激综合网色播免费| 中文字幕在线不卡视频| 欧美在线视频不卡第一页| 欧美a级完整在线观看| 成年人国产网站| 久久成人免费| 成人福利在线免费观看| 色综合色国产热无码一| 国产毛片基地| 精品视频在线观看你懂的一区| 亚洲色欲色欲www在线观看| 亚洲人成网18禁| 亚洲中文字幕无码爆乳| 国产自在线播放| 无码专区国产精品第一页| 国产精女同一区二区三区久| jizz国产视频| 国产在线一区二区视频| 国产午夜人做人免费视频| 伊人婷婷色香五月综合缴缴情| 99精品国产高清一区二区| 亚洲AⅤ永久无码精品毛片| 免费在线国产一区二区三区精品| 在线国产三级| 精品五夜婷香蕉国产线看观看| 色悠久久综合| 国产成人综合网| 在线综合亚洲欧美网站| 福利在线免费视频| 午夜无码一区二区三区在线app| 婷婷午夜天| 一区二区三区成人| 91色综合综合热五月激情| 日韩精品成人在线| 亚洲AV无码不卡无码| 国产午夜精品鲁丝片| 成年午夜精品久久精品| 色哟哟国产精品一区二区| 在线观看国产黄色| 国产精品一区二区不卡的视频| 亚洲AV人人澡人人双人| 欧美日本中文| 一级爆乳无码av| 日本爱爱精品一区二区| 精品久久久久久中文字幕女| 午夜国产精品视频黄| 2019国产在线| 亚洲最新在线| 欧美激情一区二区三区成人| 女人爽到高潮免费视频大全| 婷婷亚洲视频| 久久夜色精品| 欲色天天综合网| 日本少妇又色又爽又高潮| 青草视频在线观看国产| 丁香五月激情图片| 国产成人综合久久精品尤物| 久久久噜噜噜| 九九九精品成人免费视频7| 国产成人精品优优av| 国内熟女少妇一线天| 99视频精品全国免费品| 毛片在线播放网址| 成人亚洲天堂| 91外围女在线观看| 在线日韩日本国产亚洲| 亚洲中文在线看视频一区| 欧美成人手机在线视频| 亚洲精品无码不卡在线播放| 在线a网站| 91色爱欧美精品www| 美女视频黄又黄又免费高清|