十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要介紹spring cloud中API網(wǎng)關(guān)的示例分析,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了修水免費(fèi)建站歡迎大家使用!
客戶端與各個業(yè)務(wù)子系統(tǒng)的通信必須通過一個統(tǒng)一的外觀對象進(jìn)行,外觀模式提供一個高層次的接口,使得子系統(tǒng)更易于使用:
簡單說一下外觀模式,網(wǎng)關(guān)和這個模式很像,但是比外觀模式復(fù)雜,模式,結(jié)構(gòu),原則這些都是通用的,在各種架構(gòu)或組件中使用。
微服務(wù)網(wǎng)關(guān)從感覺上,很像是:攔截器+路由+過濾器,攔截請求,系列基礎(chǔ)處理,路由轉(zhuǎn)發(fā)到指定服務(wù)。
服務(wù)網(wǎng)關(guān)在整個架構(gòu)體系上也是一個服務(wù)器,作為請求的唯一入口,與外觀模式十分類似,在網(wǎng)關(guān)層處理所有的非業(yè)務(wù)功能,為客戶端提供定制的API,在網(wǎng)關(guān)層通常會執(zhí)行如下操作:如權(quán)限校驗(yàn)、監(jiān)控、負(fù)載均衡、緩存、日志、限流、等等。
這里對比常用的請求服務(wù)管理模式,和網(wǎng)關(guān)模式,如圖:
常規(guī)模式
在沒有網(wǎng)關(guān)的情況下,微服務(wù)架構(gòu)會在業(yè)務(wù)層服務(wù)上提供一個API服務(wù),用來接收參數(shù),例如Client-API,通常會根據(jù)系統(tǒng)模塊劃分多個API,例如,運(yùn)營系統(tǒng),用戶系統(tǒng)等。
請求統(tǒng)一進(jìn)入Client-API服務(wù) ;
Client-API經(jīng)過鑒權(quán),限流,路由等操作;
如果請求通過,會轉(zhuǎn)發(fā)到相應(yīng)業(yè)務(wù)服務(wù)上;
如果請求被攔截,會直接返回給客戶端;
Client-API集成所有業(yè)務(wù)服務(wù)的開放接口;
該模式下的缺點(diǎn)非常明顯,每個Client-API都需要實(shí)現(xiàn)一套非業(yè)務(wù)服務(wù),代碼冗余,當(dāng)系統(tǒng)膨脹之后,維護(hù)成本極高,適用于輕量級系統(tǒng)架構(gòu)。
網(wǎng)關(guān)模式
在業(yè)務(wù)服務(wù)層上,添加一層網(wǎng)關(guān)控制,在服務(wù)網(wǎng)關(guān)中可以完成一系列的橫切非業(yè)務(wù)功能:
客戶端請求在網(wǎng)關(guān)層做統(tǒng)一攔截;
網(wǎng)關(guān)上執(zhí)行:路由/鑒權(quán)/限流/降級等操作;
網(wǎng)關(guān)判斷是轉(zhuǎn)發(fā)請求還是直接響應(yīng)客戶端;
網(wǎng)關(guān)服務(wù)層要執(zhí)行很多非業(yè)務(wù)流程,作為系統(tǒng)的服務(wù)端唯一入口,承受所有服務(wù)的路由轉(zhuǎn)發(fā),安全,限流,緩存,日志,監(jiān)控,熔斷降級等功能,網(wǎng)關(guān)服務(wù)不僅要做到高可用,還要避免出現(xiàn)性能瓶頸。
在大型復(fù)雜的系統(tǒng)中,通常會對網(wǎng)關(guān)做分層管理,把一類業(yè)務(wù)規(guī)劃到一個網(wǎng)關(guān)下,避免網(wǎng)關(guān)過于臃腫,方便維護(hù)和管理:
總網(wǎng)關(guān):通用常用來做路由轉(zhuǎn)發(fā)功能;
模塊網(wǎng)關(guān):分類的業(yè)務(wù)服務(wù)聚合網(wǎng)關(guān),對這類服務(wù)的做非業(yè)務(wù)性操作,最后請求轉(zhuǎn)發(fā)到具體服務(wù)上,在數(shù)據(jù)類平臺上,通常對數(shù)據(jù)通道(流入流出)做一層獨(dú)立的服務(wù)網(wǎng)關(guān);對數(shù)據(jù)分析類服務(wù)做一層獨(dú)立網(wǎng)關(guān);基本是根據(jù)服務(wù)的使用情況來劃分,這樣避免單層服務(wù)網(wǎng)關(guān)過于復(fù)雜的情況。
服務(wù)發(fā)現(xiàn)
網(wǎng)關(guān)應(yīng)該有服務(wù)發(fā)現(xiàn)功能,通過統(tǒng)一注冊中心,獲取服務(wù)列表,這樣才能執(zhí)行統(tǒng)一代理服務(wù)和路由轉(zhuǎn)發(fā)功能。
路由請求
植入網(wǎng)關(guān)層服務(wù)之后,客戶端不知道自己請求的是哪個具體的服務(wù),只需要把請求轉(zhuǎn)發(fā)給網(wǎng)關(guān),網(wǎng)關(guān)放行之后會把請求路由到指定業(yè)務(wù)服務(wù)上。
負(fù)載均衡
網(wǎng)關(guān)連接的服務(wù)實(shí)例可能是集群模式存在,所以網(wǎng)關(guān)還可以對各個服務(wù)實(shí)例上執(zhí)行負(fù)載均衡策略,常見的策略就是服務(wù)輪詢或者按權(quán)重路由。
定制開發(fā)例如:權(quán)限校驗(yàn),日志集成,接口限流,等相關(guān)功能,需要和數(shù)據(jù)庫交互,可以做成獨(dú)立服務(wù),在服務(wù)中實(shí)現(xiàn)具體的處理邏輯,網(wǎng)關(guān)層直接調(diào)用即可。
Zuul網(wǎng)關(guān)主要提供動態(tài)路由,監(jiān)控,彈性,安全管控等功能。在分布式的微服務(wù)系統(tǒng)中,系統(tǒng)被拆為了多個微服務(wù)模塊,通過zuul網(wǎng)關(guān)對用戶的請求進(jìn)行路由,轉(zhuǎn)發(fā)到具體的后微服務(wù)模塊中,Netflix開源的一個基于JVM路由和服務(wù)端的負(fù)載均衡器。
Tyk是一個開源的、輕量級的、快速可伸縮的API網(wǎng)關(guān),支持配額和速度限制,支持認(rèn)證和數(shù)據(jù)分析,支持多用戶多組織。基于go語言編寫,在Java架構(gòu)系統(tǒng)中使用很少。
Kong是一款基于Nginx+Lua編寫的高可用,可擴(kuò)展的開源網(wǎng)關(guān)項目,由Mashape公司開放。核心是實(shí)現(xiàn)數(shù)據(jù)庫抽象,路由和插件管理,插件可以存在于單獨(dú)的代碼庫中,并且可以在幾行代碼中注入到請求生命周期的任何位置。提供易于使用的RESTfulAPI來操作和配置API管理,并且可以水平擴(kuò)展多個Kong服務(wù)器,通過前置的負(fù)載均衡配置把請求均勻地分發(fā)到各個Server,來應(yīng)對高并發(fā)的網(wǎng)絡(luò)請求。
以上是“spring cloud中API網(wǎng)關(guān)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!