過多的接口請(qǐng)求是web前端的主要性能瓶頸之一筷弦,接口合并是剛需溅潜。
后臺(tái)的接口設(shè)計(jì)有其既有粒度术唬,對(duì)每個(gè)功能場(chǎng)景額外的增加合并的接口,工作量巨大滚澜,且場(chǎng)景難以覆蓋粗仓。
增加一臺(tái)離接口服務(wù)器很近的代理服務(wù)器,定義一套接口合并的規(guī)則,代理服務(wù)器解析前端發(fā)來的規(guī)則借浊,對(duì)接口服務(wù)器發(fā)起近距離請(qǐng)求塘淑,合并后返回。
一蚂斤、Web 開發(fā)的困境
在web開發(fā)中存捺,前端為了一個(gè)實(shí)現(xiàn)一個(gè)功能,連續(xù)的請(qǐng)求多個(gè)接口的場(chǎng)景并不少見橡淆。圖一示例中召噩,后一個(gè)接口依賴于前一個(gè)接口的請(qǐng)求結(jié)果母赵,于是你經(jīng)常要這樣去組織你的接口請(qǐng)求step1.then(step2).then(step3)(promise語法)逸爵,圖二中,step1,step2,step3雖然沒有依賴關(guān)系凹嘲,但是同樣需要跟api-server交互三次师倔,web應(yīng)用中,沒多一秒等待都意味著多一份失去周蹭。
你可能會(huì)抱怨后端的同事趋艘,為何不把這幾個(gè)接口合并,然而后端的同事就會(huì)反駁你:“你這個(gè)場(chǎng)景需要step1->step2->step3凶朗,那個(gè)頁面只需要step1 -> step2瓷胧,甚至有些頁面只需要step1,我如何給你合并棚愤?”你可以繼續(xù)說搓萧,可以提供三個(gè)這樣的接口嘛,那么后臺(tái)的同事可能直接會(huì)崩潰宛畦,這樣的場(chǎng)景何其多瘸洛,新增一個(gè)場(chǎng)景新增一個(gè)接口,后臺(tái)就得發(fā)一次版本次和。
二反肋、代理服務(wù)的接口合并方案
- 代理服務(wù)(proxy-server.png)和接口服務(wù)器(api-server)的網(wǎng)絡(luò)鏈路應(yīng)該盡量的“近”。部署在同一機(jī)房同一網(wǎng)段的服務(wù)器上踏施,甚至是同一服務(wù)器上石蔗;增加服務(wù)器硬件性能;負(fù)載均衡集群等畅形;這些都是“簡(jiǎn)短“網(wǎng)絡(luò)鏈路的有效手段
- 前后端約定好一套接口合并的規(guī)則养距,代理服務(wù)只需要做好解析規(guī)則請(qǐng)求合并的工作,一旦部署將保持穩(wěn)定束亏,接口合并的主動(dòng)權(quán)將掌握在前端铃在,前端可以根據(jù)場(chǎng)景的變化自由的組合合并規(guī)則
- 代理服務(wù)與接口服務(wù)走的同樣是http/https協(xié)議,對(duì)接口服務(wù)器沒有依賴嵌入,前端直接請(qǐng)求接口服務(wù)器也是沒有問題的定铜,換句話說:老的訪問方式完全不受影響阳液。
這種合并方案為什么能極大的提升接口訪問速度
對(duì)于需要訪問三個(gè)有依賴關(guān)系的接口的場(chǎng)景(上圖一):傳統(tǒng)的前端直接請(qǐng)求接口服務(wù)器的方式,前端跟服務(wù)器的交互相當(dāng)于需要走三次”遠(yuǎn)路“(為什么說前端直接連接口服務(wù)器認(rèn)為是”遠(yuǎn)路“揣炕,因?yàn)榍岸说木W(wǎng)絡(luò)狀態(tài)無法保證帘皿,對(duì)于移動(dòng)端設(shè)備常常只能在3g/4g的網(wǎng)絡(luò)環(huán)境下,況且移動(dòng)端硬件性能并不占優(yōu))畸陡,并且需要串行等待鹰溜;然而使用代理服務(wù)器的方式,前端只需要走一次”遠(yuǎn)路“把規(guī)則告訴代理服務(wù)器丁恭,代理服務(wù)器再跟它老表接口服務(wù)器要三次數(shù)據(jù)(代理服務(wù)器跟接口服務(wù)器的訪問速度往往遠(yuǎn)高于前端與服務(wù)器的直接交互的訪問速度曹动,根本不是一個(gè)量級(jí)的)
沒有數(shù)據(jù)支撐的理論臆測(cè)都是在耍流氓,我在同一臺(tái)服務(wù)器上分別部署了接口服務(wù)(api-server)牲览,和使用了上述代理方案的node實(shí)現(xiàn)(freedom-api墓陈,后文會(huì)詳細(xì)說明),接口服務(wù)器提供了兩個(gè)有依賴關(guān)系的串行接口第献,使用手機(jī)在不同的網(wǎng)絡(luò)下分別使用傳統(tǒng)的直連方式和走代理服務(wù)合并接口的方式進(jìn)行測(cè)試贡必,得到如下測(cè)試結(jié)果:
由圖可見,在三種網(wǎng)絡(luò)環(huán)境下庸毫,代理合并的方式的訪問速度都明顯高于傳統(tǒng)直連的方式仔拟,并且網(wǎng)絡(luò)狀況越差,體現(xiàn)得越明顯
三飒赃、 規(guī)則定義
請(qǐng)移步 freedom-api
四利花、基于 freedom-api 實(shí)現(xiàn)的在線接口流程測(cè)試工具
請(qǐng)移步 Facemagic