Fizz Gateway 官方入門教程 —— 快速聚合多接口

<h2>#背景介紹</h2><p>先看一張圖尤误,頁面一共調(diào)用了 20 多個(gè)后端接口楚殿,頁面出現(xiàn)了明顯的卡頓撮慨,而且每 6 個(gè)請(qǐng)求一組,只有前一組返回后才執(zhí)行下一組∑瞿纾看到請(qǐng)求是 pending 狀態(tài)影涉,很容易以為是后端接口的問題,有經(jīng)驗(yàn)的同學(xué)可能一眼看出這是瀏覽器的并發(fā)限制導(dǎo)致的规伐,而非后端接口問題蟹倾。</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-b3f957f32efb70a2.jpeg" img-data="{"format":"jpeg","size":127784,"height":851,"width":1047}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>主流瀏覽器一般對(duì)同一個(gè)服務(wù)器的并發(fā)連接個(gè)數(shù)都是有限制的,</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-e3685fc52b8362d0.jpeg" img-data="{"format":"jpeg","size":51699,"height":698,"width":1502}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>瀏覽器為什么要請(qǐng)求并發(fā)數(shù)限制楷力?</p><p>1. 對(duì)操作系統(tǒng)端口資源考慮 PC 總端口數(shù)為 65536,那么一個(gè) TCP(http 也是 tcp)鏈接就占用一個(gè)端口孵户。操作系統(tǒng)通常會(huì)對(duì)總端口一半開放對(duì)外請(qǐng)求萧朝,以防端口數(shù)量不被迅速消耗殆盡。</p><p>2. 過多并發(fā)導(dǎo)致頻繁切換產(chǎn)生性能問題 一個(gè)線程對(duì)應(yīng)處理一個(gè) http 請(qǐng)求夏哭,那么如果并發(fā)數(shù)量巨大的話會(huì)導(dǎo)致線程頻繁切換检柬。而線程的上下文切換有時(shí)候并不是輕量級(jí)的資源。這導(dǎo)致得不償失竖配,所以請(qǐng)求控制器里面會(huì)產(chǎn)生一個(gè)鏈接池何址,以復(fù)用之前的鏈接。所以我們可以看作同域名下鏈接池最大為 4~8 個(gè)进胯,如果鏈接池全部被使用會(huì)阻塞后面請(qǐng)求任務(wù)用爪,等待有空閑鏈接時(shí)執(zhí)行后續(xù)任務(wù)。</p><p>3. 避免同一客服端并發(fā)大量請(qǐng)求超過服務(wù)端的并發(fā)閾值 在服務(wù)端通常都對(duì)同一個(gè)客戶端來源設(shè)置并發(fā)閥值避免惡意攻擊胁镐,如果瀏覽器不對(duì)同一域名做并發(fā)限制可能會(huì)導(dǎo)致超過服務(wù)端的并發(fā)閥值被 BAN 掉偎血。</p><p>4. 客戶端良知機(jī)制 為了防止兩個(gè)應(yīng)用搶占資源時(shí)候?qū)е聫?qiáng)勢(shì)一方無限制的獲取資源導(dǎo)致弱勢(shì)一方永遠(yuǎn)阻塞狀態(tài)。</p><h2>#服務(wù)編排適用場(chǎng)景</h2><p>服務(wù)編排主要基于現(xiàn)有的業(yè)務(wù)微服務(wù)使用在線配置的方式快速的生成一個(gè)聚合接口盯漂。</p><p>舉例說明:</p><p>訂單詳情頁面需要展示訂單信息颇玷、商品信息和用戶信息【屠拢可通過配置的方式生成一個(gè)接口先后調(diào)用底層微服務(wù)的訂單詳情接口帖渠、商品信息接口和用戶信息接口,再從這 3 個(gè)接口的返回結(jié)果里提取需要的字段返回給前端頁面竭宰。</p><p>Fizz 網(wǎng)關(guān)的服務(wù)編排的適用場(chǎng)景:</p><h3>#前端場(chǎng)景</h3><p>1空郊、一個(gè)頁面調(diào)用多個(gè)接口時(shí),可以編排好返回聚合結(jié)果切揭,提高頁面數(shù)據(jù)的加載速度</p><p>2渣淳、移動(dòng)設(shè)備計(jì)算能力有限,可以把數(shù)據(jù)計(jì)算或業(yè)務(wù)處理邏輯放到服務(wù)端完成伴箩,加快頁面響應(yīng)</p><h3>#后端場(chǎng)景</h3><p>1入愧、替換應(yīng)用層的聚合接口,減少應(yīng)用層的膠水代碼</p><p>2、快速生成透?jìng)鲾?shù)據(jù)類型的接口</p><p>3棺蛛、數(shù)據(jù)轉(zhuǎn)換和映射</p><h2>#快速聚合接口</h2><p>上面問題可通過 Fizz 網(wǎng)關(guān)的服務(wù)編排的聚合功能解決怔蚌,簡(jiǎn)單說就是把前端頁面要調(diào)用的多個(gè)接口改為由 Fizz 網(wǎng)關(guān)調(diào)用,然后把各接口的結(jié)果聚合后返回給前端旁赊。這樣前端只需調(diào)用一個(gè)簡(jiǎn)單的聚合接口就可以了桦踊。</p><h2>#資料準(zhǔn)備</h2><h3>#Fizz 網(wǎng)關(guān)安裝</h3><p>可參考: https://www.fizzgate.com/fizz/guide/installation</p><h3>#echo 接口</h3><p>后端接口通過一個(gè)延時(shí)的 echo 接口模擬,模擬前端頁面調(diào)用 10 個(gè)接口</p><p>http://127.0.0.1:8080/echo?latency=1000&echo = 接口 1</p><p>http://127.0.0.1:8080/echo?latency=1000&echo = 接口 2</p><p>...</p><p>http://127.0.0.1:8080/echo?latency=1000&echo = 接口 10</p><p>echo 接口源碼:fizz-examples-rest-api</p><h3>#聚合接口</h3><ol><li><p>聚合接口路徑:/fast-aggr/aggregate</p></li><li><p>請(qǐng)求方法:POST</p></li><li><p>入?yún)⒏袷剑?格式可根據(jù)需要自行調(diào)整)</p></li></ol><p>{
"params1": {
"latency": 1000,
"echo": "接口1"
},
"params2": {
"latency": 1000,
"echo": "接口2"
},
// ... 省略
"params10": {
"latency": 1000,
"echo": "接口10"
}
}
</p><ol><li>返回結(jié)果:(格式可根據(jù)需要自行調(diào)整)</li></ol><p>{
"result1": "接口1",
"result2": "接口2",
// ... 省略
"result3": "接口10"
}
</p><h3>#新增接口</h3><p>菜單位置:服務(wù)編輯 -> 接口列表终畅,點(diǎn)擊新增</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-f3fe148282f47582.jpeg" img-data="{"format":"jpeg","size":33745,"height":598,"width":1069}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h3>#配置輸入</h3><p>在配置輸入 tab 可以定義接口的入?yún)⒑驼?qǐng)求頭等信息籍胯,如果不配置入?yún)⒒蛘?qǐng)求頭,網(wǎng)關(guān)會(huì)原樣接收調(diào)用方傳過來的所有入?yún)⒒蛘?qǐng)求頭离福,但不會(huì)對(duì)接收到的參數(shù)做任何校驗(yàn)杖狼。在本例子中我們使用約定的入?yún)⒏袷剑筒欢x入?yún)?shù)了妖爷,全留空蝶涩。</p><h3>#配置步驟</h3><p>因?yàn)橐l(fā)調(diào)用 10 個(gè)接口,只需新增 1 個(gè)步驟絮识,然后在步驟里新增 10 個(gè) request, 服務(wù)選擇我們預(yù)先準(zhǔn)備好的 fizz-examples-rest-api 服務(wù)绿聘。入?yún)⑽覀兪褂?* 星號(hào)來透?jìng)髑岸藗鬟^來的參數(shù),在這里使用了引用值的方式來引用入?yún)⒋紊啵嚓P(guān)引用值的使用方式可參考文檔:數(shù)據(jù)轉(zhuǎn)換使用文檔 熄攘。配置響應(yīng)部分留空,網(wǎng)關(guān)會(huì)原樣接收接口的返回結(jié)果彼念。 按此方式我們分別配置好 10 個(gè)接口鲜屏。</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-d5d5964d8413dda5.jpeg" img-data="{"format":"jpeg","size":65951,"height":830,"width":1351}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-3bfc749f7b2c28a0.jpeg" img-data="{"format":"jpeg","size":71911,"height":821,"width":1341}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h3>#配置輸出</h3><p>配置要返回給前端的響應(yīng)報(bào)文,這里直接引用步驟里的結(jié)果</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-f817fb1714fea72a.jpeg" img-data="{"format":"jpeg","size":79385,"height":858,"width":1347}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h2>#測(cè)試</h2><p>配置完接口后国拇,點(diǎn)擊測(cè)試</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-ed53c5f6f17a68e0.jpeg" img-data="{"format":"jpeg","size":61528,"height":842,"width":1191}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h2>#訪問正式接口</h2><p>接口配置好后需要發(fā)布并配置路由才可以對(duì)公網(wǎng)開放洛史。菜單:編排審核 --> 我的申請(qǐng),點(diǎn)擊新增提交發(fā)布申請(qǐng)單酱吝。審核通過后即可發(fā)布也殖。</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-44ea8b5750f60550.jpeg" img-data="{"format":"jpeg","size":148284,"height":1708,"width":2524}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>發(fā)布后配置路由,菜單:網(wǎng)關(guān)管理 --> 路由管理</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-9affd721d58a2748.jpeg" img-data="{"format":"jpeg","size":184132,"height":1650,"width":2520}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>正式接口訪問 URL: http://[網(wǎng)關(guān) IP]:8600/proxy/fast-aggr/aggregate</p><p>前端頁面由原來調(diào)用多個(gè)接口改為調(diào)用一個(gè)聚合接口即可务热,大大降低了網(wǎng)絡(luò) IO 帶來的延時(shí)忆嗜,提高頁面訪問速度。</p><h2>#Fizz 網(wǎng)關(guān)介紹</h2><p>Fizz Gateway 是一個(gè)基于 Java 開發(fā)的微服務(wù)聚合網(wǎng)關(guān)崎岂,能夠?qū)崿F(xiàn)熱服務(wù)編排聚合捆毫、自動(dòng)授權(quán)選擇、線上服務(wù)腳本編碼冲甘、在線測(cè)試绩卤、高性能路由途样、API 審核管理、回調(diào)管理等目的濒憋,擁有強(qiáng)大的自定義插件系統(tǒng)可以自行擴(kuò)展何暇,并且提供友好的圖形化配置界面,能夠快速幫助企業(yè)進(jìn)行 API 服務(wù)治理凛驮、減少中間層膠水代碼以及降低編碼投入裆站、提高 API 服務(wù)的穩(wěn)定性和安全性。</p><p>官網(wǎng):https://www.fizzgate.com</p><p>GitHub: https://github.com/wehotel/fizz-gateway-community</p><p>碼云:https://gitee.com/fizzgate/fizz-gateway</p><p>入門教程:https://www.fizzgate.com/fizz/guide/GettingStarted/</p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末黔夭,一起剝皮案震驚了整個(gè)濱河市宏胯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌本姥,老刑警劉巖肩袍,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異扣草,居然都是意外死亡了牛,警方通過查閱死者的電腦和手機(jī)颜屠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門辰妙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人甫窟,你說我怎么就攤上這事密浑。” “怎么了粗井?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵尔破,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我浇衬,道長(zhǎng)懒构,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任耘擂,我火速辦了婚禮胆剧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘醉冤。我一直安慰自己秩霍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布蚁阳。 她就那樣靜靜地躺著铃绒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪螺捐。 梳的紋絲不亂的頭發(fā)上颠悬,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天矮燎,我揣著相機(jī)與錄音,去河邊找鬼椿疗。 笑死漏峰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的届榄。 我是一名探鬼主播浅乔,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼铝条!你這毒婦竟也來了靖苇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤班缰,失蹤者是張志新(化名)和其女友劉穎贤壁,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體埠忘,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脾拆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了莹妒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片名船。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖旨怠,靈堂內(nèi)的尸體忽然破棺而出渠驼,到底是詐尸還是另有隱情,我是刑警寧澤鉴腻,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布迷扇,位于F島的核電站,受9級(jí)特大地震影響爽哎,放射性物質(zhì)發(fā)生泄漏蜓席。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一课锌、第九天 我趴在偏房一處隱蔽的房頂上張望厨内。 院中可真熱鬧,春花似錦产镐、人聲如沸隘庄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丑掺。三九已至,卻和暖如春述雾,著一層夾襖步出監(jiān)牢的瞬間街州,已是汗流浹背兼丰。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留唆缴,地道東北人鳍征。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像面徽,于是被迫代替她去往敵國和親艳丛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容