石清
摘? 要:在“互聯(lián)網(wǎng)+”概念的影響下,越來越多的信息技術(shù)應(yīng)用于體育產(chǎn)業(yè)。如何充分地利用信息技術(shù)手段為體育競賽服務(wù),如何使體育競賽組織工作更加高效,如何使競賽數(shù)據(jù)更加透明,是目前面臨的重要問題。結(jié)合摩托艇項(xiàng)目,利用MEAN框架,開發(fā)了一套實(shí)時(shí)數(shù)據(jù)共享競賽管理系統(tǒng),并將基于RESTful接口的異步I/O模式貫穿于整個(gè)體育競賽系統(tǒng)中。該系統(tǒng)能有效降低獲取信息的成本,使參與者即時(shí)掌握賽事動(dòng)態(tài),提高工作效率,改善用戶體驗(yàn)。
關(guān)鍵詞:實(shí)時(shí)數(shù)據(jù)共享;競賽系統(tǒng);MEAN框架;RESTful接口
中圖分類號:TP311? ? ?文獻(xiàn)標(biāo)識碼:A
Abstract:With the influence of Internet+,more and more information technology is applied to the sports industry.The current major problems lie in how to make full use of information technology to serve sports competitions,how to make sports competition organization work more efficiently,and how to make competition data more transparent.In conjunction with the motorboat project,the real-time data sharing competition system is developed based on the MEAN framework,applying the RESTful-based asynchronous I/O mode to the entire sports competition system.The system can effectively reduce the cost of obtaining information and update participants with latest news and events,increasing work efficiency and improving user experience.
Keywords:real-time data sharing;competition system;MEAN framework;RESTful interface
1? ?引言(Introduction)
近年來隨著科技的進(jìn)步,尤其是“互聯(lián)網(wǎng)+體育”概念的提出,為體育產(chǎn)業(yè)帶來了顛覆性的影響,為整個(gè)行業(yè)的發(fā)展提供了新模式。社交媒體的廣泛應(yīng)用不斷推動(dòng)民眾參與體育的熱情,無論是手機(jī)還是各種可穿戴設(shè)備都被廣泛應(yīng)用于體育相關(guān)的健身活動(dòng)中?;ヂ?lián)網(wǎng)視頻平臺及新媒體已經(jīng)成為社會(huì)主流觀賽和賽后討論渠道,各式各樣的體育信息平臺如雨后春筍般涌現(xiàn)出來。無論是體育電商、賽事直播,還是個(gè)人健身、互動(dòng)交流,各類應(yīng)用滿足了大眾個(gè)性化體育信息服務(wù)的需求,從個(gè)人到企業(yè)組織,乃至整個(gè)社會(huì)的信息化程度都越來越高。
信息化的過程就是數(shù)字化的過程,進(jìn)而數(shù)據(jù)化的過程。但是,如果要發(fā)揮數(shù)據(jù)的真正價(jià)值,僅僅把數(shù)據(jù)儲存在數(shù)據(jù)庫中是不夠的,而是要將數(shù)據(jù)進(jìn)行分享。正如阿里巴巴首席技術(shù)官王堅(jiān)在其著作《在線》中所提到的,“今天數(shù)據(jù)的意義并不在于有多大,真正有意義的是讓數(shù)據(jù)變得在線,這恰恰是互聯(lián)網(wǎng)的特點(diǎn)。為什么今天的淘寶數(shù)據(jù)值錢,因?yàn)樗窃诰€的。寫在磁帶和紙上的數(shù)據(jù),作用是有限的[1]。”隨著云數(shù)據(jù)庫技術(shù)的發(fā)展與運(yùn)用,無論是哪種平臺在運(yùn)行的過程中產(chǎn)生的數(shù)據(jù)都可以存儲在云數(shù)據(jù)庫中,而這些海量的數(shù)據(jù)都可以通過接口的形式實(shí)現(xiàn)共享,為今后大數(shù)據(jù)的分析和挖掘提供了前提。大數(shù)據(jù)與云計(jì)算技術(shù)的發(fā)展也給體育服務(wù)帶來了新的發(fā)展契機(jī)[2]。通過數(shù)據(jù)共享,分析和挖掘數(shù)據(jù)背后的邏輯聯(lián)系,進(jìn)而有利于更加全方位的展現(xiàn)體育的輪廓和視角,無論是將這些分析結(jié)果應(yīng)用于政策制定還是媒體傳播,都能使其信息更具深度性[3]。
隨著我國體育賽事的逐漸增多,對競賽服務(wù)體系也提出了更高的要求[3]。而傳統(tǒng)競賽服務(wù)系統(tǒng)多采用C/S構(gòu)架,前期需要較大的硬件成本投入,同時(shí)開發(fā)周期長,成本高,除個(gè)別大型綜合性賽事外,單項(xiàng)體育比賽的競賽系統(tǒng)幾乎不具備實(shí)時(shí)分享數(shù)據(jù)的能力。而普通基于B/S構(gòu)架下的體育競賽信息管理系統(tǒng)功能多集中在運(yùn)動(dòng)員注冊與賽事報(bào)名上,功能較為單一。而一套基于B/S架構(gòu)的輕量級全功能競賽管理系統(tǒng),無論是在數(shù)據(jù)分享,系統(tǒng)可擴(kuò)展性上,還是在快速開發(fā)和維護(hù)成本方便都將具有更大的優(yōu)勢。
2? ?相關(guān)技術(shù)介紹(Related technology introduction)
MEAN框架是一個(gè)JavaScript平臺下現(xiàn)代Web開發(fā)框架的總稱,是MongoDB、Express、Angular、NodeJS四個(gè)框架的第一個(gè)字母組合的簡稱,該框架均使用JavaScript作為開發(fā)語言(Angular 2.0之后使用的是TypeScript),開發(fā)者無須在不同的語言之間切換,很好地適應(yīng)了個(gè)人全棧開發(fā)的需求。
2.1? ?NodeJS介紹
NodeJS是一種基于Chrome V8引擎,用于搭建響應(yīng)速度快、易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用的執(zhí)行平臺。Chrome V8引擎針對JavaScript的編譯進(jìn)行了優(yōu)化,使得代碼運(yùn)行速度獲得了極大提升,同時(shí)節(jié)約了開發(fā)成本[4]。
2.2? ?Express介紹
Express是一個(gè)基于NodeJS平臺的極簡、靈活的Web應(yīng)用開發(fā)框架,它提供一系列強(qiáng)大的特性,可以方便地創(chuàng)建各種Web和移動(dòng)設(shè)備應(yīng)用。豐富的HTTP快捷方法和任意排列組合的Connect中間件,使創(chuàng)建健壯、友好的API變得既快速又簡單[5,6]。
2.3? ?Angular 介紹
Angular是一個(gè)基于HTML和TypeScript構(gòu)建客戶端應(yīng)用的平臺與框架。它是最著名的SPA框架之一,它能提供一種接近桌面應(yīng)用程序的流暢用戶體驗(yàn)單Web頁面應(yīng)用程序,它集聲明式模板、依賴注入、端到端工具和一些最佳實(shí)踐于一身,能輕松地構(gòu)建Web應(yīng)用。
2.4? ?MongoDB介紹
MongoDB屬于NoSQL,其數(shù)據(jù)保存為JSON格式文檔,具有高性能、高可用性和自動(dòng)擴(kuò)展功能。其支持的數(shù)據(jù)結(jié)構(gòu)非常松散,可以存儲比較復(fù)雜的數(shù)據(jù)類型。尤其適合項(xiàng)目早期開發(fā)過程中,數(shù)據(jù)結(jié)構(gòu)尚未完全明確,需要高度靈活性的IT系統(tǒng),并對數(shù)據(jù)庫性能要求較高,但不需要高度的數(shù)據(jù)一致性的開發(fā)場景。
3? ?需求分析(Requirements analysis)
實(shí)時(shí)數(shù)據(jù)共享競賽系統(tǒng)的設(shè)計(jì)與開發(fā),是為了方便賽事的組織和管理,是通過互聯(lián)網(wǎng)實(shí)現(xiàn)信息的實(shí)時(shí)交互,打通所有溝通環(huán)節(jié),無論是運(yùn)動(dòng)員的報(bào)名報(bào)項(xiàng),還是競賽委員會(huì)公布比賽成績,都完全通過競賽系統(tǒng)完成。即實(shí)現(xiàn)了無紙化辦公,又提高了工作效率。其具體的功能需求如下所述。
3.1? ?用戶信息管理
面向的對象為運(yùn)動(dòng)員和俱樂部管理人員,主要功能是個(gè)人及俱樂部基礎(chǔ)信息管理,報(bào)名參賽信息管理等。
3.2? ?競賽項(xiàng)目管理
面向的對象為賽事主辦單位,主要功能是分布競賽通知、競賽項(xiàng)目設(shè)定、日程安排等賽事相關(guān)信息。
3.3? ?競賽信息管理
面向的對象為裁判委員會(huì),主要功能是調(diào)整出發(fā)艇位,為競速類項(xiàng)目計(jì)時(shí)計(jì)圈,為表演類項(xiàng)目打分,對犯規(guī)進(jìn)行處罰,計(jì)算項(xiàng)目積分,顯示實(shí)時(shí)成績,分布最終成績等。
4? ?系統(tǒng)架構(gòu)(System architecture)
4.1? ?服務(wù)器構(gòu)架
為了提高系統(tǒng)安全性,以及后續(xù)的擴(kuò)展能力,設(shè)計(jì)時(shí)采用將計(jì)算、數(shù)據(jù)庫和文件存儲分離的架構(gòu)。整個(gè)系統(tǒng)都部署在阿里云體系中,即兼顧了高效率的彈性又縮減了自建服務(wù)器的成本,服務(wù)器構(gòu)架如圖1所示。
4.2? ?MEAN架構(gòu)
基于NodeJS、Express和MongoDB的架構(gòu)可以方便的在服務(wù)器端創(chuàng)建一個(gè)MVC框架的系統(tǒng)。MongoDB結(jié)合Mongoose可以很好地管理模型層并進(jìn)行持久化,所有的業(yè)務(wù)邏輯通過NodeJS和Express來完成[7-9]。服務(wù)器端無須設(shè)計(jì)View層,所有的數(shù)據(jù)都采用RESTful接口的形式向客戶端傳輸數(shù)據(jù),所有接口都是通過Express路由route來設(shè)計(jì)完成。Angular通過Ajax向上述接口請求數(shù)據(jù),并將獲取的數(shù)據(jù)綁定在Model對象上,并最終在View層中顯示出來[10-12]。
對于一個(gè)用于解決體育競賽的Web應(yīng)用程序來說,以輕量級去適應(yīng)體育競賽本身的靈活多變,通過上述多層架構(gòu)實(shí)現(xiàn)一個(gè)可重用性、簡單性、可擴(kuò)展性、功能清晰分離的系統(tǒng)。
5? 系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)(System design and
implementation)
5.1? ?NoSQL數(shù)據(jù)庫的必要性
作為體育競賽系統(tǒng)來說,其系統(tǒng)結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)受制于體育項(xiàng)目的競賽規(guī)則和競賽組織形式。而競賽規(guī)則間隔幾年就會(huì)有一次調(diào)整,競賽形式也會(huì)根據(jù)具體競賽條件進(jìn)行調(diào)整。尤其是小眾的運(yùn)動(dòng)項(xiàng)目,變化就更為明顯。其根源上就已經(jīng)決定了很難在事務(wù)處理上保持?jǐn)?shù)據(jù)結(jié)構(gòu)的恒定不變。而NoSQL由于其本身數(shù)據(jù)模式靈活,適合非結(jié)構(gòu)化的數(shù)據(jù)存儲。
在使用MongoDB來存取數(shù)據(jù)時(shí),通常都是使用Schema來定義對象。它無須定義MySQL等關(guān)系型數(shù)據(jù)庫的id主鍵,系統(tǒng)會(huì)自動(dòng)為每個(gè)文檔添加一個(gè)"_id"鍵,其默認(rèn)類型為ObjectId對象,該對象并不屬于自增型數(shù)據(jù),當(dāng)有大量數(shù)據(jù)同時(shí)進(jìn)行請求時(shí),它無須等待上一個(gè)id序號存儲完成之后再進(jìn)行存儲。對于體育競賽中多場次同時(shí)競賽的方式具有非常好的支持,MongoDB的該特性非常適合于異步IO的存儲方式。
5.2? ?數(shù)據(jù)模型的設(shè)計(jì)與實(shí)現(xiàn)
使用NoSQL數(shù)據(jù)庫MongoDB來存取數(shù)據(jù),與使用其他關(guān)系數(shù)據(jù)庫(如MySQL)的語法區(qū)別并不明顯,轉(zhuǎn)換成本不高。而對于一個(gè)數(shù)據(jù)結(jié)構(gòu)尚處于變化中的系統(tǒng)來說,使用MongoDB可能還具備一定的優(yōu)勢。MongoDB本身提供的查詢語言非常強(qiáng)大,同時(shí)配合Mongoose,以類似于面向?qū)ο蟮姆绞絹聿僮鲾?shù)據(jù)對象,實(shí)現(xiàn)數(shù)據(jù)的持久化。
阿里云出于完全考慮,其MongoDB數(shù)據(jù)庫通常只能通過內(nèi)網(wǎng)進(jìn)行訪問,所以在開發(fā)過程中不能實(shí)時(shí)連接云數(shù)據(jù)庫進(jìn)行調(diào)試,只能在本地建立一個(gè)相同的MongoDB數(shù)據(jù)庫。為了開發(fā)方便建立一個(gè)獨(dú)立的database configuration文件,單獨(dú)保存數(shù)據(jù)庫的設(shè)置,分別用于網(wǎng)絡(luò)與本地的數(shù)據(jù)庫連接。
在NodeJS的app.js文件中配置MongoDB數(shù)據(jù)庫,分別在本地和阿里云數(shù)據(jù)庫建立相同的數(shù)據(jù)庫用于前期測試:
5.3? ?文件管理服務(wù)的設(shè)計(jì)與實(shí)現(xiàn)
系統(tǒng)在設(shè)計(jì)時(shí)采用將WEB服務(wù)器與文件服務(wù)器分離的模式,這樣可以分擔(dān)Web服務(wù)器的I/O負(fù)載,提高WEB服務(wù)器的性能和穩(wěn)定性。同時(shí),將耗費(fèi)資源的文件服務(wù)分離出來,也可以有效地減少帶寬成本,提高訪問速度。
創(chuàng)建文件服務(wù)器時(shí)選擇的是阿里云的對象存儲服務(wù)(Object Storage Service,OSS)。OSS擁有與平臺無關(guān)的RESTful API接口和SDK開發(fā)包,提供包括圖片格式轉(zhuǎn)換、縮略圖、剪裁、水印、縮放等多種增值服務(wù),結(jié)合OSS進(jìn)行開發(fā),將使整個(gè)開發(fā)過程方便、快捷,并使系統(tǒng)的文件管理服務(wù)功能更加強(qiáng)大。
系統(tǒng)中的文件管理服務(wù)開發(fā)是將OSS封裝在接口中,從而實(shí)現(xiàn)對接口的調(diào)用。封閉圖片上傳的函數(shù)定義如下:
一般來說,將文件上傳到分離的WEB服務(wù)器和文件服務(wù)器上時(shí)有兩種方式。第一種是先把文件上傳到WEB服務(wù)器上,然后再轉(zhuǎn)到文件服務(wù)器;第二種是直接上傳到文件服務(wù)器上。系統(tǒng)在開發(fā)過程中選擇的是第一種模式,這主要是出于安全考慮,將OSS的寫入和刪除等功能設(shè)置為只能通過內(nèi)網(wǎng)ECS才允許調(diào)用的模式,外網(wǎng)只允許對OSS中的文件進(jìn)行讀取。同時(shí)OSS對于內(nèi)網(wǎng)傳輸實(shí)行免費(fèi)的計(jì)費(fèi)模式也同時(shí)保證了該方案的經(jīng)濟(jì)性。所以在項(xiàng)目設(shè)計(jì)和實(shí)施的時(shí),所有文件在上傳過程中都必須從ECS服務(wù)器上進(jìn)行中轉(zhuǎn),中轉(zhuǎn)完成后原文件將在ECS服務(wù)器上立即刪除。如圖3所示。
5.4? ?RESTful API接口的設(shè)計(jì)與實(shí)現(xiàn)
該體育競賽系統(tǒng)建立在B/S構(gòu)架之上,它不僅需要滿足競賽團(tuán)隊(duì)在瀏覽器端發(fā)送的請求,同時(shí)還需要兼顧為比賽現(xiàn)場大屏幕提供實(shí)時(shí)競賽數(shù)據(jù),以及為電視臺轉(zhuǎn)播提供實(shí)時(shí)競賽數(shù)據(jù)的需求。所以,系統(tǒng)的應(yīng)用場景是一個(gè)IO密集、高并發(fā)的應(yīng)用場景。而Node的異步I/O可以讓JavaScript的單線程很好的處理阻塞問題,使系統(tǒng)更好地利用云服務(wù)器的計(jì)算資源。同時(shí),體育賽事的競賽數(shù)據(jù)本身需要其數(shù)據(jù)具備高可靠性,而Node異步I/O、非阻塞的特性正好滿足體育比賽的這些特征。一個(gè)基于Node框架下的RESTful API接口的WEB軟件架構(gòu)不僅可以完美支持上述需求,還可以應(yīng)對未來其他系統(tǒng)或其他終端對數(shù)據(jù)資源的需求。
系統(tǒng)的業(yè)務(wù)邏輯和流程控制都是由獨(dú)立的Controller對象來實(shí)現(xiàn),針對具體的業(yè)務(wù)流程,會(huì)有不同的控制器。以下僅以Message對象簡要說明實(shí)現(xiàn)過程。Message Controller對象定義如下:
5.5? ?RESTful API接口的權(quán)限管理
對于一個(gè)設(shè)計(jì)好的RESTful API接口來說,其本身是無狀態(tài)的,用戶可以從任意一種可以發(fā)送HTTP請求的終端向服務(wù)器發(fā)送請求。雖然這樣做保證數(shù)據(jù)的高效分享,但卻存在極大的安全隱患。系統(tǒng)在設(shè)計(jì)的過程中,將所有需要身份驗(yàn)證和角色權(quán)限控制的接口只用node中間件的方式進(jìn)行管理。使用JSON Web Token來驗(yàn)證請求是否為注冊用戶發(fā)送,通過驗(yàn)證注冊用戶role字段中是否包含特定數(shù)據(jù),判斷用戶是否具有操作權(quán)限。
5.6? ?前端界面的設(shè)計(jì)與實(shí)現(xiàn)
Angular作為Google公司主推的前端應(yīng)用框架,其自動(dòng)化雙向數(shù)據(jù)綁定技術(shù)使Angular運(yùn)行操作體驗(yàn)與本地應(yīng)用非常類似。而模塊化設(shè)計(jì)和依賴注入等技術(shù)都大大地提高了開發(fā)速度和軟件結(jié)構(gòu)的彈性。系統(tǒng)前端界面的設(shè)計(jì)過程中充分利用Angular的特點(diǎn)進(jìn)行設(shè)計(jì),充分考慮用戶體驗(yàn),無論是用戶輸入還是查詢都具備Autocomplete功能??紤]到該競賽系統(tǒng)主要應(yīng)用于國際賽事,使用Angular第三方組件ngx-translate完成多語言支持。通過獨(dú)立編輯en.json文件和zh.json文件完成語言包的開發(fā),也可根據(jù)需要開發(fā)對更多種類語言的支持。語言包中所有定義的變量都將通過Angular pipe的方式最終在頁面中呈現(xiàn),應(yīng)用方法如下:
6? ?結(jié)論(Conclusion)
本文基于MEAN框架開發(fā)的摩托艇競賽系統(tǒng),利用將計(jì)算、數(shù)據(jù)庫和文件存儲分離的架構(gòu)提升了服務(wù)器端的安全性,結(jié)合RESTful API接口的設(shè)計(jì)提升了服務(wù)器端的易用性和可擴(kuò)展性。在系統(tǒng)使用過程中,通過線上線下相結(jié)合的模式,大幅降低賽事參與各方的溝通成本,有效提高辦賽效率,提升所有賽事參與者的用戶體驗(yàn)。該系統(tǒng)已成功應(yīng)用于2017年中國柳州國際水上摩托公開賽,并首次在摩托艇項(xiàng)目中實(shí)現(xiàn)了無紙化辦賽,即節(jié)約了辦賽成本,也讓所有賽事參與者享受到“互聯(lián)網(wǎng)+體育”帶來的便利。
參考文獻(xiàn)(References)
[1] 王堅(jiān).在線[M].北京:中信出版社,2018.
[2] 王朝霞.互聯(lián)網(wǎng)環(huán)境下體育產(chǎn)業(yè)服務(wù)發(fā)展模式創(chuàng)新研究[J].廣州體育學(xué)院學(xué)報(bào),2016,36(5):18-21.
[3] 周兵.大數(shù)據(jù)時(shí)代新聞報(bào)道中數(shù)據(jù)新聞的運(yùn)用[J].中國統(tǒng)計(jì),2018(8):20-22.
[4] 陶倩.基于競賽規(guī)程的大型體育賽事競賽成績管理軟件系統(tǒng)模型研究[J].山東體育科技,2014(1):62-66.
[5] 黃揚(yáng)子.基于NodeJS平臺搭建REST風(fēng)格Web服務(wù)[J].無線互聯(lián)科技,2015(16):57-59.
[6] 王伶俐.基于NodeJS+Express框架的輕應(yīng)用定制平臺的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),2017(11):596-599.
[7] Haviv,Amos Q.MEAN Web Development:Master real-time web application development using a mean combination of MongoDB,Express,Angular JS,and Node.js[M/OL].Birmingham,UK:Packet Publishing.
[8] Holmes,Simon(2015).Getting MEAN with Mongo,Express,Angular,and Node[M/OL].Shelter Island,NY:Manning Publishing.
[9] Dickey,Jeff(2014).Write Modern Web Apps with the MEAN Stack:Mongo,Express,AngularJS, and Node.js(Develop and Design)[M/OL].San Francisco,CA:Peachpit Press.
[10] 程桂花,沈煒,何松林,等.Node.js中Express框架路由機(jī)制的研究[J].工業(yè)控制計(jì)算機(jī),2016,29(8):101-102.
[11] 朱建兵.基于Node.js高并發(fā)網(wǎng)絡(luò)應(yīng)用框架的研究與實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2013.
[12] 周昆.基于Node.js的非阻塞多核心服務(wù)器設(shè)計(jì)與實(shí)現(xiàn)[D].廈門:廈門大學(xué),2011.