微服务技术栈:API网关中心,落地实现方案
本文源碼:GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里
一、服務(wù)網(wǎng)關(guān)簡介
1、外觀模式
客戶端與各個(gè)業(yè)務(wù)子系統(tǒng)的通信必須通過一個(gè)統(tǒng)一的外觀對(duì)象進(jìn)行,外觀模式提供一個(gè)高層次的接口,使得子系統(tǒng)更易于使用:
簡單說一下外觀模式,網(wǎng)關(guān)和這個(gè)模式很像,但是比外觀模式復(fù)雜,模式,結(jié)構(gòu),原則這些都是通用的,在各種架構(gòu)或組件中使用。
2、網(wǎng)關(guān)簡介
微服務(wù)網(wǎng)關(guān)從感覺上,很像是:攔截器+路由+過濾器,攔截請(qǐng)求,系列基礎(chǔ)處理,路由轉(zhuǎn)發(fā)到指定服務(wù)。
服務(wù)網(wǎng)關(guān)在整個(gè)架構(gòu)體系上也是一個(gè)服務(wù)器,作為請(qǐng)求的唯一入口,與外觀模式十分類似,在網(wǎng)關(guān)層處理所有的非業(yè)務(wù)功能,為客戶端提供定制的API,在網(wǎng)關(guān)層通常會(huì)執(zhí)行如下操作:如權(quán)限校驗(yàn)、監(jiān)控、負(fù)載均衡、緩存、日志、限流、等等。
二、網(wǎng)關(guān)模式
1、模式對(duì)比
這里對(duì)比常用的請(qǐng)求服務(wù)管理模式,和網(wǎng)關(guān)模式,如圖:
常規(guī)模式
在沒有網(wǎng)關(guān)的情況下,微服務(wù)架構(gòu)會(huì)在業(yè)務(wù)層服務(wù)上提供一個(gè)API服務(wù),用來接收參數(shù),例如Client-API,通常會(huì)根據(jù)系統(tǒng)模塊劃分多個(gè)API,例如,運(yùn)營系統(tǒng),用戶系統(tǒng)等。
- 請(qǐng)求統(tǒng)一進(jìn)入Client-API服務(wù) ;
- Client-API經(jīng)過鑒權(quán),限流,路由等操作;
- 如果請(qǐng)求通過,會(huì)轉(zhuǎn)發(fā)到相應(yīng)業(yè)務(wù)服務(wù)上;
- 如果請(qǐng)求被攔截,會(huì)直接返回給客戶端;
- Client-API集成所有業(yè)務(wù)服務(wù)的開放接口;
該模式下的缺點(diǎn)非常明顯,每個(gè)Client-API都需要實(shí)現(xiàn)一套非業(yè)務(wù)服務(wù),代碼冗余,當(dāng)系統(tǒng)膨脹之后,維護(hù)成本極高,適用于輕量級(jí)系統(tǒng)架構(gòu)。
網(wǎng)關(guān)模式
在業(yè)務(wù)服務(wù)層上,添加一層網(wǎng)關(guān)控制,在服務(wù)網(wǎng)關(guān)中可以完成一系列的橫切非業(yè)務(wù)功能:
- 客戶端請(qǐng)求在網(wǎng)關(guān)層做統(tǒng)一攔截;
- 網(wǎng)關(guān)上執(zhí)行:路由/鑒權(quán)/限流/降級(jí)等操作;
- 網(wǎng)關(guān)判斷是轉(zhuǎn)發(fā)請(qǐng)求還是直接響應(yīng)客戶端;
網(wǎng)關(guān)服務(wù)層要執(zhí)行很多非業(yè)務(wù)流程,作為系統(tǒng)的服務(wù)端唯一入口,承受所有服務(wù)的路由轉(zhuǎn)發(fā),安全,限流,緩存,日志,監(jiān)控,熔斷降級(jí)等功能,網(wǎng)關(guān)服務(wù)不僅要做到高可用,還要避免出現(xiàn)性能瓶頸。
2、多重網(wǎng)關(guān)
在大型復(fù)雜的系統(tǒng)中,通常會(huì)對(duì)網(wǎng)關(guān)做分層管理,把一類業(yè)務(wù)規(guī)劃到一個(gè)網(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),對(duì)這類服務(wù)的做非業(yè)務(wù)性操作,最后請(qǐng)求轉(zhuǎn)發(fā)到具體服務(wù)上,在數(shù)據(jù)類平臺(tái)上,通常對(duì)數(shù)據(jù)通道(流入流出)做一層獨(dú)立的服務(wù)網(wǎng)關(guān);對(duì)數(shù)據(jù)分析類服務(wù)做一層獨(dú)立網(wǎng)關(guān);基本是根據(jù)服務(wù)的使用情況來劃分,這樣避免單層服務(wù)網(wǎng)關(guān)過于復(fù)雜的情況。
三、核心功能
1、配置層面
服務(wù)發(fā)現(xiàn)
網(wǎng)關(guān)應(yīng)該有服務(wù)發(fā)現(xiàn)功能,通過統(tǒng)一注冊(cè)中心,獲取服務(wù)列表,這樣才能執(zhí)行統(tǒng)一代理服務(wù)和路由轉(zhuǎn)發(fā)功能。
路由請(qǐng)求
植入網(wǎng)關(guān)層服務(wù)之后,客戶端不知道自己請(qǐng)求的是哪個(gè)具體的服務(wù),只需要把請(qǐng)求轉(zhuǎn)發(fā)給網(wǎng)關(guān),網(wǎng)關(guān)放行之后會(huì)把請(qǐng)求路由到指定業(yè)務(wù)服務(wù)上。
負(fù)載均衡
網(wǎng)關(guān)連接的服務(wù)實(shí)例可能是集群模式存在,所以網(wǎng)關(guān)還可以對(duì)各個(gè)服務(wù)實(shí)例上執(zhí)行負(fù)載均衡策略,常見的策略就是服務(wù)輪詢或者按權(quán)重路由。
2、定制開發(fā)
定制開發(fā)例如:權(quán)限校驗(yàn),日志集成,接口限流,等相關(guān)功能,需要和數(shù)據(jù)庫交互,可以做成獨(dú)立服務(wù),在服務(wù)中實(shí)現(xiàn)具體的處理邏輯,網(wǎng)關(guān)層直接調(diào)用即可。
四、網(wǎng)關(guān)組件
1、Netflix-Zuul
Zuul網(wǎng)關(guān)主要提供動(dòng)態(tài)路由,監(jiān)控,彈性,安全管控等功能。在分布式的微服務(wù)系統(tǒng)中,系統(tǒng)被拆為了多個(gè)微服務(wù)模塊,通過zuul網(wǎng)關(guān)對(duì)用戶的請(qǐng)求進(jìn)行路由,轉(zhuǎn)發(fā)到具體的后微服務(wù)模塊中,Netflix開源的一個(gè)基于JVM路由和服務(wù)端的負(fù)載均衡器。
2、Tyk組件
Tyk是一個(gè)開源的、輕量級(jí)的、快速可伸縮的API網(wǎng)關(guān),支持配額和速度限制,支持認(rèn)證和數(shù)據(jù)分析,支持多用戶多組織。基于go語言編寫,在Java架構(gòu)系統(tǒng)中使用很少。
3、Kong組件
Kong是一款基于Nginx+Lua編寫的高可用,可擴(kuò)展的開源網(wǎng)關(guān)項(xiàng)目,由Mashape公司開放。核心是實(shí)現(xiàn)數(shù)據(jù)庫抽象,路由和插件管理,插件可以存在于單獨(dú)的代碼庫中,并且可以在幾行代碼中注入到請(qǐng)求生命周期的任何位置。提供易于使用的RESTfulAPI來操作和配置API管理,并且可以水平擴(kuò)展多個(gè)Kong服務(wù)器,通過前置的負(fù)載均衡配置把請(qǐng)求均勻地分發(fā)到各個(gè)Server,來應(yīng)對(duì)高并發(fā)的網(wǎng)絡(luò)請(qǐng)求。
五、源代碼地址
GitHub·地址 https://github.com/cicadasmile/husky-spring-cloud GitEE·地址 https://gitee.com/cicadasmile/husky-spring-cloud推薦閱讀:微服務(wù)架構(gòu)
| 01 | 微服務(wù)架構(gòu):項(xiàng)目技術(shù)選型簡介,架構(gòu)圖解說明 |
| 02 | 微服務(wù)架構(gòu):業(yè)務(wù)架構(gòu)設(shè)計(jì),系統(tǒng)分層管理 |
| 03 | 微服務(wù)架構(gòu):數(shù)據(jù)庫選型簡介,業(yè)務(wù)數(shù)據(jù)規(guī)劃設(shè)計(jì) |
| 04 | 微服務(wù)架構(gòu):中間件集成,公共服務(wù)封裝 |
| 05 | 微服務(wù)架構(gòu):SpringCloud 基礎(chǔ)組件應(yīng)用設(shè)計(jì) |
| 06 | 微服務(wù)架構(gòu):通過業(yè)務(wù)、應(yīng)用、技術(shù)、存儲(chǔ),聊聊架構(gòu) |
| 07 | 微服務(wù)技術(shù)棧:常見注冊(cè)中心組件,對(duì)比分析 |
| 08 | 微服務(wù)技術(shù)棧:流量整形算法,服務(wù)熔斷與降級(jí) |
總結(jié)
以上是生活随笔為你收集整理的微服务技术栈:API网关中心,落地实现方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XNA2.0 API --- ViewP
- 下一篇: 别跟我说测试的坏话...