文/李騫
近期,新華社“馬克思主義新聞?dòng)^手機(jī)在線學(xué)習(xí)競(jìng)賽活動(dòng)”圓滿落幕。在15天的線上答題期間里,70家社屬單位全員參與,全社共有12000余人下載活動(dòng)APP參與答題,參與率接近100%,營(yíng)造了良好的學(xué)習(xí)氛圍,有效地將新華社馬克思主義新聞?dòng)^教育向縱深推進(jìn)。而在這次活動(dòng)的背后,技術(shù)的支撐尤為關(guān)鍵。短短3個(gè)月的時(shí)間,我?guī)ьI(lǐng)三人的自主研發(fā)團(tuán)隊(duì),從無(wú)到有,從構(gòu)想到落地,完成了競(jìng)賽答題平臺(tái)的完全自主研發(fā)。正是依托這一平臺(tái),才能在短時(shí)間內(nèi)快速構(gòu)建起整個(gè)活動(dòng)的框架。那么這個(gè)平臺(tái)究竟是通過(guò)什么樣的技術(shù)手段來(lái)支撐這種活動(dòng)的呢?
既謂之“平臺(tái)”,我們的初衷當(dāng)然不是一套一次性使用的后臺(tái)應(yīng)用,而是一個(gè)能夠提供給不同用戶開(kāi)展多次活動(dòng)反復(fù)使用的競(jìng)賽答題平臺(tái)。
我們首先通過(guò)與活動(dòng)主辦部門的多次研究討論,建立了本次馬克思主義新聞?dòng)^學(xué)習(xí)競(jìng)賽活動(dòng)的業(yè)務(wù)場(chǎng)景:活動(dòng)分為數(shù)個(gè)章節(jié),各章題目隨機(jī),以闖關(guān)形式為主,依次進(jìn)行。參與者還可對(duì)排名靠前者發(fā)起挑戰(zhàn),挑戰(zhàn)者、被挑戰(zhàn)者均有機(jī)會(huì)獲得積分獎(jiǎng)勵(lì)。另外,答完全部章節(jié)的參與者繼續(xù)自行答題,可反復(fù)獲得積分獎(jiǎng)勵(lì),積分不設(shè)上限。所有問(wèn)答題目均可實(shí)時(shí)顯示正確答案供參與者學(xué)習(xí)。
隨后我們結(jié)合本次活動(dòng)的業(yè)務(wù)場(chǎng)景、需求并結(jié)合平臺(tái)化的構(gòu)想,綜合梳理出了競(jìng)賽答題平臺(tái)設(shè)計(jì)中的難點(diǎn),具體如下。
答題競(jìng)賽類活動(dòng)包括闖關(guān)、挑戰(zhàn)、練習(xí)等多種模式,各模式需要能夠進(jìn)行靈活的配置。
一次活動(dòng)應(yīng)該既可以針對(duì)一個(gè)單位又可以針對(duì)多個(gè)單位,由于每個(gè)單位又有眾多的下屬部門、人員,這就造成活動(dòng)涉及到的人員和單位(部門)數(shù)量相當(dāng)之多。平臺(tái)如果沒(méi)有有效的參與單位(部門)、參與人員的管理功能,將會(huì)導(dǎo)致很高的管理成本,并影響活動(dòng)組織效率。
存在不同程度的并發(fā)訪問(wèn)情況。如較長(zhǎng)周期的活動(dòng)會(huì)在活動(dòng)剛開(kāi)始和即將結(jié)束兩個(gè)時(shí)間點(diǎn)產(chǎn)生較大的并發(fā)量等。需保證在有較大并發(fā)訪問(wèn)的情況下,系統(tǒng)及系統(tǒng)產(chǎn)生的數(shù)據(jù)不會(huì)發(fā)生異常,并且維持高性能運(yùn)轉(zhuǎn),及時(shí)地返回?cái)?shù)據(jù)請(qǐng)求結(jié)果。
活動(dòng)中及活動(dòng)后的統(tǒng)計(jì)數(shù)據(jù)對(duì)于這類活動(dòng)而言十分重要。對(duì)于參與者而言,直觀的活動(dòng)統(tǒng)計(jì)是他們確認(rèn)自身答題情況、排名的重要手段;對(duì)于組織者而言,多維度的活動(dòng)統(tǒng)計(jì)往往可以作為判斷這次活動(dòng)是否成功的關(guān)鍵參考。
平臺(tái)運(yùn)行長(zhǎng)久與否,很重要的一方面在于其是否能夠適應(yīng)不斷變化的業(yè)務(wù)需求,并進(jìn)行快速迭代更新。
活動(dòng)中涉及到的用戶數(shù)據(jù)及活動(dòng)本身的數(shù)據(jù)都需要有較好的安全保障。對(duì)于任何數(shù)據(jù)非法獲取或篡改的操作及各種非法請(qǐng)求都必須嚴(yán)加防范。
在平臺(tái)的設(shè)計(jì)過(guò)程中,我?guī)ьI(lǐng)團(tuán)隊(duì)成員們進(jìn)行了充分的前期調(diào)研,完成了多次 的頭腦風(fēng)暴,從功能設(shè)計(jì)、技術(shù)選型、部署保障等多方面充分應(yīng)對(duì)設(shè)計(jì)難點(diǎn)。
平臺(tái)提供人員管理、組織機(jī)構(gòu)管理、題庫(kù)管理、活動(dòng)管理、統(tǒng)計(jì)分析、用戶認(rèn)證、API服務(wù)等一系列功能和服務(wù),以支撐不同的答題類活動(dòng)。
通過(guò)活動(dòng)、關(guān)卡等的交互式配置界面,支持多活動(dòng)、多關(guān)卡,活動(dòng)組織者可以輕松地對(duì)活動(dòng)的參數(shù)進(jìn)行調(diào)整。
通過(guò)提供分級(jí)管理、批量數(shù)據(jù)導(dǎo)入等方式,減輕組織者的單位、人員管理成本。提供按組織結(jié)構(gòu)、活動(dòng)關(guān)卡等多維度的統(tǒng)計(jì)查詢功能,方便組織者進(jìn)行實(shí)時(shí)的統(tǒng)計(jì)。
而API服務(wù)則給活動(dòng)終端提供多種API接口,使得活動(dòng)終端可以靈活實(shí)現(xiàn)各種用戶交互功能。
平臺(tái)所有功能通過(guò)角色、內(nèi)容權(quán)限進(jìn)行劃分,只有具備相應(yīng)權(quán)限的用戶才可以進(jìn)行具體功能操作。
平臺(tái)采用B/S架構(gòu)。
2.2.1 服務(wù)端
其中,服務(wù)器端基于Node.js、MySQL等技術(shù),采用Express框架進(jìn)行開(kāi)發(fā),并提供符合RESTful規(guī)范的API接口。
Node.js技術(shù)是由事件驅(qū)動(dòng)、非阻塞式 I/O 的編程模型,可充分提高程序執(zhí)行效率,降低接口延遲。
表1 各場(chǎng)景下Node.js與JAVA的性能比較[1]
通過(guò)數(shù)據(jù)比較我們可以看到,除了計(jì)算密集型場(chǎng)景,在I/O密集、計(jì)算I/O平衡、長(zhǎng)阻塞I/O請(qǐng)求等各場(chǎng)景下,每秒可處理的請(qǐng)求數(shù)Node.js比Java要多數(shù)倍,在并發(fā)情況下,Node.js性能還可以再有數(shù)倍的提升。
根據(jù)我們的分析,競(jìng)賽答題平臺(tái)主要是進(jìn)行用戶請(qǐng)求的快速處理,很少涉及到復(fù)雜的計(jì)算,其就是一個(gè)典型的I/O密集型應(yīng)用,為了獲得最好的平臺(tái)性能,我們選擇使用Node.js。
Express是一個(gè)簡(jiǎn)潔、靈活的Node.js Web應(yīng)用開(kāi)發(fā)框架,可以方便快捷地編寫Web請(qǐng)求處理邏輯并創(chuàng)建API服務(wù),并且由于其模塊化的特性,便于進(jìn)行后續(xù)的功能擴(kuò)展。
數(shù)據(jù)庫(kù)采用關(guān)系型數(shù)據(jù)庫(kù)MySQL,并根據(jù)業(yè)務(wù)需求設(shè)計(jì)請(qǐng)求性能及擴(kuò)展性良好的數(shù)據(jù)庫(kù)表,保證數(shù)據(jù)結(jié)構(gòu)的可擴(kuò)展性,以應(yīng)對(duì)可能的業(yè)務(wù)變化。由于關(guān)系型數(shù)據(jù)庫(kù)本身的關(guān)系特性,其適合完成復(fù)雜的統(tǒng)計(jì)查詢操作,可以根據(jù)業(yè)務(wù)需求進(jìn)行多維度的數(shù)據(jù)查詢統(tǒng)計(jì)操作。
2.2.2 瀏覽器端
瀏覽器端基于HTML5、CSS3、JavaScript等技術(shù),采用Vue.js框架和Element UI庫(kù)進(jìn)行開(kāi)發(fā),實(shí)現(xiàn)簡(jiǎn)潔、易用、模塊化的UI界面。Vue.js框架簡(jiǎn)潔、輕量化,易于進(jìn)行快速迭代開(kāi)發(fā),其組件化的特性使得瀏覽器端的功能擴(kuò)展性得到保障。Element UI庫(kù)提供多樣的UI組件,可以給用戶提供優(yōu)雅的交互體驗(yàn),并使得平臺(tái)管理界面的開(kāi)發(fā)、組裝變得更加快速。
平臺(tái)使用CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))技術(shù)為平臺(tái)活動(dòng)靜態(tài)內(nèi)容提供內(nèi)容加速服務(wù)。CDN能夠自動(dòng)判別新華通網(wǎng)站動(dòng)靜態(tài)內(nèi)容,通過(guò)智能負(fù)載均衡系統(tǒng)將用戶的訪問(wèn)定位至最佳節(jié)點(diǎn)[2],能有效避開(kāi)網(wǎng)絡(luò)中的擁塞,實(shí)現(xiàn)用戶最快訪問(wèn),改善服務(wù)效果,為用戶訪問(wèn)活動(dòng)內(nèi)容提供快捷、穩(wěn)定的支撐,同時(shí)降低應(yīng)用服務(wù)器的訪問(wèn)負(fù)載。下面的兩幅圖為本次活動(dòng)CDN命中示意圖(深色為命中),通過(guò)CDN的使用,保護(hù)了源站并有效避免了網(wǎng)絡(luò)擁塞,從而支撐了來(lái)自國(guó)內(nèi)全部34個(gè)省級(jí)行政區(qū)和海外100多個(gè)國(guó)家及地區(qū)的訪問(wèn)。
圖1 CDN命中示意圖(國(guó)內(nèi))
圖2 CDN命中示意圖(海外)
平臺(tái)通過(guò)使用負(fù)載均衡技術(shù),平衡用戶的應(yīng)用服務(wù)器訪問(wèn)請(qǐng)求。同時(shí),支持系統(tǒng)在負(fù)載較大的情況下,根據(jù)系統(tǒng)瓶頸,橫向擴(kuò)展相應(yīng)組件,如負(fù)載均衡服務(wù)器、應(yīng)用服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器等。
平臺(tái)通過(guò)定期的系統(tǒng)數(shù)據(jù)備份,確保平臺(tái)數(shù)據(jù)在意外丟失時(shí)能夠及時(shí)恢復(fù)。
平臺(tái)在安全方面采取了多種安全防護(hù)措施,確保系統(tǒng)、數(shù)據(jù)的安全性。例如:
(1)使用SSL安全證書,對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行加密;(2)對(duì)關(guān)鍵信息進(jìn)行加密處理,從數(shù)據(jù)源頭上進(jìn)行安全保護(hù);
(3)對(duì)服務(wù)器進(jìn)行定期漏洞檢測(cè)、基線檢查、病毒查殺;
(4)使用Web應(yīng)用防火墻對(duì)系統(tǒng)業(yè)務(wù)流量進(jìn)行惡意特征識(shí)別及防護(hù),將正常、安全的流量回源到服務(wù)器。避免網(wǎng)站服務(wù)器被惡意入侵,保障業(yè)務(wù)的核心數(shù)據(jù)安全,解決因惡意攻擊導(dǎo)致的服務(wù)器性能異常問(wèn)題;
(5)進(jìn)行系統(tǒng)訪問(wèn)控制,僅允許指定范圍的訪入請(qǐng)求;
對(duì)技術(shù)手段作弊行為進(jìn)行識(shí)別,確保活動(dòng)公平性。
通過(guò)有針對(duì)性的分析、設(shè)計(jì)和在短短兩三個(gè)月的時(shí)間完成近8萬(wàn)行代碼編寫迭代的高效率敏捷化開(kāi)發(fā),實(shí)現(xiàn)了整個(gè)競(jìng)賽答題平臺(tái)的構(gòu)建。正是基于這一平臺(tái),“馬克思主義新聞?dòng)^手機(jī)在線學(xué)習(xí)競(jìng)賽活動(dòng)”取得了如前言所述的圓滿成功?;顒?dòng)充分調(diào)動(dòng)了職工的參與積極性,并受到了社領(lǐng)導(dǎo)及眾多職工的廣泛贊譽(yù)。活動(dòng)組織者們也紛紛對(duì)平臺(tái)的穩(wěn)定運(yùn)行和易用性表示了肯定。
正如前文提到的那樣,作為一個(gè)平臺(tái),一次活動(dòng),一次成功只能算是其生命周期的一小步,這一平臺(tái)還有巨大的潛力可以挖掘,還有許多可以改進(jìn)的地方,例如:
(1)根據(jù)業(yè)務(wù)需求升級(jí)、優(yōu)化系統(tǒng)功能;
(2)系統(tǒng)交互易用性的提升,提供多維度的查詢、篩選、排序等功能;
(3)提供更多的活動(dòng)統(tǒng)計(jì)維度;
(4)更完善的作弊行為處理機(jī)制;
(5)進(jìn)一步增強(qiáng)系統(tǒng)的安全性;
(6)面向更多單位提供平臺(tái)服務(wù)。
通過(guò)自主研發(fā)的方式,提高開(kāi)發(fā)效率,縮短迭代周期,快速適應(yīng)變化,通過(guò)對(duì)業(yè)務(wù)的認(rèn)真分析、抽象,然后進(jìn)行有針對(duì)性的設(shè)計(jì)開(kāi)發(fā),最終形成高效易用的平臺(tái)并良好地服務(wù)于業(yè)務(wù)。相信以此為起點(diǎn),該平臺(tái)未來(lái)還會(huì)不斷進(jìn)化,并將發(fā)揮更為重要的作用。