介紹
我們知道在微服務(wù)架構(gòu)風(fēng)格中挚赊,一個大應(yīng)用被拆分成為了多個小的服務(wù)系統(tǒng)提供出來诡壁,這些小的系統(tǒng)他們可以自成體系,也就是說這些小系統(tǒng)可以擁有自己的數(shù)據(jù)庫荠割,框架甚至語言等妹卿,這些小系統(tǒng)通常以提供 Rest Api 風(fēng)格的接口來被 H5, Android, IOS 以及第三方應(yīng)用程序調(diào)用。現(xiàn)在我們的結(jié)構(gòu)就是這個情況蔑鹦。
為什么需要使用API GateWay
現(xiàn)狀:
由圖可以看出夺克,在沒有API網(wǎng)關(guān)作為統(tǒng)一出口的情況下,需要調(diào)用方自己組合各種服務(wù)嚎朽,而且容易讓調(diào)用方感知后端各種服務(wù)的存在铺纽,各個需要各個做很多相同的工作。
加入API Gateway之后:
加入API Gateway之后的作用
一般也會把路由哟忍,安全狡门,限流,緩存锅很,日志其馏,監(jiān)控,重試爆安,熔斷等都放到 API 網(wǎng)關(guān)來做叛复,然后服務(wù)層就完全脫離這些東西,純粹的做業(yè)務(wù)扔仓,也能夠很好的保證業(yè)務(wù)代碼的干凈褐奥,不用關(guān)心安全,壓力等方面的問題翘簇。
由于在我們公司基礎(chǔ)服務(wù)已經(jīng)提供了一個API Gateway 撬码,我們只是基于之前的Api Gateway進行一個補充,使之使用我們的業(yè)務(wù)缘揪,所以我們自己的API Gateway的功能就不需要那么多耍群。
1.路由义桂、重試? 公司的API Gateway已經(jīng)是有了路由找筝,基于域名到IP的路由蹈垢,我們也是要做路由,但是路由是統(tǒng)一我們事業(yè)部的大域名下分發(fā)到規(guī)范的小域名(不做IP袖裕、機器的管理 如下圖)曹抬。這樣可以防止域名泛濫使用,不規(guī)范 (etca急鳄、etcb谤民、etcc ……?這些根本猜不出意義的域名)
除了路由就是一些通用的服務(wù),主要是為了防止模塊服務(wù)提供方陷入繁瑣的邏輯校驗疾宏,安全校驗
2.鑒權(quán): 通過APIGateway對訪問進行統(tǒng)一鑒權(quán)张足,不需要每個應(yīng)用單獨對調(diào)用方進行鑒權(quán),應(yīng)用可以專注業(yè)務(wù)坎藐。
3.限流为牍、熔斷? 在配置路由規(guī)則的時候可以定制化限流、熔斷策略岩馍。
4.日志服務(wù) 對訪問?
5.監(jiān)控??可以根據(jù)唯一請求Id碉咆,監(jiān)控調(diào)用流程,以及調(diào)用的響應(yīng)時間
API Gateway的優(yōu)點和缺點
采用API Gateway也是優(yōu)缺點并存的蛀恩。API Gateway的一個最大好處是封裝應(yīng)用內(nèi)部結(jié)構(gòu)疫铜。相比起來調(diào)用指定的服務(wù),客戶端直接跟gatway交互更簡單點双谆。服務(wù)提供方也能夠減輕繁瑣的安全日志等判斷壳咕。API Gateway也有一些缺點。它是一個高可用的組件顽馋,必須要開發(fā)囱井、部署和管理。還有一個問題趣避,所有的流量都需要通過API Gateway庞呕,所以它可能成為開發(fā)的一個瓶頸。
可選方案:
Zuul:?Netflix Zuul程帕,作為Spring cloud 中的一員住练,作為其中的api gateway,為服務(wù)架構(gòu)提供前置保護作用愁拭。屬于Spring cloud體系中讲逛,所以基于Java, Spring boot 岭埠,可以更好的集成到系統(tǒng)中盏混。
Kong:?Kong 是一個現(xiàn)成 的 api gateway 的解決方案蔚鸥,它在 nginx 上進行了開發(fā)。?
最終結(jié)果
Zuul的性能许赃,單臺機器? 600 tps