來(lái)源:北大青鳥(niǎo)總部 2023年03月13日 13:45
對(duì)于已經(jīng)奔赴在職場(chǎng)的大學(xué)生們、準(zhǔn)備跳槽or看機(jī)會(huì)的朋友們,今天給大家上一堂API網(wǎng)關(guān)知識(shí)的查漏補(bǔ)缺課,希望能幫大家斬獲心儀的offer~
在介紹API網(wǎng)關(guān)是什么之前,我們需要知道網(wǎng)關(guān)是什么?網(wǎng)關(guān)又稱(chēng)為協(xié)議轉(zhuǎn)換器,相當(dāng)于網(wǎng)絡(luò)之間的“關(guān)卡”,用于連接網(wǎng)絡(luò)。我們知道在沒(méi)有路由器的情況下,不同網(wǎng)段的網(wǎng)絡(luò)是不能進(jìn)行通信的,要實(shí)現(xiàn)通信就需要網(wǎng)關(guān),就像從一個(gè)房間走向另一個(gè)房間必須要經(jīng)過(guò)一扇門(mén)一樣。網(wǎng)關(guān)就像是連接器一樣,把不同的東西連接起來(lái)了。
隨著互聯(lián)網(wǎng)的興起,出現(xiàn)了復(fù)雜多變的應(yīng)用系統(tǒng),應(yīng)用系統(tǒng)與應(yīng)用系統(tǒng)之間需要連接起來(lái)使得自己更加強(qiáng)大。例如:微信開(kāi)發(fā)平臺(tái)就會(huì)把自己的能力作為開(kāi)發(fā)平臺(tái)對(duì)外開(kāi)放,企業(yè)利用微信公眾號(hào)的微信開(kāi)發(fā)平臺(tái)二次開(kāi)發(fā)就可以提供更加豐富的功能,在微信公眾號(hào)就可以接收告警系統(tǒng)的信息等。應(yīng)用系統(tǒng)內(nèi)部的功能模塊與功能模塊之間需要連接起來(lái)使得應(yīng)用的管理更加便捷。
應(yīng)用系統(tǒng)與應(yīng)用系統(tǒng)之間的能力、數(shù)據(jù)對(duì)外開(kāi)放的模式就是openAPI,通過(guò)API網(wǎng)關(guān)可以統(tǒng)一管理客戶應(yīng)用的接入、API權(quán)限的管理、調(diào)用次數(shù)管理等。應(yīng)用內(nèi)部功能模塊與功能模塊之間的能力就是微服務(wù)API網(wǎng)關(guān),大家都知道隨著微服務(wù)架構(gòu)的流行,企業(yè)將服務(wù)拆分的更加細(xì)化,像淘寶這樣的業(yè)務(wù)包含幾千個(gè)微服務(wù),前端用戶的一個(gè)請(qǐng)求可能涉及到多個(gè)微服務(wù)模塊的調(diào)用,如果通過(guò)在調(diào)用的URL里寫(xiě)明調(diào)用的后端API地址,程序猿們估計(jì)是要瘋了。每上線一個(gè)新服務(wù),需要申請(qǐng)域名、配置Nginx,由不同的運(yùn)維人員去維護(hù),運(yùn)維們估計(jì)也是要瘋了。
而API網(wǎng)關(guān)就是把所有的請(qǐng)求入口都匯聚成了一個(gè)地址,對(duì)于前端開(kāi)發(fā)來(lái)說(shuō),只需要向一個(gè)URL發(fā)起請(qǐng)求,后續(xù)的請(qǐng)求處理全交由這個(gè)URL去管理分配。
API網(wǎng)關(guān)會(huì)接管所有的入口流量,將所有的請(qǐng)求轉(zhuǎn)發(fā)給后端服務(wù)器。一個(gè)API網(wǎng)關(guān)最基本的功能有四個(gè),即統(tǒng)一接入、協(xié)議適配、流量監(jiān)控與容錯(cuò)、安全防護(hù)。
網(wǎng)關(guān)就是系統(tǒng)的唯一入口,進(jìn)入系統(tǒng)的所有請(qǐng)求都要經(jīng)過(guò)API網(wǎng)關(guān),就像去上學(xué)要走到對(duì)應(yīng)的教室、操場(chǎng)、圖書(shū)館、廁所都必須得通過(guò)校門(mén)才可以進(jìn)去。這就叫做統(tǒng)一接入。
協(xié)議適配還是比較好理解的。在一個(gè)龐大的應(yīng)用系統(tǒng)內(nèi)部,子系統(tǒng)使用不同協(xié)議來(lái)進(jìn)行開(kāi)發(fā)通信是很正常的,但是子系統(tǒng)之間通信和數(shù)據(jù)傳輸就存在協(xié)議轉(zhuǎn)化的問(wèn)題了,有的子系統(tǒng)可能使用HTTP協(xié)議通信,有的子系統(tǒng)使用Dubbo協(xié)議通信,那這兩個(gè)協(xié)議的數(shù)據(jù)格式不一致,二者就不能互通有無(wú)了,就像廣東人說(shuō)廣東話,浙江人說(shuō)浙江話,如果沒(méi)有統(tǒng)一的語(yǔ)言(比如普通話來(lái)進(jìn)行轉(zhuǎn)化),那么廣東人與浙江人是無(wú)法進(jìn)行交流的。同樣,有了API網(wǎng)關(guān)將不同的通信協(xié)議適配成通用協(xié)議(如json、xml),從此子系統(tǒng)與子系統(tǒng)之間的通信就再也不是問(wèn)題了。雖然中國(guó)有56個(gè)民族,上百種方言,各地的人們聚集在一起使用普通話還是能進(jìn)行交流。
流量監(jiān)控與容錯(cuò)主要指的是流量控制、服務(wù)降級(jí)。因?yàn)锳PI網(wǎng)關(guān)是唯一的入口,所以當(dāng)后端服務(wù)無(wú)法承載業(yè)務(wù)請(qǐng)求時(shí),如果流量持續(xù)的進(jìn)來(lái)就會(huì)導(dǎo)致有些請(qǐng)求無(wú)法處理,造成不好的用戶體驗(yàn)。這時(shí)候通過(guò)API網(wǎng)關(guān)就可以限制流入的請(qǐng)求,讓后端服務(wù)器免受沖擊。就像全國(guó)各地的人來(lái)到北京要去參觀北大校園時(shí),因?yàn)閷W(xué)校的空間有限,承載不了無(wú)限的人數(shù),保安就會(huì)通過(guò)校門(mén)攔截一部分游客,實(shí)現(xiàn)分流入園。服務(wù)降級(jí)就是指當(dāng)應(yīng)用服務(wù)出現(xiàn)異常時(shí),通過(guò)API網(wǎng)關(guān)把用戶的請(qǐng)求導(dǎo)入到其它服務(wù)或者降級(jí)提示服務(wù)暫時(shí)不可用,同時(shí)再通過(guò)服務(wù)注冊(cè)中心監(jiān)聽(tīng)存在問(wèn)題的服務(wù),一旦服務(wù)恢復(fù)再把請(qǐng)求恢復(fù),就像是北大校園因?yàn)檐娪?xùn)原因而不能對(duì)外提供參觀服務(wù)時(shí),保安就會(huì)告知游客白天無(wú)法參觀,傍晚不軍訓(xùn)時(shí)可進(jìn)入校園參觀。
安全防護(hù)主要是指統(tǒng)一的安全認(rèn)證、黑白名單等技術(shù)。安全是非常重要的,所以對(duì)于應(yīng)用服務(wù)器的請(qǐng)求都需要擁有權(quán)限,通過(guò)API網(wǎng)關(guān)來(lái)進(jìn)行權(quán)限認(rèn)證是最高效率的方式。目前系統(tǒng)常見(jiàn)的權(quán)限管理做法是用戶通過(guò)登陸服務(wù)獲取Token(標(biāo)記/令牌),把它存在客戶端,每次請(qǐng)求的時(shí)候把該Token放在Header里發(fā)送給服務(wù)器,API網(wǎng)關(guān)解析該Token,知道誰(shuí)來(lái)訪問(wèn),能做什么事情,從而提高系統(tǒng)的安全性。
隨著用戶的增多、業(yè)務(wù)接入的復(fù)雜、流量的增長(zhǎng),API網(wǎng)關(guān)也在不斷的成長(zhǎng),在每個(gè)階段核心要求都不一樣,總的來(lái)說(shuō)包括三個(gè)階段,基礎(chǔ)階段、快速發(fā)展階段、平臺(tái)化階段。
在基礎(chǔ)階段,用戶規(guī)模不大、流量不多,因此只需要建設(shè)基礎(chǔ)能力即可,即統(tǒng)一接入、協(xié)議適配、服務(wù)注冊(cè),能夠完成一個(gè)用戶請(qǐng)求從前端到后臺(tái)的操作。
在快速發(fā)展階段,用戶開(kāi)始大量增長(zhǎng)、業(yè)務(wù)規(guī)模也變得復(fù)雜、流量開(kāi)始增多,這個(gè)時(shí)候API網(wǎng)關(guān)需要保障安全、穩(wěn)定、性能。對(duì)于穩(wěn)定,可以理解為無(wú)論什么時(shí)候都不要出現(xiàn)業(yè)務(wù)不可用的情況,通過(guò)對(duì)入口請(qǐng)求的限流、對(duì)后端服務(wù)的降級(jí)處理、將不同業(yè)務(wù)之間流量隔離、彈性伸縮動(dòng)態(tài)擴(kuò)容實(shí)現(xiàn)業(yè)務(wù)的穩(wěn)定性,對(duì)于安全,可以理解為服務(wù)接入時(shí)進(jìn)行鑒權(quán)處理。對(duì)于性能,可以理解為通過(guò)豐富的性能測(cè)試場(chǎng)景(如基準(zhǔn)性能測(cè)試、容量性能測(cè)試、穩(wěn)定性測(cè)試、異常性測(cè)試)和線上監(jiān)控平臺(tái)的搭建,保障服務(wù)的業(yè)務(wù)可用、訪問(wèn)不延遲。
在平臺(tái)化階段,用戶的增長(zhǎng)、業(yè)務(wù)規(guī)模、流量已經(jīng)達(dá)到超大的量級(jí),這時(shí)候API網(wǎng)關(guān)開(kāi)始向開(kāi)放平臺(tái)發(fā)展(比如微信公眾平臺(tái)),需要聚焦于第三方能高效接入、開(kāi)放、安全。開(kāi)放平臺(tái)就有點(diǎn)像SaaS的模式,需要有前端頁(yè)面,需要支持多租戶來(lái)允許多個(gè)用戶使用,需要有完善的解決方案、幫助文檔、支持中心、身份管理、信息維護(hù)、應(yīng)用創(chuàng)建等。而API的開(kāi)放則涉及API的生命周期管理、API接口維護(hù)更新等。同時(shí)還需要對(duì)應(yīng)的運(yùn)營(yíng)管理能力支持,比如開(kāi)發(fā)者管理、應(yīng)用管理、文檔管理、工單管理等。
在本文中我們對(duì)網(wǎng)關(guān)、API網(wǎng)關(guān)、API網(wǎng)關(guān)發(fā)展的三個(gè)階段進(jìn)行了查漏補(bǔ)缺的介紹,相信只要好好“復(fù)習(xí)”,大家也一定能收獲心儀的offer~各位加油咯