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