周文浩 宋英雄



摘 要:不同于大型企業,中小型初創企業在為自身應用研發相應的Api服務平臺的同時,需要注重時間成本和經濟成本的控制。而采用基于PhalApi和OAuth2.0協議的輕量級架構可以在保證系統資源安全的前提下達到敏捷開發,縮短開發周期的目的。通過在該架構下對大量數據批量存儲入庫效率的測試研究,進一步優化了系統在大量數據存儲入庫方面的性能。該系統為中小型初創企業提供了一個平衡時間和成本的Api服務平臺方案。
關鍵詞:PhalApi框架;OAuth2.0協議;批量存儲;成本控制
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 引言
當今大型企業的Api服務平臺的后端業務框架多是基于SSM(Spring SpringMVC MyBatis)來開發的,對于那些中小型初創企業而言,采用此框架需要維護一個規模不小的開發運維團隊,從時間和金錢角度而言也是開銷巨大的。另外,對于某些特定業務功能而言,無論是在開發速度還是迭代周期等方面,SSM又顯得太過笨重。有鑒于此,OpenApi服務平臺系統的成本與性能的平衡問題是中小型初創企業不可回避的。
本文所研究探索的基于PhalApi的Api服務平臺系統正是致力于解決中小型初創企業無法找到合適貼切的開源框架的困境。其良好的架構約束規范保證了在海量數據下系統的性能穩定[1]。這些都對中小型初創企業在降低開發和維護自身開放服務平臺時的時間和金錢成本方面具有重要意義。
1 系統的設計
1.1 基于WAMP的底層環境架構設計
WAMP是指在Windows環境下配置Apache+Mysql+PHP相關組件的一種開源軟件環境架構[2]。在整個系統結構中,WAMP作為底層環境架構主要負責對http請求的解析處理和響應,具體結構如圖1所示。
在實際設計過程中若以外網的方式訪問,則需要更改apache的相關配置文件。在配置文件夾中找到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認證協議的安全設計
基于OAuth2.0協議,用戶可以在無需為第三方應用提供用戶名和密碼的情況下授權第三方應用以調用api等方式訪問其保存在服務器上的視頻,照片等私密資源[4]。OAuth2.0的大致框架流程,如圖4所示。
它既保障了用戶私密信息的安全性,又減少了因為授權問題而產生的同步時延問題的時間成本,進一步提升了用戶體驗。
使用授權碼模式完成OAuth2.0授權的過程需要以下3個步驟:(1)client請求授權服務端,獲取Authorization Code;(2)client通過Authorization Code再次請求授權服務端,獲取Access Token;(3)client通過服務端返回的Access Token獲取用戶的基本信息[5]。而第三方應用正式通過上述的幾個接口與服務端交互進而獲得用戶授權的,其主要的流程,如圖5所示。
具體實現代碼,如圖6所示。
1.3 PhalApi輕量級框架
PhalApi框架又被稱為π框架,作為國內一款完全開源的輕量級PHP Api開發框架,它非常適用于api平臺的接口服務開發,支持HTTP/SOAP/RPC協議,可用于快速搭建微服務、RESTful接口或Web Services[6]。連接后端數據庫的相關配置代碼如下所示:
2 系統性能測試
由于本系統是面向某企業設計的聚合類接口服務平臺,因此在性能上必須保證穩定和高效。而在實際應用中需要每隔一段時間調用一次入庫Api存儲十萬級甚至百萬級的數據,所以接下來著重測試Test.Warehouse接口。
2.1 測試準備
本次測試采用本機作為一臺小型服務器。同時,為了使測試結果具有可對比性,除了保證硬件設備參數一致外,每次對后臺數據庫進行十萬級數據寫入操作后都清空相關表格。具體測試環境信息,如表1所示。
2.2 測試流程
首先我們采用逐條插入的方式將10萬條數據進行存儲入庫。測試結果為一次性逐條入庫10萬條數據所需耗時為86.397秒。顯然,這種低效的入庫方式在實際應用中是不能接受的。因此,我們需要對入庫方法和邏輯進一步優化。具體代碼如下所示。
在實際應用過程中,面對大量數據的存儲入庫問題,采用批量插入的方式可以極大地提升入庫效率,而通過進一步研究測試發現,單次提交的數量同樣會影響大量數據的入庫性能。測試過程中,更改單次提交數量,將10萬條數據分批提交入庫,得到九組測試數據,測試結果,如圖9所示。
3 結果分析
由系統測試結果可以看出,當使用PhalApi框架對十萬級甚至百萬級數據進行存儲入庫時,采用insert_multi批量插入的方式可以大幅提升海量數據的入庫效率。如圖11所示,進一步深入框架底層研究insert_multi函數的源碼可以發現,批量插入正是在一句標準插入SQL語句中封裝多條數據,然后提交至服務端。而如果采用逐條插入的方式,那么插入100 000條數據就會有100 000條insert語句提交到服務端,每一句都需要提交到數據庫引擎中去解析、優化。結果必將是增加數據庫的開銷,進而大大降低整個系統的性能。更簡明地說,批量插入使得提交到服務器地insert語句減少了,服務端壓力也隨之減小,雖然對單個SQL語句的解析和優化的時間相應增加,但實際的存儲數據行卻大幅增加,因此系統的整體性能得以提高。insert_multi函數底層源碼如下所示。
4 總結
本文設計的基于PhalApi和OAuth2.0協議的接口服務平臺系統具有可快速部署,安全性高,迭代周期短等特點,為中小型企業和初創團隊搭建聚合類接口服務平臺提供了一個平衡時間和金錢成本的高性價比方案。另外,通過對本系統性能的進一步研究測試,本系統經受了企業級的功能測試,在保證系統安全穩定運行的同時,還進一步提升了大量數據存儲入庫的效率。
參考文獻
[1] 歐海文,付永亮,于芋,等. 一種改進的OAuth授權機制有效性分析[J]. 計算機應用與軟件,2017,34(12):196-201.
[2] 黃小冬,陳薇. 教育教學數據Open API設計與實現[J]. 軟件導刊,2015,14(5):115-118.
[3] 段玉龍.基于OAUTH、OPENAPI、REST技術的快速開發云平臺架構的設計與實現[J].工業設計,2016(2):160-161.
[4] 王丹磊,李長軍,趙磊,等. OAuth 2.0協議在Web部署中的安全性分析與威脅防范[J]. 武漢大學學報(理學版),2012(12):41-43.
[5] 譚晨輝,劉青炎. OpenAPI出現、起源與現狀[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)