過(guò)多的接口請(qǐng)求是web前端的主要性能瓶頸之一,接口合并是剛需。
后臺(tái)的接口設(shè)計(jì)有其既有粒度,對(duì)每個(gè)功能場(chǎng)景額外的增加合并的接口,工作量巨大,且場(chǎng)景難以覆蓋。
增加一臺(tái)離接口服務(wù)器很近的代理服務(wù)器,定義一套接口合并的規(guī)則,代理服務(wù)器解析前端發(fā)來(lái)的規(guī)則,對(duì)接口服務(wù)器發(fā)起近距離請(qǐng)求,合并后返回。
一、Web 開(kāi)發(fā)的困境


在web開(kāi)發(fā)中,前端為了一個(gè)實(shí)現(xiàn)一個(gè)功能,連續(xù)的請(qǐng)求多個(gè)接口的場(chǎng)景并不少見(jiàn)。圖一示例中,后一個(gè)接口依賴于前一個(gè)接口的請(qǐng)求結(jié)果,于是你經(jīng)常要這樣去組織你的接口請(qǐng)求step1.then(step2).then(step3)(promise語(yǔ)法),圖二中,step1,step2,step3雖然沒(méi)有依賴關(guān)系,但是同樣需要跟api-server交互三次,web應(yīng)用中,沒(méi)多一秒等待都意味著多一份失去。
你可能會(huì)抱怨后端的同事,為何不把這幾個(gè)接口合并,然而后端的同事就會(huì)反駁你:“你這個(gè)場(chǎng)景需要step1->step2->step3,那個(gè)頁(yè)面只需要step1 -> step2,甚至有些頁(yè)面只需要step1,我如何給你合并?”你可以繼續(xù)說(shuō),可以提供三個(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ù)器沒(méi)有依賴嵌入,前端直接請(qǐng)求接口服務(wù)器也是沒(méi)有問(wèn)題的,換句話說(shuō):老的訪問(wèn)方式完全不受影響。
這種合并方案為什么能極大的提升接口訪問(wèn)速度
對(duì)于需要訪問(wèn)三個(gè)有依賴關(guān)系的接口的場(chǎng)景(上圖一):傳統(tǒng)的前端直接請(qǐng)求接口服務(wù)器的方式,前端跟服務(wù)器的交互相當(dāng)于需要走三次”遠(yuǎn)路“(為什么說(shuō)前端直接連接口服務(wù)器認(rèn)為是”遠(yuǎn)路“,因?yàn)榍岸说木W(wǎng)絡(luò)狀態(tài)無(wú)法保證,對(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ù)器的訪問(wèn)速度往往遠(yuǎn)高于前端與服務(wù)器的直接交互的訪問(wèn)速度,根本不是一個(gè)量級(jí)的)
沒(méi)有數(shù)據(jù)支撐的理論臆測(cè)都是在耍流氓,我在同一臺(tái)服務(wù)器上分別部署了接口服務(wù)(api-server),和使用了上述代理方案的node實(shí)現(xiàn)(freedom-api,后文會(huì)詳細(xì)說(shuō)明),接口服務(wù)器提供了兩個(gè)有依賴關(guān)系的串行接口,使用手機(jī)在不同的網(wǎng)絡(luò)下分別使用傳統(tǒng)的直連方式和走代理服務(wù)合并接口的方式進(jìn)行測(cè)試,得到如下測(cè)試結(jié)果:



由圖可見(jiàn),在三種網(wǎng)絡(luò)環(huán)境下,代理合并的方式的訪問(wèn)速度都明顯高于傳統(tǒng)直連的方式,并且網(wǎng)絡(luò)狀況越差,體現(xiàn)得越明顯
三、 規(guī)則定義
請(qǐng)移步 freedom-api
四、基于 freedom-api 實(shí)現(xiàn)的在線接口流程測(cè)試工具
請(qǐng)移步 Facemagic