您好,登錄后才能下訂單哦!
本人建立了個(gè)人技術(shù)、工作經(jīng)驗(yàn)的分享×××號(hào),計(jì)劃后續(xù)公眾號(hào)同步更新分享,比在此更多具體。歡迎有興趣的同學(xué)一起加入相互學(xué)習(xí)?;谏掀⒎?wù)架構(gòu)分享,今天分享其中一個(gè)重要的基礎(chǔ)組件“API網(wǎng)關(guān)”。
一、引言
隨著互聯(lián)網(wǎng)的快速發(fā)展,當(dāng)前以步入移動(dòng)互聯(lián)、物聯(lián)網(wǎng)時(shí)代。用戶訪問(wèn)系統(tǒng)入口也變得多種方式,由原來(lái)單一的PC客戶端,變化到PC客戶端、各種瀏覽器、手機(jī)移動(dòng)端及智能終端等。同時(shí)系統(tǒng)之間大部分都不是單獨(dú)運(yùn)行,經(jīng)常會(huì)涉及與其他系統(tǒng)對(duì)接、共享數(shù)據(jù)的需求。所以系統(tǒng)需要升級(jí)框架滿足日新月異需求變化,支持業(yè)務(wù)發(fā)展,并將框架升級(jí)為微服務(wù)架構(gòu)?!癆PI網(wǎng)關(guān)”核心組件是架構(gòu)用于滿足此些需求。
很多互聯(lián)網(wǎng)平臺(tái)已基于網(wǎng)關(guān)的設(shè)計(jì)思路,構(gòu)建自身平臺(tái)的API網(wǎng)關(guān),國(guó)內(nèi)主要有京東、攜程、唯品會(huì)等,國(guó)外主要有Netflix、Amazon等。
二、業(yè)界相關(guān)網(wǎng)關(guān)框架
業(yè)界為了滿足這些需求,已有相關(guān)的網(wǎng)關(guān)框架。
1、基于nginx平臺(tái)實(shí)現(xiàn)的網(wǎng)關(guān)有:KONG、API Umbrella
2、自研發(fā)的網(wǎng)關(guān)有:apigee、Zuul
三、API網(wǎng)關(guān)設(shè)計(jì)
API網(wǎng)關(guān)是微服務(wù)架構(gòu)(Microservices Architecture)標(biāo)準(zhǔn)化服務(wù)的模式。API網(wǎng)關(guān)定位為應(yīng)用系統(tǒng)服務(wù)接口的網(wǎng)關(guān),區(qū)別于網(wǎng)絡(luò)技術(shù)的網(wǎng)關(guān),但是原理則是一樣。API網(wǎng)關(guān)統(tǒng)一服務(wù)入口,可方便實(shí)現(xiàn)對(duì)平臺(tái)眾多服務(wù)接口進(jìn)行管控,對(duì)訪問(wèn)服務(wù)的身份認(rèn)證、防報(bào)文重放與防數(shù)據(jù)篡改、功能調(diào)用的業(yè)務(wù)鑒權(quán)、響應(yīng)數(shù)據(jù)的脫敏、流量與并發(fā)控制,甚至基于API調(diào)用的計(jì)量或者計(jì)費(fèi)等等。組件設(shè)計(jì)如下:
圖1- API網(wǎng)關(guān)功能結(jié)構(gòu)示意圖
多種客戶端程序,例如:移動(dòng)APP、PC端和智能終端設(shè)備等??蛻舳顺绦蛲ㄟ^(guò)互聯(lián)網(wǎng)或者專網(wǎng)訪問(wèn)API網(wǎng)關(guān),由API網(wǎng)關(guān)統(tǒng)一接收請(qǐng)求后,通過(guò)一系列模塊定位具體處理的微服務(wù)機(jī),并將其轉(zhuǎn)發(fā)至目標(biāo)服務(wù)處理,網(wǎng)關(guān)與微服務(wù)之間通信是內(nèi)部局域網(wǎng)。API網(wǎng)關(guān)統(tǒng)一規(guī)范平臺(tái)對(duì)外的服務(wù),同時(shí)充當(dāng)了平臺(tái)的PaaS層。如上圖所示,API網(wǎng)關(guān)功能結(jié)構(gòu)基于管道模型和支持可插拔式的設(shè)計(jì)開(kāi)發(fā),提供統(tǒng)一基于http協(xié)議的WebAPI訪問(wèn)接口,內(nèi)部每個(gè)模塊各自實(shí)現(xiàn)功能,包括:黑白名單、日志、協(xié)議適配、身份認(rèn)證、計(jì)流限流及路由。并且依賴“訪問(wèn)認(rèn)證中心、服務(wù)發(fā)布管理中心”分別實(shí)現(xiàn)API網(wǎng)關(guān)訪問(wèn)權(quán)限控制和定位目標(biāo)微服務(wù)。各模塊功能說(shuō)明如下:
1、黑白名單:實(shí)現(xiàn)通過(guò)IP地址控制禁止訪問(wèn)網(wǎng)關(guān)功能,此功能是應(yīng)用層面控制實(shí)現(xiàn),再往前也可以通過(guò)網(wǎng)絡(luò)傳輸方面進(jìn)行控制訪問(wèn)。
2、日志:實(shí)現(xiàn)訪問(wèn)日志的記錄,可用于分析訪問(wèn)、處理性能指標(biāo),同時(shí)將分析結(jié)果支持其他模塊功能應(yīng)用。
3、協(xié)議適配:實(shí)現(xiàn)通信協(xié)議校驗(yàn)、適配轉(zhuǎn)換的功能。
4、身份認(rèn)證:負(fù)責(zé)網(wǎng)關(guān)訪問(wèn)身份認(rèn)證驗(yàn)證,此模塊與“訪問(wèn)認(rèn)證中心”通信,實(shí)際認(rèn)證業(yè)務(wù)邏輯交移“訪問(wèn)認(rèn)證中心”處理。
5、計(jì)流限流:實(shí)現(xiàn)微服務(wù)訪問(wèn)流量計(jì)算,基于流量計(jì)算分析進(jìn)行限流,可以定義多種限流規(guī)則。
6、路由:路由是API網(wǎng)關(guān)很核心的模塊功能,此模塊實(shí)現(xiàn)根據(jù)請(qǐng)求,鎖定目標(biāo)微服務(wù)并將請(qǐng)求進(jìn)行轉(zhuǎn)發(fā)。此模塊需要與“服務(wù)發(fā)布管理中心”通信?!胺?wù)發(fā)布管理中心”實(shí)現(xiàn)微服務(wù)發(fā)布注冊(cè)管理功能,與其通信獲得目標(biāo)微服務(wù)信息。
四、API網(wǎng)關(guān)部署
API網(wǎng)關(guān)是一個(gè)公共基礎(chǔ)組件,無(wú)狀態(tài),可支持多套分布式部署。如下圖所示:
圖2- API網(wǎng)關(guān)部署示意圖
五、API網(wǎng)關(guān)實(shí)現(xiàn)技術(shù)
1、技術(shù):框架整體基于.NET平臺(tái)構(gòu)建,所以API網(wǎng)關(guān)也暫定基于.NET4.6平臺(tái)和ASP.NET WebAPI2.0框架實(shí)現(xiàn)。具體軟件架構(gòu)就用上一篇所介紹的。
2、性能:部署于IIS7.0,1000個(gè)并發(fā)查詢請(qǐng)求,平均響應(yīng)90ms。
可能在IIS7.0和.Net4.6平臺(tái),在大并發(fā)性能處理上會(huì)更不上,后續(xù)將考慮基于.net core進(jìn)行升級(jí)開(kāi)發(fā),并部署于Linux平臺(tái)。
API網(wǎng)關(guān)主要原理是相通,不同平臺(tái)結(jié)合本身平臺(tái)整體框架設(shè)計(jì),可選用不同的技術(shù)實(shí)現(xiàn),目前有些基于Spring MVC、node.js、Erlang技術(shù)進(jìn)行研發(fā)。
六、結(jié)語(yǔ)
以上是對(duì)API網(wǎng)關(guān)概要進(jìn)行設(shè)計(jì),還有其他方面的內(nèi)容此篇文章未討論,例如:安全性、高并發(fā)、擴(kuò)展性等特性設(shè)計(jì),同時(shí)作為平臺(tái)其中一個(gè)組件,也涉及與其他組件一并協(xié)同運(yùn)行。此塊內(nèi)容會(huì)后續(xù)分享。
作者:劉蔡濤
公眾號(hào):【51dotnet】
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。