掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
今天給大家分享一個(gè) API 網(wǎng)關(guān)的知識(shí),很多兄弟可能平時(shí)經(jīng)常搞的都是一些 CRUD 的業(yè)務(wù)系統(tǒng)開發(fā),從來沒接觸過 API 網(wǎng)關(guān)。

創(chuàng)新互聯(lián)建站提供高防物理服務(wù)器租用、云服務(wù)器、香港服務(wù)器、成都服務(wù)器托管等
那今天來講講,API 網(wǎng)關(guān)是啥,到底能對我們起到什么作用呢?這個(gè)一般面試的時(shí)候也很可能會(huì)問到這個(gè)知識(shí)點(diǎn)的。
平時(shí)咱們可能寫系統(tǒng)的時(shí)候,往往就是基于 SpringBoot+Spring MVC+Spring+Mybatis 這套技術(shù)棧來開發(fā)業(yè)務(wù)代碼,然后連接一個(gè) MySQL 就行了。
你調(diào)用別的系統(tǒng)往往就是基于 Dubbo,注冊中心可能是 Zookeeper 也可能是 Nacos。
就類似下面的這個(gè)圖,對不對?
好,那么現(xiàn)在給大家講第一個(gè)痛點(diǎn),那就是你們公司可能存在 n 多個(gè)業(yè)務(wù)系統(tǒng),那琳瑯滿目的,可能有幾十個(gè)系統(tǒng)。
此時(shí)對于前端/APP 端他們還能知道哪個(gè)請求發(fā)送給哪個(gè)系統(tǒng)嗎,這真的是太麻煩了,對不對?所以說,此時(shí)一般會(huì)引入一個(gè) API 網(wǎng)關(guān)。
你每個(gè)業(yè)務(wù)系統(tǒng)吧,在 API 網(wǎng)關(guān)里配置一下,自己要處理什么樣的請求 url,然后 API 網(wǎng)關(guān)收到請求以后,根據(jù)請求 url 路徑判斷一下,就知道應(yīng)該把請求轉(zhuǎn)發(fā)給哪個(gè)業(yè)務(wù)系統(tǒng)了,完美,對不對?
看看下圖吧:
下一個(gè)問題來了,你這個(gè)系統(tǒng)能允許別人誰來都隨便調(diào)用你嗎?你不得搞一個(gè)授權(quán)和鑒權(quán)的過程?你不得甄別甄別發(fā)送請求來的這個(gè)人是好人壞人?
你不得想想發(fā)送過來的這個(gè)請求到底應(yīng)該不應(yīng)該處理嗎?所以這個(gè)時(shí)候這個(gè)鑒權(quán)的事情你自己搞嗎?那太麻煩了吧,你也鑒權(quán),別的系統(tǒng)自己也鑒權(quán),那真的是麻煩大了。
所以這個(gè)時(shí)候,我們就直接在 API 網(wǎng)關(guān)里加入鑒權(quán)功能不就完了,一個(gè)請求過來是好人還是壞人,API 網(wǎng)關(guān)就幫你鑒權(quán)了,通過鑒權(quán)的請求才能往后端發(fā)送。
如下圖:
再下一個(gè)痛點(diǎn)來了,那就是假設(shè)咱們系統(tǒng)一共就部署了幾臺(tái)機(jī)器,總共每秒幾千請求了不得了,結(jié)果有一天運(yùn)營搞了一個(gè)特別棒的活動(dòng),每秒來了幾萬流量和請求,一下子給你擊垮了,你說你怎么辦,你扛不住啊?
所以這個(gè)時(shí)候啊,還得在 API 網(wǎng)關(guān)層加入流控的功能,每個(gè)業(yè)務(wù)系統(tǒng)可以配置自己能抗的 QPS,他根據(jù)這個(gè)來限制每秒轉(zhuǎn)發(fā)給你的請求不就完了。
如下圖:
然后呢,還有一個(gè)經(jīng)常遇到的痛點(diǎn),那就是咱們每次系統(tǒng)上線部署,如果一下子把新的版本部署到所有機(jī)器里去,就怕新版本上線就掉倆字,直接就崩潰,這可怎么辦。
所以一般來說,可以引入一個(gè)灰度發(fā)布,這個(gè)灰度發(fā)布意思就是說,假設(shè)你系統(tǒng)部署了 3 臺(tái)機(jī)器,每次上線先部署 1 臺(tái)機(jī)器,然后線上的流量里劃分 5% 給這個(gè)新部署的灰度版本機(jī)器,先觀察一下咋樣,要是沒問題,再把后續(xù)兩臺(tái)機(jī)器給部署了,這就是灰度發(fā)布。
灰度發(fā)布也可以叫做金絲雀發(fā)布,這個(gè)金絲雀發(fā)布是啥意思呢,就是以前古代有盜版的人下墓的時(shí)候先把金絲雀扔進(jìn)去看看,如果他不叫了,說明墓里有毒氣,現(xiàn)在這個(gè)灰度發(fā)布也是一個(gè)意思,先把新版本部署到一臺(tái)機(jī)器里去,觀察一下,要是他崩了,就說明代碼有問題。
所以此時(shí)就可以基于 API 網(wǎng)關(guān)來實(shí)現(xiàn)灰度發(fā)布了,每次部署了灰度版本以后,讓 API 網(wǎng)關(guān)就劃分 5% 的流量給這個(gè)灰度版本,一切正常了再全量部署。
如下圖:
好了,到這里為止,就給大家把這個(gè) API 網(wǎng)關(guān)的作用講清楚了,大家平時(shí)不要老是埋頭寫 crud 代碼啊,對 API 網(wǎng)關(guān)這些東西,也是要了解一下的,別啥都不知道。

我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流