APIGateway
在學(xué)習(xí) APIGateway 之前窃祝,首先應(yīng)該清楚一些我們經(jīng)常談?wù)摶蛘咂綍r(shí)使用的技術(shù)概念
1. SOA 與 ESB
關(guān)于 SOA 與 ESB 的概念和它們之間的關(guān)系有不同的版本
SOA ---- 是一種面向服務(wù)架構(gòu)的思想返劲,實(shí)際上強(qiáng)調(diào)的是軟件的一種架構(gòu)露久,一種支撐軟件運(yùn)行的相對(duì)穩(wěn)定的結(jié)構(gòu),它指的不是具體的技術(shù)谜嫉,是一種通過(guò)服務(wù)整合來(lái)解決系統(tǒng)集成的一種策略。有不同的實(shí)現(xiàn)方式。
ESB ---- 企業(yè)服務(wù)總線智润,有一種比較有意思的說(shuō)法,它像一根“聰明”的管道未辆,用來(lái)連接各個(gè)“愚笨”的節(jié)點(diǎn)窟绷。為了集成不同系統(tǒng),不同協(xié)議的服務(wù)咐柜,ESB 做了消息的轉(zhuǎn)換解釋與路由等工作兼蜈,讓不同的服務(wù)互聯(lián)互通。
理解ESB在SOA中的作用:
ESB的確是SOA中一個(gè)非常重要的集成層組件(Integration Layer)炕桨,幾大主流SOA供應(yīng)商饭尝,都將ESB置于SOA架構(gòu)的核心位置。ESB在SOA中扮演著重要的角色献宫,在技術(shù)層解決了SOA的整合問(wèn)題钥平,耦合了應(yīng)用與應(yīng)用之間的集成邏輯,使得SOA更靈活姊途,更易于擴(kuò)展涉瘾,更敏捷。有了ESB捷兰,新建的服務(wù)消費(fèi)者應(yīng)用程序不需要關(guān)心服務(wù)的提供者在哪里立叛,使用何種通訊協(xié)議,與其交互的數(shù)據(jù)是怎樣的……贡茅,它只需向ESB發(fā)出請(qǐng)求秘蛇,使用開(kāi)放的其做、標(biāo)準(zhǔn)的通訊協(xié)議。相反赁还,若某個(gè)可重用的價(jià)值較大的服務(wù)位于某一個(gè)遺留系統(tǒng)中妖泄,而由于種種原因,該遺留系統(tǒng)不能在短期內(nèi)重寫(xiě)艘策,此時(shí)ESB可以架起該服務(wù)與其使用者之間溝通的橋梁蹈胡。當(dāng)然,ESB的作用遠(yuǎn)不止這些朋蔫,業(yè)內(nèi)也有很多討論罚渐。
2. APIGateway
APIGateway,這實(shí)際上微服務(wù)架構(gòu)里面的很重要的內(nèi)容驯妄,其作用類似于傳統(tǒng)企業(yè)內(nèi)部的 ESB 服務(wù)總線荷并,只是更加輕量和高性能來(lái)解決微服務(wù)的管控和治理問(wèn)題。而對(duì)于負(fù)載均衡富玷,緩存璧坟,路由,訪問(wèn)控制赎懦,服務(wù)代理雀鹃,監(jiān)控,日志等都屬于基本的服務(wù)管控內(nèi)容励两,也是 APIGateway 需要考慮的核心能力黎茎。
APIGateway 是一個(gè)服務(wù)器,是調(diào)用服務(wù)的唯一節(jié)點(diǎn)和請(qǐng)求應(yīng)答出入口当悔。API Gateway 封裝內(nèi)部系統(tǒng)的架構(gòu)傅瞻,并且提供 API 給各個(gè)客戶端。通常情況下它還需要實(shí)現(xiàn)其他功能盲憎,如認(rèn)證授權(quán)嗅骄、訪問(wèn)控制、路由饼疙、負(fù)載均衡溺森、緩存、日志窑眯、限流限額屏积、轉(zhuǎn)換、映射磅甩、過(guò)濾炊林、熔斷、注冊(cè)卷要、服務(wù)編排渣聚、API管理独榴、監(jiān)控、統(tǒng)計(jì)分析等等饵逐。
從API網(wǎng)關(guān)的能力來(lái)看括眠,我們可以理解其重要性彪标。一夫當(dāng)關(guān)倍权,萬(wàn)夫莫開(kāi)。API網(wǎng)關(guān)就承擔(dān)這么一個(gè)重要的職責(zé)捞烟。其不但是整個(gè)服務(wù)系統(tǒng)的安全屏障薄声,也承擔(dān)著很多服務(wù)治理的能力。所以實(shí)現(xiàn)或者選擇一個(gè)好的API網(wǎng)關(guān)题画,是建設(shè)容器云和微服務(wù)體系中一個(gè)至關(guān)重要的事項(xiàng)默辨。這也決定了API網(wǎng)關(guān)的部署,要盡可能的減少接觸面苍息,確保安全缩幸。
舉個(gè)例子:
假設(shè)我們以前的微服務(wù)架構(gòu)是這樣的:我們有 customer 模塊、order 模塊竞思、Invoices 模塊表谊,那么,客戶端就不得不去請(qǐng)求 Customers盖喷,然后再到 Orders爆办,然后是 Invoices】问幔客戶端需要去知道怎么去一起來(lái)消費(fèi)這三個(gè)不同的 service距辆。
那么我們可以將 API 網(wǎng)關(guān)放到我們的微服務(wù)們的最前端,并且讓API 網(wǎng)關(guān)變成由應(yīng)用所發(fā)起的每個(gè)請(qǐng)求的入口暮刃。這樣就可以明顯的簡(jiǎn)化客戶端實(shí)現(xiàn)和微服務(wù)應(yīng)用程序之間的溝通方式跨算。使用API網(wǎng)關(guān),我們可以抽象所有這些復(fù)雜性椭懊,并創(chuàng)建客戶端們可以使用的優(yōu)化后的端點(diǎn)诸蚕,并向那些模塊們發(fā)出請(qǐng)求。如果我們假設(shè)客戶(Customers)灾搏,訂單(Orders)和發(fā)票(Invoices)每個(gè)模塊都返回不同的JSON響應(yīng)挫望,并且假設(shè)客戶端想要檢索此信息。有兩種方法狂窑。一種方式是媳板,客戶端向客戶(Customers)模塊發(fā)出 GET 請(qǐng)求以檢索客戶,然后到訂單(Orders)泉哈,然后到指定訂單的發(fā)票(Invoices)蛉幸。第二種方式是我們可以通過(guò)使用API網(wǎng)關(guān)來(lái)抽象此客戶端實(shí)現(xiàn)的復(fù)雜性破讨。然后,API網(wǎng)關(guān)可以公開(kāi)一個(gè)特定的端點(diǎn)奕纫,在這個(gè)端點(diǎn)上將產(chǎn)生請(qǐng)求提陶,然后在[網(wǎng)關(guān)]消費(fèi)了微服務(wù)之后返回給客戶端一個(gè)唯一的響應(yīng)(response)。也就是說(shuō)匹层,比如隙笆,我們可以把很多的 response 折疊成一個(gè),request 也是一個(gè)升筏。
這樣對(duì)我們幫助很大撑柔,而且特別是對(duì)于手機(jī)等其他移動(dòng)客戶端來(lái)說(shuō)特別的受益。這樣就可以加速我們的客戶端的實(shí)現(xiàn)您访。而且可以輕松的做一些替換铅忿。
API網(wǎng)關(guān)讓我們的客戶端不用再需要知道和關(guān)心模塊的地址了。網(wǎng)關(guān)負(fù)責(zé)來(lái)搞這些事情灵汪,你只需要知道網(wǎng)關(guān)就好了檀训。你可以去改變實(shí)現(xiàn)而且還可以改變API接口。不過(guò)通常來(lái)說(shuō)享言,你改變接口后峻凫,會(huì)增加客戶端出問(wèn)題的風(fēng)險(xiǎn)。
使用API網(wǎng)關(guān)后担锤,你可以在單獨(dú)的層上有效地抽象蔚晨,這樣你就可以更改實(shí)現(xiàn)和接口,同時(shí)保持現(xiàn)有客戶端的公共接口相同肛循。這意味著你總是可以做一些調(diào)整的事情铭腕。
此外,APIGateway 還可以實(shí)現(xiàn)一些附加功能多糠,如身份驗(yàn)證累舷、監(jiān)控、負(fù)載均衡夹孔、緩存被盈、報(bào)文轉(zhuǎn)換、藍(lán)綠部署搭伤、金絲雀發(fā)布只怎、斷路器等。
3. APIGateway 產(chǎn)品
越來(lái)越多的企業(yè)采用微服務(wù)怜俐,越來(lái)越多的人認(rèn)識(shí)到微服務(wù)API網(wǎng)關(guān)的重要性身堡,API網(wǎng)關(guān)的發(fā)展和完善也越來(lái)越好。很多開(kāi)源的產(chǎn)品功能也很強(qiáng)大拍鲤,足以滿足大部分企業(yè)的部署需求贴谎」基于這些開(kāi)源產(chǎn)品,可以定制擴(kuò)展一些功能擅这,更好的滿足業(yè)務(wù)需求澈魄。還有一些比較好用的
Tyk(https://tyk.io/)是一個(gè)開(kāi)放源碼的API網(wǎng)關(guān)、面板和API管理平臺(tái)仲翎,由Tyk公司開(kāi)發(fā)和支持痹扇。Try 是一個(gè)基于Go實(shí)現(xiàn)的網(wǎng)關(guān)服務(wù)。包括Tyk API Gateway,Tyk Dashboard, Tyk Developer Portal, Tyk Pump, Tyk Identity Broker等組件谭确。Tyk開(kāi)源 API Gateway 對(duì)實(shí)際上的請(qǐng)求管理做了重大的提升:路由帘营、訪問(wèn)控制、數(shù)據(jù)轉(zhuǎn)換逐哈、日志等等。Tyk 可以完全獨(dú)立運(yùn)行问顷,只需要有效的 Redis 數(shù)據(jù)庫(kù)昂秃,可以橫向擴(kuò)展(如下圖)
Kong(https://getkong.org/)是一款基于Nginx_Lua模塊寫(xiě)的高可用,易擴(kuò)展的開(kāi)源的 API Gateway 項(xiàng)目杜窄。Kong 在任何RESTful API的前面運(yùn)行肠骆,通過(guò)插件擴(kuò)展,它提供了超越核心平臺(tái)的額外功能和服務(wù)塞耕。由于 Kong 是基于 Nginx 的蚀腿,所以可以水平擴(kuò)展多個(gè) Kong 服務(wù)器,通過(guò)前置的負(fù)載均衡配置把請(qǐng)求均勻地分發(fā)到各個(gè) Server扫外,來(lái)應(yīng)對(duì)大批量的網(wǎng)絡(luò)請(qǐng)求莉钙。
Kong主要有三個(gè)組件:
- Kong Server :基于nginx的服務(wù)器,用來(lái)接收 API 請(qǐng)求筛谚。
- Apache Cassandra/PostgreSQL :用來(lái)存儲(chǔ)操作數(shù)據(jù)磁玉。Cassandra 是最終一致的數(shù)據(jù)庫(kù)。 這意味著如果你有一個(gè)由多個(gè)節(jié)點(diǎn)組成的 Cassandra 集群驾讲,你存儲(chǔ)數(shù)據(jù)的話蚊伞,則最終該數(shù)據(jù)將傳播到所有其他節(jié)點(diǎn) – 但不是同時(shí)[或“立即”]到達(dá)每個(gè)節(jié)點(diǎn)。
- Kong dashboard:官方推薦UI管理工具吮铭,當(dāng)然时迫,也可以使用 restfull 方式 管理admin api。
Kong 采用插件機(jī)制進(jìn)行功能定制谓晌,插件集(可以是0或n個(gè))在API請(qǐng)求響應(yīng)循環(huán)的生命周期中被執(zhí)行掠拳。插件使用 Lua 編寫(xiě),目前已有幾個(gè)基礎(chǔ)功能:HTTP 基本認(rèn)證扎谎、密鑰認(rèn)證碳想、CORS( Cross-origin Resource Sharing烧董,跨域資源共享)、TCP胧奔、UDP逊移、文件日志、API 請(qǐng)求限流龙填、請(qǐng)求轉(zhuǎn)發(fā)以及 nginx 監(jiān)控胳泉。
Zuul 是 Netflix 出品的一個(gè)基于JVM 路由和服務(wù)端的負(fù)載均衡器。它的主要功能有:認(rèn)證岩遗、動(dòng)態(tài)路由扇商、監(jiān)視、彈性宿礁、壓力測(cè)試案铺、金絲雀測(cè)試、負(fù)載削減梆靖、安全控汉、靜態(tài)響應(yīng)處理和主動(dòng)/主動(dòng)交換管理。被用來(lái)作為上 Spring Cloud 的 API 網(wǎng)關(guān)組件返吻,可以和 spring cloud 的各個(gè)組件結(jié)合使用姑子。
就像上圖中所描述的一樣,Zuul 提供了四種過(guò)濾器的 API测僵,分別為前置(Pre)街佑、后置(Post)、路由(Route)和錯(cuò)誤(Error)四種處理方式捍靠。
一個(gè)請(qǐng)求會(huì)先按順序通過(guò)所有的前置過(guò)濾器沐旨,之后在路由過(guò)濾器中轉(zhuǎn)發(fā)給后端應(yīng)用,得到響應(yīng)后又會(huì)通過(guò)所有的后置過(guò)濾器剂公,最后響應(yīng)給客戶端希俩。在整個(gè)流程中如果發(fā)生了異常則會(huì)跳轉(zhuǎn)到錯(cuò)誤過(guò)濾器中。
一般來(lái)說(shuō)纲辽,如果需要在請(qǐng)求到達(dá)后端應(yīng)用前就進(jìn)行處理的話颜武,會(huì)選擇前置過(guò)濾器,例如鑒權(quán)拖吼、請(qǐng)求轉(zhuǎn)發(fā)鳞上、增加請(qǐng)求參數(shù)等行為。在請(qǐng)求完成后需要處理的操作放在后置過(guò)濾器中完成吊档,例如統(tǒng)計(jì)返回值和調(diào)用時(shí)間篙议、記錄日志、增加跨域頭等行為。路由過(guò)濾器一般只需要選擇 Zuul 中內(nèi)置的即可鬼贱,錯(cuò)誤過(guò)濾器一般只需要一個(gè)移怯,這樣可以在 Gateway 遇到錯(cuò)誤邏輯時(shí)直接拋出異常中斷流程,并直接統(tǒng)一處理返回結(jié)果这难。
還有兩個(gè)可以提供 API 網(wǎng)關(guān)的產(chǎn)品:
axway
axway API Gateway 服務(wù)可以管理舟误,交付和保護(hù)企業(yè) API、應(yīng)用程序和消費(fèi)者姻乓。 以下概述圖顯示了左側(cè)API網(wǎng)關(guān)支持的傳輸和協(xié)議范圍嵌溢,以及它在右側(cè)提供的服務(wù):
Axway API Gateway 支持的主要服務(wù):
1)API轉(zhuǎn)換
2)API 控制和治理
3)API 安全性
4)API 監(jiān)控
5)API 開(kāi)發(fā)生命周期
6)API 管理
API Gateway 為 API 提供應(yīng)用程序服務(wù)器為應(yīng)用程序所做的工作。 此 API網(wǎng)關(guān)角色作為核心應(yīng)用程序基礎(chǔ)結(jié)構(gòu)如下所示:
API 網(wǎng)關(guān)可以看作是 API 運(yùn)行時(shí)環(huán)境蹋岩,它提供以下核心服務(wù):
1)安全性(例如赖草,身份驗(yàn)證和授權(quán))
2)與一系列不同協(xié)議的連接
3)虛擬化
4)可擴(kuò)展性和彈性
5)高可用性
6)可管理性(例如,使用API??網(wǎng)關(guān)管理器)
7)容易部署
由于 API 網(wǎng)關(guān)提供此核心API基礎(chǔ)結(jié)構(gòu)剪个,因此開(kāi)發(fā)人員可以專注于提供應(yīng)用程序邏輯秧骑。他們不再需要將這些服務(wù)構(gòu)建到他們的應(yīng)用程序中,并且可以利用 API 網(wǎng)關(guān)提供的核心基礎(chǔ)結(jié)構(gòu)禁偎。API Gateway 將 API 視為第一類工件腿堤,具有自己的特定構(gòu)造和自己的運(yùn)行時(shí)環(huán)境。
MuleSoft
https://www.cnblogs.com/Leo_wl/p/3417948.html
http://cloud.idcquan.com/yjs/148607.shtml
http://blog.didispace.com/hzf-ms-apigateway-1/
https://www.scienjus.com/api-gateway-and-netflix-zuul/