集中網(wǎng)關(guān)系列

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)的部署,要盡可能的減少接觸面苍息,確保安全缩幸。


image.png

舉個(gè)例子:
假設(shè)我們以前的微服務(wù)架構(gòu)是這樣的:我們有 customer 模塊、order 模塊竞思、Invoices 模塊表谊,那么,客戶端就不得不去請(qǐng)求 Customers盖喷,然后再到 Orders爆办,然后是 Invoices】问幔客戶端需要去知道怎么去一起來(lái)消費(fèi)這三個(gè)不同的 service距辆。


image.png

那么我們可以將 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ù)需求澈魄。還有一些比較好用的

Tykhttps://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ò)展(如下圖)

image.png

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é)合使用姑子。

image.png

就像上圖中所描述的一樣,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ù):

image.png

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)如下所示:
image.png

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/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末如暖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子忌堂,更是在濱河造成了極大的恐慌盒至,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件士修,死亡現(xiàn)場(chǎng)離奇詭異枷遂,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)棋嘲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)酒唉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人沸移,你說(shuō)我怎么就攤上這事痪伦。” “怎么了雹锣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵网沾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蕊爵,道長(zhǎng)辉哥,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮醋旦,結(jié)果婚禮上恒水,老公的妹妹穿的比我還像新娘。我一直安慰自己饲齐,他們只是感情好钉凌,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著箩张,像睡著了一般甩骏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上先慷,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天饮笛,我揣著相機(jī)與錄音,去河邊找鬼论熙。 笑死福青,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脓诡。 我是一名探鬼主播无午,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼祝谚!你這毒婦竟也來(lái)了宪迟?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤交惯,失蹤者是張志新(化名)和其女友劉穎次泽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體席爽,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡意荤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了只锻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玖像。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖齐饮,靈堂內(nèi)的尸體忽然破棺而出捐寥,到底是詐尸還是另有隱情,我是刑警寧澤沈矿,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布上真,位于F島的核電站,受9級(jí)特大地震影響羹膳,放射性物質(zhì)發(fā)生泄漏睡互。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望就珠。 院中可真熱鬧寇壳,春花似錦、人聲如沸妻怎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)逼侦。三九已至匿辩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間榛丢,已是汗流浹背铲球。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晰赞,地道東北人稼病。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像掖鱼,于是被迫代替她去往敵國(guó)和親然走。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 我們自己的人生要自己做主戏挡,過(guò)我們想過(guò)的人生芍瑞,成為自己的主人。
    青紗挽歌閱讀 329評(píng)論 0 1
  • 我的科室主任是個(gè)風(fēng)風(fēng)火火的人褐墅,來(lái)去總是匆匆忙忙的啄巧。“小G來(lái)幫我做個(gè)事兒掌栅,很緊急÷敕海”“小Y猾封,有人咨詢業(yè)務(wù),趕緊回個(gè)電...
    筱筱宇下閱讀 200評(píng)論 0 0
  • 最近自己看了許多部古龍的武俠小說(shuō)噪珊,主要有小李飛到四部曲晌缘,小李飛刀,九月鷹飛痢站,磷箕,邊城浪子,天涯明月刀阵难,飛刀又...
    指尖的回憶閱讀 846評(píng)論 0 1