項目的技術(shù)路線及預期成果
技術(shù)路線: 整體項目采用微服務理念,根據(jù)業(yè)務縱向分割,獨立成服務。服務之間互相獨立,降低局部故障對整體系統(tǒng)的影響,提高系統(tǒng)的容災性以及穩(wěn)定性。每個服務采用Spring、Spring MVC、Spring Boot、MyBatis結(jié)構(gòu)構(gòu)建。
系統(tǒng)架構(gòu)圖如下:
負載均衡:
采用Nginx作為負載均衡模塊,輕量高效,可以和后端的應用服務協(xié)調(diào)的契合。將用戶請求分散給后端服務,降低單機負載。
內(nèi)容分發(fā)網(wǎng)絡:
將靜態(tài)內(nèi)容(例如用戶頭像)緩存至CDN服務器,提高用戶訪問速度,降低服務器負載。
消息隊列:
采用ActiveMQ作為消息隊列模塊,將并行請求轉(zhuǎn)化為串行請求,削峰填谷,保證OJ服務器負載平穩(wěn),運行穩(wěn)定。
OJ編譯評測模塊:
OJ編譯評測模塊需要重點處理的問題就是安全問題,由于需要將用戶輸入源碼編譯并運行,這個過程中存在較大的安全隱患。我們將對外部輸入代碼進行白名單驗證,并利用Linux系統(tǒng)下成熟的沙箱技術(shù)Apparmor對運行期的評測程序做細粒度的權(quán)限控制。保證被評測程序的運行不影響服務器的安全穩(wěn)定。
語音識別模塊: 語音識別模塊用于解析用戶聲音,轉(zhuǎn)化為文字再對文檔進行搜索。由于語音識別技術(shù)過于復雜,我們將調(diào)用現(xiàn)有的成熟技術(shù)解決方案以實現(xiàn)對音頻的解析。語音識別的基本原理如下:
1、發(fā)出的語音屬于模擬信號,為了對語音信號進行分析和處理,需要進行模數(shù)轉(zhuǎn)換
2、數(shù)字化后,提取語音信號的聲學特征:
1)人耳的生理特性:
生理 感知
強度 響度
基本頻率 基音
頻譜形狀 音色
開合時間 時間
雙耳相位差 位置
2)根據(jù)人耳的生理特征進行聲學特征提取:把每一幀波形變成一個多維向量,可以理解為這個向量包含了這幀語音的內(nèi)容信息。
3、得出語音識別結(jié)果
1)把幀識別成狀態(tài)
通過“聲學模型”里的參數(shù),獲取幀和某一狀態(tài)對應的概率,若干幀數(shù)對應一個 狀態(tài)。
2)把狀態(tài)組合成音素。
每三個狀態(tài)組成一個音素。
3)把音素組合成單詞。
中文全文檢索模塊:
1)中文分詞 高效準確的中文分詞算法是搜索引擎實現(xiàn)的第一步,本程序采用基于CRF算法的中文分詞實現(xiàn)。
首先對每一個字計算出一個標簽屬性,某個字根據(jù)CRF模型提供的模板生成了一系列特征函數(shù),這些函數(shù)的輸出值乘以該函數(shù)的權(quán)值最后求和得出了一個分數(shù)。該分數(shù)只是“點函數(shù)”的得分,還需加上“邊函數(shù)”的得分。邊函數(shù)在本分詞模型中簡化為f(s',s),其中s'為前一個字的標簽,s為當前字的標簽。于是該邊函數(shù)就可以用一個4*4的矩陣描述,相當于HMM中的轉(zhuǎn)移概率。然后通過BEMS合并,將分詞結(jié)果送入詞性數(shù)據(jù)庫中查詢詞性,去除停詞(Stop word)后進行下一步反向索引。
2) 反向索引的建立
將分詞后得到的詞建立一個字典,按自然順序排序,合并相同的詞,成為文檔倒排鏈表。便于搜索引擎根據(jù)關(guān)鍵字快速查詢文章。
3) 索引索引 對用戶輸入的查詢語句進行自然語言分析,識別單詞關(guān)鍵字(此處和中文分詞基本相同)形成自然語言語法樹,根據(jù)關(guān)鍵詞在反向索引表中查詢文檔。
4) 整合結(jié)果文檔 根據(jù)自然語言語法樹對查詢到的文檔進行合并、差等操作。通過關(guān)鍵詞詞頻等參數(shù)計算文檔相關(guān)度,并排序顯示給用戶。
數(shù)據(jù)庫服務器:
關(guān)系型數(shù)據(jù)庫服務器將采用MySQL Server,NoSQL服務器將采用Redis。我們將用戶狀態(tài)信息(例如session)儲存在Redis中,保證應用服務器無狀態(tài)性,易于平滑擴展。
應用結(jié)構(gòu)層次如下:
我們將應用進行橫向拆分,形成Controller,Service,DAO結(jié)構(gòu)。
Controller層負責與用戶交互收發(fā)信息,驗證輸入數(shù)據(jù)合法性,按照一定規(guī)則將請求分發(fā)給Service。Service層拆分處理請求。DAO層負責與數(shù)據(jù)庫交互。我們采用微服務理念,將復雜而邏輯依賴少的模塊(例如搜索引擎、語音識別、OJ測評)獨立出來,以微服務的形式存在,服務與服務之間采用RPC協(xié)議通訊,每個服務專人負責,保證系統(tǒng)穩(wěn)定性,降低單服務復雜度。
預期成果:
1、完成《基于java web 完成智能化編程語言初學者導引平臺系統(tǒng)》軟件設計。
2、對整個項目過程進行總結(jié),做一份項目報告。
3、申請軟件著作權(quán)。
|