接口的分類:
開放接口:可以授權一些接口口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網關適用於請求過濾和攔截等。