一、API網關的用處
API網關一般會用到以下三種場景上。
Open API
企業需要将自身資料、能力等作為開發平台向外開放,通常會以rest的方式向外提供,最好的例子就是淘寶開放平台、騰訊公司的QQ開發平台、微信開放平台。
Open API開放平台必然涉及到客戶應用的接入、API權限的管理、調用次數管理等,必然會有一個統一的入口進行管理,這正是API網關可以發揮作用的時候。
微服務網關
微服務的概念最早在2012年提出,在Martin Fowler的大力推廣下,微服務在2014年後得到了大力發展。在微服務架構中,有一個元件可以說是必不可少的,那就是微服務網關,微服務網關處理了負載均衡,緩存,路由,通路控制,服務代理,監控,日志等。API網關在微服務架構中正是以微服務網關的身份存在。
API服務管理平台
上述的微服務架構對企業來說有可能實施上是困難的,企業有很多遺留系統,要全部抽取為微伺服器改動太大,對企業來說成本太高。但是由于不同系統間存在大量的API服務互相調用,是以需要對系統間服務調用進行管理,清晰地看到各系統調用關系,對系統間調用進行監控等。
API網關可以解決這些問題,我們可以認為如果沒有大規模的實施微服務架構,那麼對企業來說微服務網關就是企業的API服務管理平台。
二、API網關在企業整體架構中的地位
一個企業随着資訊系統複雜度的提高,必然出現外部合作夥伴應用、企業自身的公網應用、企業内網應用等,在架構上應該将這三種應用差別開,三種應用的安排級别、通路方式也不一樣。
是以在我的設計中将這三種應用分别用不同的網關進行API管理,分别是:API網關(OpenAPI合夥夥伴應用)、API網關(内部應用)、API網關(内部公網應用)。
三、企業中在如何應用API網關
1、對于OpenAPI使用的API網關來說,一般合作夥伴要以應用的形式接入到OpenAPI平台,合作夥伴需要到 OpenAPI平台申請應用。
是以在OpenAPI網關之外,需要有一個面向合作夥伴的使用的平台用于合作夥伴,這就要求OpenAPI網關需要提供API給這個使用者平台進行通路。
如下架構:
當然如果是在簡單的場景下,可能并不需要提供一個面向合作夥伴的門戶,隻需要由公司的營運人員直接添加合作夥伴應用id/密鑰等,這種情況下也就不需要合作夥伴門戶子系統。
2、對于内網的API網關,在起到的作用上來說可以認為是微服務網關,也可以認為是内網的API服務治理平台。當企業将所有的應用使用微服務的架構管理起來,那麼API網關就起到了微服務網關的作用。
而當企業隻是将系統與系統之間的調用使用rest api的方式進行通路時使用API網關對調用進行管理,那麼API網關起到的就是API服務治理的作用。
架構參考如下:
3、對于公司内部公網應用(如APP、公司的網站),如果管理上比較細緻,在架構上是可能由獨立的API網關來處理這部分内部公網應用,如果想比較簡單的處理,也可以是使用面向合作夥伴的API網關。
如果使用獨立的API網關,有以下的好處:
- 面向合作夥伴和面向公司主體業務的優先級不一樣,不同的API網關可以做到業務影響的隔離。
- 内部API使用的管理流程和面向合作夥伴的管理流程可能不一樣。
- 内部的API在功能擴充等方面的需求一般會大于OpenAPI對于功能的要求。
基于以上的分析,如果公司有能力,那麼還是建議分開使用合作夥伴OPEN API網關和内部公網應用網關。
四、API網關有哪些競争方案
1、對于Open API平台的API網關,我分析隻能選擇API網關作為解決方案,業界沒有發現比較好的可以用來作為Open API平台的入口的其他方案。
2、對于作為微服務網關的API網關,業界的選擇可以選擇的解決方案比較多,也取決于微伺服器的實作方案,有一些微服務架構的實作方案是不需要微服務網關的。
Service Mesh,這是新興的基于無API網關的架構,通過在用戶端上的代理完成屏蔽網絡層的通路,這樣達到對應用層最小的改動,目前Service Mesh的産品還正在開發中,并沒有非常成熟可直接應用的産品。發展最迅速的産品是Istio。建議大家密切關注相關産品的研發、業務使用進展。
基于duboo架構,在這個架構中通常是不需要網關的,是由用戶端直接通路服務提供方,由注冊中心向用戶端傳回服務方的位址。
五、API網關解決方案
私有雲開源解決方案如下:
- Kong kong是基于Nginx+Lua進行二次開發的方案, https://konghq.com/
- Netflix Zuul,zuul是spring cloud的一個推薦元件,https://github.com/Netflix/zuul
- orange,這個開源程式是國人開發的, http://orange.sumory.com/
公有雲解決方案:
- Amazon API Gateway,https://aws.amazon.com/cn/api-gateway/
- 阿裡雲API網關,https://www.aliyun.com/product/apigateway/
- 騰訊雲API網關, https://cloud.tencent.com/product/apigateway
自開發解決方案:
- 基于Nginx+Lua+ OpenResty的方案,可以看到Kong,orange都是基于這個方案
- 基于Netty、非阻塞IO模型。通過網上搜尋可以看到國内的宜人貸等一些公司是基于這種方案,是一種成熟的方案。
- 基于Node.js的方案。這種方案是應用了Node.js天生的非阻塞的特性。
- 基于java Servlet的方案。zuul基于的就是這種方案,這種方案的效率不高,這也是zuul總是被诟病的原因。
六、企業怎麼選擇API網關
如果是要選擇一款已有的API網關,那麼需要從以下幾個方面去考慮。
1、性能與可用性
如果一旦采用了API網關,那麼API網關就會作為企業應用核心,是以性能和可用性是必須要求的。
從性能上來說,需要讓網關增加的時間消耗越短越好,個人覺得需要10ms以下。系統需要采用非阻塞的IO,如epoll,NIO等。網關和各種依賴的互動也需要是非阻塞的,這樣才能保證整體系統的高可用性,如:Node.js的響應式程式設計和基于java展現的RxJava和Future。
網關必須支援叢集部署,任務一台伺服器的crash都應該不影響整體系統的可用性。
多套網關應該支援同一管理平台和同一監控中心。如:一個企業的OpenAPI網關和内部應用的多個系統群的不同的微服務網關可以在同一監控中心進行監控。
2、可擴充性、可維護性
一款産品總有不能滿足生産需求的地方,是以需求思考産品在如何進行二次開發和維護,是否友善公司團隊接手維護産品。
3、需求比對度
需要評估各API網關在需求上是否能滿足,如:如果是OpenAPI平台需要使用API網關,那麼需要看API網關在合作夥伴應用接入、合作夥伴門戶內建、通路次數限額等OpenAPI核心需求上去思考産品是否能滿足要求。如果是微服務網關,那麼要從微服務的運維、監控、管理等方面去思考産品是否足夠強大。
4、是否開源?公司是否有自開發的能力?
現有的開源産品如kong,zuul,orange都有基礎的API網關的核心功能,這些開源産品大多離很好的使用有一定的距離,如:沒有提供管理功能的UI界面、監控功能弱小,不支援OpenAPI平台,沒有公司營運與運維的功能等。當然開源産品能擷取源代碼,如果公司有比較強的研發能力,能hold住這些開源産品,經過二次開發kong、zuul應該還是适應一些公司,不過需求注意以下一些點:
- kong是基于ngnix+lua的,從公司的角度比較難于找到能去維護這種架構産品的人。需求評估目前公司是否有這個能力去維護這個産品。
- zuul因為架構的原因在高并發的情況下性能不高,同時需要去基于研究整合開源的适配zuul的監控和管理系統。
- orange由于沒有被大量使用,同時是國内個人在開源,在可持續性和社群資源上不夠豐富,出了問題後可能不容易找到人問。
另外kong提供企業版本的API網關,當然也是基于ngnix+lua的,企業版本可以購買他們的技術支援、教育訓練等服務、以及擁有界面的管理、監控等功能。
5、公有雲還是私有雲
現在的亞馬遜、阿裡、騰訊雲都在提供基礎公有雲的API網關,當然這些網關的基礎功能肯定是沒有問題,但是二次開發,擴充功能、監控功能可能就不能滿足部分使用者的定制需求了。另外很多企業因為自身資訊安全的原因,不能使用外網公有網的API網關服務,這樣就隻有選擇私有雲的方案了。
在需求上如果基于公有雲的API網關隻能做到由内部人員為外網人員申請應用,無法做到定制的合作夥伴門戶,這也不适合于部分企業的需求。
如果作為微服務網關,大多數情況下是希望網關伺服器和服務提供方伺服器是要在内網的,在這裡情況下也隻有私有雲的API網關才能滿足需求。