在當(dāng)前的系統(tǒng)架構(gòu)中熙卡,微服務(wù)架構(gòu)大行其道杖刷,在微服務(wù)架構(gòu)中一個(gè)很重要的組件就是API網(wǎng)關(guān)。
API網(wǎng)關(guān)是一個(gè)服務(wù)器驳癌,是系統(tǒng)的唯一入口滑燃。從面向?qū)ο笤O(shè)計(jì)的角度看,它與外觀(guān)模式類(lèi)似颓鲜。API網(wǎng)關(guān)封裝了系統(tǒng)內(nèi)部架構(gòu)表窘,為每個(gè)客戶(hù)端提供一個(gè)定制的API。它可能還具有其它職責(zé)甜滨,如身份驗(yàn)證乐严、監(jiān)控、負(fù)載均衡衣摩、緩存昂验、請(qǐng)求分片與管理、靜態(tài)響應(yīng)處理艾扮。 --百度
微服務(wù)本身當(dāng)然需要有效的監(jiān)控管理既琴,而API作為微服務(wù)對(duì)外提供的核心能力,同樣需要進(jìn)行細(xì)致泡嘴、高效的管控甫恩。
一個(gè)強(qiáng)大、高效酌予、可靠磺箕、可控的API網(wǎng)關(guān)可以極大的提升對(duì)整個(gè)系統(tǒng)架構(gòu)下的微服務(wù)API的梳理、管控能力抛虫,使得API用的放心松靡,管的舒心。
目前業(yè)界也有多款成熟的API網(wǎng)關(guān)可用:Kong莱褒、Zuul、Traefik涎劈、Spring
Cloud Gateway等等
- Kong
基于Nginx+Lua開(kāi)發(fā)广凸,性能高阅茶,穩(wěn)定,有多個(gè)可用的插件(限流谅海、鑒權(quán)等等)可以開(kāi)箱即用脸哀。
問(wèn)題:只支持Http協(xié)議;二次開(kāi)發(fā)扭吁,自由擴(kuò)展困難撞蜂;提供管理API,缺乏更易用的管控侥袜、配置方式蝌诡。 - Zuul
Netflix開(kāi)源,功能豐富枫吧,使用JAVA開(kāi)發(fā)浦旱,易于二次開(kāi)發(fā);需要運(yùn)行在web容器中九杂,如Tomcat颁湖。
問(wèn)題:缺乏管控,無(wú)法動(dòng)態(tài)配置例隆;依賴(lài)組件較多甥捺;處理Http請(qǐng)求依賴(lài)的是Web容器,性能不如Nginx镀层; - Traefik
Go語(yǔ)言開(kāi)發(fā)镰禾;輕量易用;提供大多數(shù)的功能:服務(wù)路由鹿响,負(fù)載均衡等等羡微;提供WebUI
問(wèn)題:二進(jìn)制文件部署,二次開(kāi)發(fā)難度大惶我;UI更多的是監(jiān)控妈倔,缺乏配置、管理能力绸贡; - Spring Cloud Gateway & Zuul2
開(kāi)發(fā)完善中盯蝴,期待一下。听怕。捧挺。
綜合比較一番后,除了常規(guī)的API網(wǎng)關(guān)應(yīng)有的能力外尿瞭,(我的)理想中的API網(wǎng)關(guān)要有哪些能力呢闽烙?
- 協(xié)議轉(zhuǎn)換
上游服務(wù)多種多樣,雖然現(xiàn)在流行Spring Cloud架構(gòu),直接提供Http協(xié)議的服務(wù)API黑竞,但是毫無(wú)疑問(wèn)捕发,還是后端系統(tǒng)間采用RPC調(diào)用的較多,如果API網(wǎng)關(guān)可以對(duì)此類(lèi)服務(wù)進(jìn)行協(xié)議轉(zhuǎn)換很魂,對(duì)外將其適配為HTTP接口扎酷,對(duì)內(nèi)仍為RPC調(diào)用,這無(wú)疑可以極大的提升系統(tǒng)整體性能遏匆,同時(shí)不用約束上游系統(tǒng)的實(shí)現(xiàn)方式法挨,雙贏(yíng)! - 動(dòng)態(tài)配置
API網(wǎng)關(guān)必然需要和多個(gè)系統(tǒng)打交道幅聘,一些配置工作如:路由映射凡纳,超時(shí)配置,服務(wù)地址喊暖,權(quán)重調(diào)整等等是必不可少的了惫企,動(dòng)態(tài)配置,動(dòng)態(tài)加載陵叽,實(shí)時(shí)生效是一個(gè)提升穩(wěn)定性的有效手段狞尔。 - 管控平臺(tái)
API網(wǎng)關(guān)是一個(gè)承前啟后的重要節(jié)點(diǎn),其管理著大量的來(lái)自不同系統(tǒng)的API巩掺,每時(shí)每刻都會(huì)有大量的請(qǐng)求通過(guò)API網(wǎng)關(guān)到達(dá)不同的上游系統(tǒng)服務(wù)偏序,同樣有大量的響應(yīng)從上游回到API網(wǎng)關(guān),并最終發(fā)送給調(diào)用者胖替,除非所有服務(wù)的API永不出錯(cuò)研儒,否則一個(gè)高效的管控平臺(tái)必不可少!更重要的是不但要監(jiān)控独令,更可以管理端朵!
腦海中的Pampas
腦洞開(kāi)一開(kāi),我需要的API網(wǎng)關(guān)大概應(yīng)該是這個(gè)樣_
造出來(lái)
把想法實(shí)現(xiàn)出來(lái)是一件有意思的事燃箭。
附上github項(xiàng)目地址……
PAMPAS@github
PAMPAS-UI@github
歡迎貢獻(xiàn)Idea和Code