1. 程式人生 > >Spring Cloud之閘道器

Spring Cloud之閘道器

介面的分類: 

 開放介面:可以授權一些介面口OAuth2.0協議方式  第三方聯合登入

 內部介面:  一般只能在區域網中進行訪問,服務與服務之間關係都在同一個微服務系統中。目的是為了保證安全問題

 

介面設計:

  介面許可權 開放 or  內部

  冪等性

  安全性  https

  防止篡改資料(驗證簽名)

  閘道器攔截介面實現黑白名單

  遵循restFul風格 http+json  為了跨平臺 

  考慮高併發 對介面服務實現服務降級 熔斷 隔離 

  

最後使用同一的API管理平臺 swagger

 

閘道器概念:

  相當於客戶端請求同一先請求到閘道器伺服器上,再由閘道器伺服器進行轉發到實際伺服器地址 類似 Nginx

 

 

過濾器和閘道器的區別?

  過濾適合於攔截單個Tomcat伺服器進行攔截請求

  閘道器是攔整個微服務請求

 

Nginx與Zuul區別

 相同點:

  都可以實現負載均衡 反向代理 過濾請求  實現閘道器效果  

 

不同: Nginx  C語言    Zuul Java

 

 

Zuul負載均衡實現:採用ribbon+eureka實現本地負載均衡

Nginx負載均衡實現: 伺服器端實現負負載均衡

 

Nginx比Zuul功能更強大,Nginx整合一些指令碼語言(Nginx+Lua)

Nginx適合於伺服器端負載均衡 也可以實現閘道器

 

Zuul適合微服務閘道器。使用Java就可以開發

建議Nginx+zuul實現閘道器    Nginx實現反向代理  zuul對微服務實現閘道器攔截

 

閘道器分類

開放Api

開放api(openApi) 企業需要將自身資料、能力等作為開發平臺向外開放,通常會以rest的方式向外提供,最好的例子就是淘寶開放平臺、騰訊公司的QQ開發平臺、微信開放平臺。 Open API開放平臺必然涉及到客戶應用的接入、API許可權的管理、呼叫次數管理等,必然會有一個統一的入口進行管理,這正是API閘道器可以發揮作用的時候。

微服務閘道器

 

微服務的概念最早在2012年提出,在Martin Fowler的大力推廣下,微服務在2014年後得到了大力發展。 在微服務架構中,有一個元件可以說是必不可少的,那就是微服務閘道器,微服務閘道器處理了負載均衡,快取,路由,訪問控制,服務代理,監控,日誌等。API閘道器在微服務架構中正是以微服務閘道器的身份存在。

 

 

API服務管理平臺

上述的微服務架構對企業來說有可能實施上是困難的,企業有很多遺留系統,要全部抽取為微伺服器改動太大,對企業來說成本太高。但是由於不同系統間存在大量的API服務互相呼叫,因此需要對系統間服務呼叫進行管理,清晰地看到各系統呼叫關係,對系統間呼叫進行監控等。 API閘道器可以解決這些問題,我們可以認為如果沒有大規模的實施微服務架構,那麼對企業來說微服務閘道器就是企業的API服務管理平臺。

 

閘道器設計

 

開放API介面

1、對於OpenAPI使用的API閘道器來說,一般合作伙伴要以應用的形式接入到OpenAPI平臺,合作伙伴需要到 OpenAPI平臺申請應用。 因此在OpenAPI閘道器之外,需要有一個面向合作伙伴的使用的平臺用於合作伙伴,這就要求OpenAPI閘道器需要提供API給這個使用者平臺進行訪問。 如下架構:

 

 

 

 

 

當然如果是在簡單的場景下,可能並不需要提供一個面向合作伙伴的門戶,只需要由公司的運營人員直接新增合作伙伴應用id/金鑰等,這種情況下也就不需要合作伙伴門戶子系統。 

 

內網API介面

對於內網的API閘道器,在起到的作用上來說可以認為是微服務閘道器,也可以認為是內網的API服務治理平臺。 當企業將所有的應用使用微服務的架構管理起來,那麼API閘道器就起到了微服務閘道器的作用。 而當企業只是將系統與系統之間的呼叫使用rest api的方式進行訪問時使用API閘道器對呼叫進行管理,那麼API閘道器起到的就是API服務治理的作用。 架構參考如下:

 

 

 

3、對於公司內部公網應用(如APP、公司的網站),如果管理上比較細緻,在架構上是可能由獨立的API閘道器來處理這部分內部公網應用,如果想比較簡單的處理,也可以是使用面向合作伙伴的API閘道器。 如果使用獨立的API閘道器,有以下的好處:

面向合作伙伴和麵向公司主體業務的優先順序不一樣,不同的API閘道器可以做到業務影響的隔離。

內部API使用的管理流程和麵向合作伙伴的管理流程可能不一樣。

內部的API在功能擴充套件等方面的需求一般會大於OpenAPI對於功能的要求。

基於以上的分析,如果公司有能力,那麼還是建議分開使用合作伙伴OPEN API閘道器和內部公網應用閘道器。

 

 

閘道器框架

 

Kong kong是基於Nginx+Lua進行二次開發的方案, https://konghq.com/

Netflix Zuul,zuul是spring cloud的一個推薦元件,https://github.com/Netflix/zuul

orange,這個開源程式是國人開發的, http://orange.sumory.com/

閘道器作用

 

閘道器的作用,可以實現負載均衡、路由轉發、日誌、許可權控制、監控等。

閘道器與過濾器區別

 

閘道器是攔截所有伺服器請求進行控制

過濾器攔截某單個伺服器請求進行控制

 

Nginx與Zuul的區別

Nginx是採用伺服器負載均衡進行轉發

Zuul依賴Ribbon和eureka實現本地負載均衡轉發

相對來說Nginx功能比Zuul功能更加強大,能夠整合其他語言比如lua指令碼實現強大的功能,同時Nginx可以更好的抗高併發,Zuul閘道器適用於請求過濾和攔截等。