周文浩 宋英雄
摘 要:不同于大型企業(yè),中小型初創(chuàng)企業(yè)在為自身應(yīng)用研發(fā)相應(yīng)的Api服務(wù)平臺的同時,需要注重時間成本和經(jīng)濟成本的控制。而采用基于PhalApi和OAuth2.0協(xié)議的輕量級架構(gòu)可以在保證系統(tǒng)資源安全的前提下達到敏捷開發(fā),縮短開發(fā)周期的目的。通過在該架構(gòu)下對大量數(shù)據(jù)批量存儲入庫效率的測試研究,進一步優(yōu)化了系統(tǒng)在大量數(shù)據(jù)存儲入庫方面的性能。該系統(tǒng)為中小型初創(chuàng)企業(yè)提供了一個平衡時間和成本的Api服務(wù)平臺方案。
關(guān)鍵詞:PhalApi框架;OAuth2.0協(xié)議;批量存儲;成本控制
Abstract:Differing from large enterprises, small and medium-sized start-ups need to pay attention to the control of time cost and economic cost while developing corresponding Api service platform for their own applications. The lightweight architecture based on PhalApi and OAuth 2.0 protocol can achieve agile development and shorten the development cycle on the premise of ensuring the security of system resources. By testing and studying the efficiency of mass data storage in the framework, the performance of the system in mass data storage is further optimized. This system provides an Api service platform for small and medium-sized start-ups to balance time and cost.
Key words:PhalApi frame;OAuth2.0 protocol;batch storage;cost control
0 引言
當今大型企業(yè)的Api服務(wù)平臺的后端業(yè)務(wù)框架多是基于SSM(Spring SpringMVC MyBatis)來開發(fā)的,對于那些中小型初創(chuàng)企業(yè)而言,采用此框架需要維護一個規(guī)模不小的開發(fā)運維團隊,從時間和金錢角度而言也是開銷巨大的。另外,對于某些特定業(yè)務(wù)功能而言,無論是在開發(fā)速度還是迭代周期等方面,SSM又顯得太過笨重。有鑒于此,OpenApi服務(wù)平臺系統(tǒng)的成本與性能的平衡問題是中小型初創(chuàng)企業(yè)不可回避的。
本文所研究探索的基于PhalApi的Api服務(wù)平臺系統(tǒng)正是致力于解決中小型初創(chuàng)企業(yè)無法找到合適貼切的開源框架的困境。其良好的架構(gòu)約束規(guī)范保證了在海量數(shù)據(jù)下系統(tǒng)的性能穩(wěn)定[1]。這些都對中小型初創(chuàng)企業(yè)在降低開發(fā)和維護自身開放服務(wù)平臺時的時間和金錢成本方面具有重要意義。
1 系統(tǒng)的設(shè)計
1.1 基于WAMP的底層環(huán)境架構(gòu)設(shè)計
WAMP是指在Windows環(huán)境下配置Apache+Mysql+PHP相關(guān)組件的一種開源軟件環(huán)境架構(gòu)[2]。在整個系統(tǒng)結(jié)構(gòu)中,WAMP作為底層環(huán)境架構(gòu)主要負責(zé)對http請求的解析處理和響應(yīng),具體結(jié)構(gòu)如圖1所示。
在實際設(shè)計過程中若以外網(wǎng)的方式訪問,則需要更改apache的相關(guān)配置文件。在配置文件夾中找到httpd.conf這個文件,找到deny from all這行代碼并刪除,然后把allow from 127.0.0.1這行代碼更改為allow from all[3]。具體的配置文件代碼,如圖2所示。
另外,為了為了確保url重寫功能能夠正常運行,需要把配置文件中AllowOverride none這段代碼更改為AllowOverride all。具體代碼如圖3所示:
1.2 基于OAuth2.0認證協(xié)議的安全設(shè)計
基于OAuth2.0協(xié)議,用戶可以在無需為第三方應(yīng)用提供用戶名和密碼的情況下授權(quán)第三方應(yīng)用以調(diào)用api等方式訪問其保存在服務(wù)器上的視頻,照片等私密資源[4]。OAuth2.0的大致框架流程,如圖4所示。
它既保障了用戶私密信息的安全性,又減少了因為授權(quán)問題而產(chǎn)生的同步時延問題的時間成本,進一步提升了用戶體驗。
使用授權(quán)碼模式完成OAuth2.0授權(quán)的過程需要以下3個步驟:(1)client請求授權(quán)服務(wù)端,獲取Authorization Code;(2)client通過Authorization Code再次請求授權(quán)服務(wù)端,獲取Access Token;(3)client通過服務(wù)端返回的Access Token獲取用戶的基本信息[5]。而第三方應(yīng)用正式通過上述的幾個接口與服務(wù)端交互進而獲得用戶授權(quán)的,其主要的流程,如圖5所示。
具體實現(xiàn)代碼,如圖6所示。
1.3 PhalApi輕量級框架
PhalApi框架又被稱為π框架,作為國內(nèi)一款完全開源的輕量級PHP Api開發(fā)框架,它非常適用于api平臺的接口服務(wù)開發(fā),支持HTTP/SOAP/RPC協(xié)議,可用于快速搭建微服務(wù)、RESTful接口或Web Services[6]。連接后端數(shù)據(jù)庫的相關(guān)配置代碼如下所示:
2 系統(tǒng)性能測試
由于本系統(tǒng)是面向某企業(yè)設(shè)計的聚合類接口服務(wù)平臺,因此在性能上必須保證穩(wěn)定和高效。而在實際應(yīng)用中需要每隔一段時間調(diào)用一次入庫Api存儲十萬級甚至百萬級的數(shù)據(jù),所以接下來著重測試Test.Warehouse接口。
2.1 測試準備
本次測試采用本機作為一臺小型服務(wù)器。同時,為了使測試結(jié)果具有可對比性,除了保證硬件設(shè)備參數(shù)一致外,每次對后臺數(shù)據(jù)庫進行十萬級數(shù)據(jù)寫入操作后都清空相關(guān)表格。具體測試環(huán)境信息,如表1所示。
2.2 測試流程
首先我們采用逐條插入的方式將10萬條數(shù)據(jù)進行存儲入庫。測試結(jié)果為一次性逐條入庫10萬條數(shù)據(jù)所需耗時為86.397秒。顯然,這種低效的入庫方式在實際應(yīng)用中是不能接受的。因此,我們需要對入庫方法和邏輯進一步優(yōu)化。具體代碼如下所示。
在實際應(yīng)用過程中,面對大量數(shù)據(jù)的存儲入庫問題,采用批量插入的方式可以極大地提升入庫效率,而通過進一步研究測試發(fā)現(xiàn),單次提交的數(shù)量同樣會影響大量數(shù)據(jù)的入庫性能。測試過程中,更改單次提交數(shù)量,將10萬條數(shù)據(jù)分批提交入庫,得到九組測試數(shù)據(jù),測試結(jié)果,如圖9所示。
3 結(jié)果分析
由系統(tǒng)測試結(jié)果可以看出,當使用PhalApi框架對十萬級甚至百萬級數(shù)據(jù)進行存儲入庫時,采用insert_multi批量插入的方式可以大幅提升海量數(shù)據(jù)的入庫效率。如圖11所示,進一步深入框架底層研究insert_multi函數(shù)的源碼可以發(fā)現(xiàn),批量插入正是在一句標準插入SQL語句中封裝多條數(shù)據(jù),然后提交至服務(wù)端。而如果采用逐條插入的方式,那么插入100 000條數(shù)據(jù)就會有100 000條insert語句提交到服務(wù)端,每一句都需要提交到數(shù)據(jù)庫引擎中去解析、優(yōu)化。結(jié)果必將是增加數(shù)據(jù)庫的開銷,進而大大降低整個系統(tǒng)的性能。更簡明地說,批量插入使得提交到服務(wù)器地insert語句減少了,服務(wù)端壓力也隨之減小,雖然對單個SQL語句的解析和優(yōu)化的時間相應(yīng)增加,但實際的存儲數(shù)據(jù)行卻大幅增加,因此系統(tǒng)的整體性能得以提高。insert_multi函數(shù)底層源碼如下所示。
4 總結(jié)
本文設(shè)計的基于PhalApi和OAuth2.0協(xié)議的接口服務(wù)平臺系統(tǒng)具有可快速部署,安全性高,迭代周期短等特點,為中小型企業(yè)和初創(chuàng)團隊搭建聚合類接口服務(wù)平臺提供了一個平衡時間和金錢成本的高性價比方案。另外,通過對本系統(tǒng)性能的進一步研究測試,本系統(tǒng)經(jīng)受了企業(yè)級的功能測試,在保證系統(tǒng)安全穩(wěn)定運行的同時,還進一步提升了大量數(shù)據(jù)存儲入庫的效率。
參考文獻
[1] 歐海文,付永亮,于芋,等. 一種改進的OAuth授權(quán)機制有效性分析[J]. 計算機應(yīng)用與軟件,2017,34(12):196-201.
[2] 黃小冬,陳薇. 教育教學(xué)數(shù)據(jù)Open API設(shè)計與實現(xiàn)[J]. 軟件導(dǎo)刊,2015,14(5):115-118.
[3] 段玉龍.基于OAUTH、OPENAPI、REST技術(shù)的快速開發(fā)云平臺架構(gòu)的設(shè)計與實現(xiàn)[J].工業(yè)設(shè)計,2016(2):160-161.
[4] 王丹磊,李長軍,趙磊,等. OAuth 2.0協(xié)議在Web部署中的安全性分析與威脅防范[J]. 武漢大學(xué)學(xué)報(理學(xué)版),2012(12):41-43.
[5] 譚晨輝,劉青炎. OpenAPI出現(xiàn)、起源與現(xiàn)狀[J]. 程序員,2016(7):411-417.
[6] HARDT D. The OAuth 2.0 Authorization Framework[EB/OL]. (2012-3-30) http:// tools.ietf.org/html/draft-ietf-oauth-v2-31.
[7] Cloud Security Alliance. The Treacherous Twelve[EB/OL]. 2016:42(2):229-233.
(收稿日期:2019.09.22)