李澤辰 張紅祥 黨凱 趙運鑫
摘要:本文通過對考勤重要性的闡述以及新型考勤形式的展望,提出了利用人臉識別技術(shù)輔助局域網(wǎng)技術(shù)以及移動定位技術(shù)的考勤管理系統(tǒng)。本文分析了系統(tǒng)的工作方式與實現(xiàn)難點,并就對難點問題——高并發(fā),進行了詳細(xì)分析和解決方案的提出。
關(guān)鍵詞:高??记?人臉識別;信息管理系統(tǒng);Android;高并發(fā)
中圖分類號:TP311文獻標(biāo)識碼:A
文章編號:1009-3044(2020)33-0180-02
開放科學(xué)(資源服務(wù))標(biāo)識碼( OSID):
0 引言
基于人臉識別技術(shù)[1]的移動考勤系統(tǒng)是基于阿里云人工智能面部識別技術(shù)[2]進一步定制開發(fā)的多功能考勤系統(tǒng)[3]。用戶通過手機App采集實時面部信息發(fā)往后臺進行比對,并輔助使用GPS定位技術(shù)確保用戶是在正確的位置進行的考勤操作,從而完成記錄考勤信息。
該系統(tǒng)在實際運行時必須解決一個技術(shù)難題:在考勤請求高并發(fā)的情況下,在有限的計算資源的條件下,系統(tǒng)如何實現(xiàn)穩(wěn)定準(zhǔn)確的完成考勤工作,如何解決這一難題,是本文的主要研究內(nèi)容[4]。
1 人臉識別移動考勤系統(tǒng)技術(shù)分析
本系統(tǒng)分為Web端[5-7]與Android App端[8-10],兩者之間相互獨立,可分別部署與不同的服務(wù)器上,但兩端公用同一數(shù)據(jù)庫。Web端與Android App端通過RocketMQ消息隊列進行一( Web)對多(Android App)通信與負(fù)載均衡處理。
Android App端的主要功能包括用戶數(shù)據(jù)存儲、人臉識別、人臉對比,考勤任務(wù)的發(fā)起。
用戶使用App進行注冊,大部分的用戶數(shù)據(jù)會保存至用戶終端本地,在閑時與web服務(wù)器的數(shù)據(jù)進行同步,從而減少服務(wù)器壓力,用戶在注冊和考勤時需要調(diào)用設(shè)備的前置攝像儀器,這里需要用到Android的攝像設(shè)備接口[11]。人臉捕捉階段需要調(diào)用阿里云“人臉檢測定位”接口,從而快速鎖定人臉區(qū)域,方便保存與后續(xù)比對。注冊時,系統(tǒng)生成用戶個人專屬的人臉數(shù)據(jù),并將其存放到阿里云OSS對象存儲服務(wù)中,以待下次對比使用。使用OSS對象存儲服務(wù)是因為人臉數(shù)據(jù)之后的服務(wù)中會頻繁使用,OSS對象存儲服務(wù)支持自動生成圖像的URL路徑,這樣很方便阿里云人臉對比接口的圖像導(dǎo)入,實現(xiàn)快速比對。在比對完成后,阿里云人臉對比接口會返回一個置信值,若高于80,視為人臉相符,App端將向web端發(fā)送用戶考勤成功的請求,若低于80,則視為人臉不相符,App將詢問用戶是否再次完成進行驗證考勤。
Web端僅供管理員用戶使用,為了方便管理,管理員權(quán)限應(yīng)當(dāng)做分級處理,此功能將使用Apache Shiro框架實現(xiàn),具體應(yīng)達到的效果為,一個學(xué)校(學(xué)院)設(shè)置一名專門負(fù)責(zé)考勤的一級管理員,設(shè)置多名二級管理員即老師。一級管理員可以管理所屬部門的所有二級管理員和戶信息,并可修改學(xué)校所有的考勤記錄。二級管理員可以發(fā)展群組即班級,班級的管理方式與App端方式相同,老師可以在班級范圍內(nèi)發(fā)布考勤任務(wù),并查看班級成員對考勤任務(wù)的完成情況并進行修改或下載。
考勤往往會因網(wǎng)絡(luò)狀況不佳,學(xué)生設(shè)備故障等客觀因素導(dǎo)致考勤不能正常完成,所以管理員對考勤記錄的修改的意義就在此體現(xiàn),以保證考勤的公平性。
Web端也將承擔(dān)考勤記錄的統(tǒng)計功能,由于考勤任務(wù)發(fā)布是只有很短時間的時效性而保證考勤的真實性,所以所有App將會在同一時間點發(fā)布考勤請求,從而發(fā)生高并發(fā)的現(xiàn)象,解決方法是使用SpringBoot集成RocketMQ消息隊列,多個App的考勤請求作為生產(chǎn)者,考勤請求將封裝考勤發(fā)起的時間,消息隊列的消費者會將考勤記錄逐條寫進數(shù)據(jù)庫中,依次解決高并發(fā)對服務(wù)器帶來的壓力。
2 并發(fā)問題的解決
首先,系統(tǒng)主要需要實現(xiàn)兩個功能,一個是處理好上課前幾分鐘考勤帶來的高并發(fā)請求,另一個是將所有的考勤數(shù)據(jù)盡快錄入系統(tǒng),方便老師查看。
該系統(tǒng)需要解決的最大問題是如何在高并發(fā)請求下快速的處理完當(dāng)前的請求任務(wù)。以西安文理學(xué)院舉例,每周一的第一節(jié)課大約有五千人需要上課,假如每個教室均使用本系統(tǒng)進行考勤,在幾分鐘內(nèi)系統(tǒng)的并發(fā)量就會劇增至上萬,如何能快速、正確的解決這些請求是一件很麻煩的事情。面對這種高并發(fā)的請求,本系統(tǒng)將從兩個方面進行優(yōu)化,分為數(shù)據(jù)庫優(yōu)化、服務(wù)端優(yōu)化。
首先,所有的考勤數(shù)據(jù)都需要存儲到數(shù)據(jù)庫以備后期查看,如果直接將考勤數(shù)據(jù)寫入數(shù)據(jù)庫,龐大的數(shù)據(jù)請求容易使得服務(wù)器宕機。本系統(tǒng)使用了Redis[12]進行緩存需要頻繁讀取的數(shù)據(jù),避免了多次請求數(shù)據(jù)庫而給服務(wù)器帶來巨大的壓力,從而加快了熱點數(shù)據(jù)的訪問速度;在數(shù)據(jù)庫方面,本系統(tǒng)將使用讀寫分離的辦法來解決數(shù)據(jù)庫請求量劇增的問題。建立專門用于讀取數(shù)據(jù)的數(shù)據(jù)庫,以及存儲數(shù)據(jù)的數(shù)據(jù)庫,高并發(fā)發(fā)生時,降低數(shù)據(jù)庫讀操作和寫操作混雜而導(dǎo)致數(shù)據(jù)庫崩潰的可能性。本系統(tǒng)還建立了對應(yīng)數(shù)據(jù)表的索引,以此來增加查詢效率,對于復(fù)雜的數(shù)據(jù)存儲,系統(tǒng)將直接調(diào)用存儲過程進行存儲,達到減少soL編譯時間、降低網(wǎng)絡(luò)通信量的目的,進而加快數(shù)據(jù)存儲所需要的時間。
對于服務(wù)器,采用Nginx進行反向代理,負(fù)載均衡。反向代理機制可以幫助經(jīng)常被請求的頁面緩解服務(wù)器的壓力,將客戶端的請求轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器上;負(fù)載均衡具有轉(zhuǎn)發(fā)、故障移除的功能,ngmx可以通過一定的算法,如輪詢、權(quán)重的算法來將不同的客戶端請求轉(zhuǎn)發(fā)到不同的服務(wù)器上,減輕單個服務(wù)器的壓力,以此來增加系統(tǒng)的并發(fā)量,利用心跳檢測機制,來判斷集群中的某臺服務(wù)器是否正常工作。同時使用RocketMQ消息隊列進行削峰處理,將請求數(shù)據(jù)先存人消息中間件中,消費處理系統(tǒng)逐漸拉取消費,將消費過的數(shù)據(jù)異步寫入數(shù)據(jù)庫,降低服務(wù)器壓力。對于部分靜態(tài)文件,本系統(tǒng)使用了CDN即內(nèi)容分發(fā)網(wǎng)絡(luò)來存儲,當(dāng)客戶端請求時,將請求分發(fā)到距離客戶端最近的緩存服務(wù)器上,由緩存服務(wù)器響應(yīng)客戶端的請求。
在阿里云服務(wù)器下進行測試,測試工具是Apache組織開發(fā)的基于Java的壓力測試工具,它可以用于對服務(wù)器、網(wǎng)絡(luò)或?qū)ο竽M繁重的負(fù)載來測試它們的強度或分析不同壓力類型下的整體性能。測試環(huán)境軟件環(huán)境如表1軟件環(huán)境所示:
對請求接口進行測試,線程數(shù)設(shè)置為1000,Ram-UP Period(啟動所有線程的時間)設(shè)置為lOs,循環(huán)次數(shù)設(shè)置為10次,即在10秒內(nèi)將會有10000次請求訪問系統(tǒng)。
測試結(jié)果匯總圖如圖l所示,每次請求狀態(tài)圖如圖2所示。
測試過程中請求1000次請求中error為0.00%,是可以接受的比例。Throughput(吞吐量)達到了103.4sec,理論上1秒內(nèi)可以解決103次請求。對于小規(guī)模的高并發(fā)請求足夠使用,當(dāng)請求次數(shù)達到10000以上時需要升級服務(wù)器配置。
綜上所述,本系統(tǒng)數(shù)據(jù)庫采用了讀寫分離、Redis熱緩存降低數(shù)據(jù)庫壓力;服務(wù)器采用了Nginx進行負(fù)載均衡和反向代理機制來增加請求響應(yīng)速度;使用RocketMQ消息隊列進行削峰處理,降低服務(wù)器壓力;靜態(tài)資源使用CDN來加速資源的獲取。
同時,使用了行業(yè)內(nèi)認(rèn)可的壓力測試工具Apache JMeter進行測試,測試結(jié)果良好,能夠在合理的時間內(nèi)完成系統(tǒng)的請求。
參考文獻:
[1]張旭,謝鑒.基于深度學(xué)習(xí)的人臉大數(shù)據(jù)系統(tǒng)應(yīng)用[J].電子技術(shù)與軟件工程,2019(3):161.
[2]吳文華.人臉識別技術(shù)的發(fā)展與功能[J].電子技術(shù)與軟件工程,2019(2):76.
[3]耿倩.基于人臉識別的高??记谙到y(tǒng)研究[J].陜西教育(高教),2019(8):45-46.
[4]周春杰.基于人臉識別及行人重識別技術(shù)的考勤系統(tǒng)[J].工業(yè)控制計算機,2019,32(8):152-153.
[5]蘇暢.基于JAVA的公司考勤系統(tǒng)的設(shè)計與實現(xiàn)[J].科技廣場,2013(5):58-60.
[6]王昌建.高校學(xué)生考勤信息管理系統(tǒng)設(shè)計與開發(fā)[J].科技信息,2010(33):91,112.
[7]何曉昀.基于校園網(wǎng)的學(xué)生考勤系統(tǒng)的設(shè)計[J].長江大學(xué)學(xué)報(自然科學(xué)版)理工卷,2010,7(3):285-286.
[8]薛云飛.基于Android平臺的校園移動考勤系統(tǒng)的研究與應(yīng)用[J].中國新通信,2018,20(2):82.
[9]張波,趙雙明.基于Android平臺的百度地圖開發(fā)研究[J].軟件導(dǎo)刊。2015,14(7):96-99.
[10]鄭杰輝.基于手機定位的考勤管理系統(tǒng)的設(shè)計與實現(xiàn)[J].武漢職業(yè)技術(shù)學(xué)院學(xué)報,2016,15 (5):72-74.
[11]徐旭東.網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)Android客戶端的開發(fā)[D].上海:上海交通大學(xué),2017.
[12]王琳.基于Nginx和Redis集群架構(gòu)的互聯(lián)網(wǎng)線上觸點商城解決策略[J].產(chǎn)業(yè)與科技論壇,2019,18(12):47-49.
【通聯(lián)編輯:聞翔軍】