基于代理服務(wù)的接口合并方案

過(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ù)的接口合并方案

proxy
  • 代理服務(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é)果:

弱wifi網(wǎng)絡(luò)(網(wǎng)速比4g更慢)
4g網(wǎng)絡(luò)
強(qiáng)wifi網(wǎng)絡(luò)

由圖可見(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,094評(píng)論 25 709
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 12,430評(píng)論 6 13
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,728評(píng)論 18 399
  • 什么是教養(yǎng)?我想每個(gè)人對(duì)教養(yǎng)都有不一樣的理解,但有教養(yǎng)的共同點(diǎn),都是建立在能夠替別人著想、從別人的角度考慮問(wèn)題的基...
    閑看歲月流光閱讀 270評(píng)論 1 0

友情鏈接更多精彩內(nèi)容