Java技術(shù)棧
www.javastack.cn
關(guān)注閱讀更多優(yōu)質(zhì)文章
來源:cnblogs.com/coolfiry/p/8193768.htmlAPI網(wǎng)關(guān)我的分析中會用到以下三種場景。企業(yè)需要將自身數(shù)據(jù)、能力等作為開發(fā)平臺向外開放,通常會以rest的方式向外提供。最好的例子就是淘寶開放平臺、騰訊公司的QQ開發(fā)平臺、微信開放平臺。
Open API開放平臺必然涉及到客戶應(yīng)用的接入、API權(quán)限的管理、調(diào)用次數(shù)管理等,必然會有一個統(tǒng)一的入口進行管理,這正是API網(wǎng)關(guān)可以發(fā)揮作用的時候。微服務(wù)的概念最早在2012年提出,在Martin Fowler的大力推廣下,微服務(wù)在2014年后得到了大力發(fā)展。
在微服務(wù)架構(gòu)中,有一個組件可以說是必不可少的,那就是微服務(wù)網(wǎng)關(guān),微服務(wù)網(wǎng)關(guān)處理了負載均衡,緩存,路由,訪問控制,服務(wù)代理,監(jiān)控,日志等。上述的微服務(wù)架構(gòu)對企業(yè)來說有可能實施上是困難的,企業(yè)有很多遺留系統(tǒng),要全部抽取為微服務(wù)改動太大,對企業(yè)來說成本太高。但是由于不同系統(tǒng)間存在大量的API服務(wù)互相調(diào)用,因此需要對系統(tǒng)間服務(wù)調(diào)用進行管理,清晰地看到各系統(tǒng)調(diào)用關(guān)系,對系統(tǒng)間調(diào)用進行監(jiān)控等。API網(wǎng)關(guān)可以解決這些問題,我們可以認為如果沒有大規(guī)模的實施微服務(wù)架構(gòu),那么對企業(yè)來說微服務(wù)網(wǎng)關(guān)就是企業(yè)的API服務(wù)管理平臺。二、API網(wǎng)關(guān)在企業(yè)架構(gòu)中的地位三、企業(yè)中如何應(yīng)用API網(wǎng)關(guān)3、對于公司內(nèi)部公網(wǎng)應(yīng)用(如APP、公司的網(wǎng)站),如果管理上比較細致,在架構(gòu)上可能由獨立的API網(wǎng)關(guān)來處理這部分內(nèi)部公網(wǎng)應(yīng)用如果想比較簡單的處理,也可以是使用面向合作伙伴的API網(wǎng)關(guān)。如果使用獨立的API網(wǎng)關(guān),有以下的好處:基于以上的分析,如果公司有能力,那么還是建議分開使用合作伙伴OPEN API網(wǎng)關(guān)和內(nèi)部公網(wǎng)應(yīng)用網(wǎng)關(guān)。關(guān)注公眾號Java技術(shù)棧獲取更多微服務(wù)系列教程。四、API網(wǎng)關(guān)有哪些競爭方案1、對于Open API平臺的API網(wǎng)關(guān),我分析只能選擇API網(wǎng)關(guān)作為解決方案.業(yè)界沒有發(fā)現(xiàn)比較好的可以用來作為Open API平臺的入口的其他方案。2、對于作為微服務(wù)網(wǎng)關(guān)的API網(wǎng)關(guān),業(yè)界的選擇可以選擇的解決方案比較多,也取決于微服務(wù)器的實現(xiàn)方案,有一些微服務(wù)架構(gòu)的實現(xiàn)方案是不需要微服務(wù)網(wǎng)關(guān)的。這是新興的基于無API網(wǎng)關(guān)的架構(gòu),通過在客戶端上的代理完成屏蔽網(wǎng)絡(luò)層的訪問,這樣達到對應(yīng)用層最小的改動
當前Service Mesh的產(chǎn)品還正在開發(fā)中,并沒有非常成熟可直接應(yīng)用的產(chǎn)品。發(fā)展最迅速的產(chǎn)品是Istio。建議大家密切關(guān)注相關(guān)產(chǎn)品的研發(fā)、業(yè)務(wù)使用進展。在這個架構(gòu)中通常是不需要網(wǎng)關(guān)的,是由客戶端直接訪問服務(wù)提供方,由注冊中心向客戶端返回服務(wù)方的地址。關(guān)注公眾號Java技術(shù)棧可以獲取 Dubbo 系列教程。Kong kong是基于Nginx+Lua進行二次開發(fā)的方案:
https://konghq.com/
Netflix Zuul,zuul是spring cloud的一個推薦組件:????????
https://github.com/Netflix/zuul
orange,這個開源程序是國人開發(fā)的:
http://orange.sumory.com/
Amazon API Gateway:
https://aws.amazon.com/cn/api-gateway/
阿里云API網(wǎng)關(guān):
https://www.aliyun.com/product/apigateway/
騰訊云API網(wǎng)關(guān):
https://cloud.tencent.com/product/apigateway
基于Nginx+Lua+ OpenResty的方案,可以看到Kong,orange都是基于這個方案
基于Netty、非阻塞IO模型。通過網(wǎng)上搜索可以看到國內(nèi)的宜人貸等一些公司是基于這種方案,是一種成熟的方案。
基于Node.js的方案。這種方案是應(yīng)用了Node.js天生的非阻塞的特性。
基于java Servlet的方案。zuul基于的就是這種方案,這種方案的效率不高,這也是zuul總是被詬病的原因。
六、企業(yè)怎么選擇API網(wǎng)關(guān)如果要選擇一款已有的API網(wǎng)關(guān),需要從以下幾個方面去考慮。
如果一旦采用了API網(wǎng)關(guān),那么API網(wǎng)關(guān)就會作為企業(yè)應(yīng)用核心,因此性能和可用性是必須要求的。從性能上來說,需要讓網(wǎng)關(guān)增加的時間消耗越短越好,個人覺得需要10ms以下。系統(tǒng)需要采用非阻塞的IO,如epoll,NIO等,網(wǎng)關(guān)和各種依賴的交互也需要是非阻塞的,這樣才能保證整體系統(tǒng)的高可用性,如:Node.js的響應(yīng)式編程和基于java體現(xiàn)的RxJava和Future。網(wǎng)關(guān)必須支持集群部署,任務(wù)一臺服務(wù)器的crash都應(yīng)該不影響整體系統(tǒng)的可用性。多套網(wǎng)關(guān)應(yīng)該支持同一管理平臺和同一監(jiān)控中心。如:一個企業(yè)的OpenAPI網(wǎng)關(guān)和內(nèi)部應(yīng)用的多個系統(tǒng)群的不同的微服務(wù)網(wǎng)關(guān)可以在同一監(jiān)控中心進行監(jiān)控。
一款產(chǎn)品總有不能滿足生產(chǎn)需求的地方,因此需求思考產(chǎn)品在如何進行二次開發(fā)和維護,是否方便公司團隊接手維護產(chǎn)品。需要評估各API網(wǎng)關(guān)在需求上是否能滿足。比如:如果是OpenAPI平臺需要使用API網(wǎng)關(guān),那么需要看API網(wǎng)關(guān)在合作伙伴應(yīng)用接入、合作伙伴門戶集成、訪問次數(shù)限額等OpenAPI核心需求上去思考產(chǎn)品是否能滿足要求。如果是微服務(wù)網(wǎng)關(guān),那么要從微服務(wù)的運維、監(jiān)控、管理等方面去思考產(chǎn)品是否足夠強大。
現(xiàn)有的開源產(chǎn)品如kong,zuul,orange都有基礎(chǔ)的API網(wǎng)關(guān)的核心功能,這些開源產(chǎn)品大多離很好的使用有一定的距離比如:沒有提供管理功能的UI界面、監(jiān)控功能弱小,不支持OpenAPI平臺,沒有公司運營與運維的功能等。當然開源產(chǎn)品能獲取源代碼,如果公司有比較強的研發(fā)能力,能hold住這些開源產(chǎn)品,經(jīng)過二次開發(fā)kong、zuul應(yīng)該還是適應(yīng)一些公司,不過需求注意以下一些點:
另外kong提供企業(yè)版本的API網(wǎng)關(guān),當然也是基于ngnix+lua的,企業(yè)版本可以購買他們的技術(shù)支持、培訓(xùn)等服務(wù)、以及擁有界面的管理、監(jiān)控等功能。現(xiàn)在的亞馬遜、阿里、騰訊云都在提供基礎(chǔ)公有云的API網(wǎng)關(guān),當然這些網(wǎng)關(guān)的基礎(chǔ)功能肯定是沒有問題,但是二次開發(fā),擴展功能、監(jiān)控功能可能就不能滿足部分用戶的定制需求了。另外很多企業(yè)因為自身信息安全的原因,不能使用外網(wǎng)公有網(wǎng)的API網(wǎng)關(guān)服務(wù),這樣就只有選擇私有云的方案了。在需求上如果基于公有云的API網(wǎng)關(guān)只能做到由內(nèi)部人員為外網(wǎng)人員申請應(yīng)用,無法做到定制的合作伙伴門戶,這也不適合于部分企業(yè)的需求。如果作為微服務(wù)網(wǎng)關(guān),大多數(shù)情況下是希望網(wǎng)關(guān)服務(wù)器和服務(wù)提供方服務(wù)器是要在內(nèi)網(wǎng)的,在這里情況下也只有私有云的API網(wǎng)關(guān)才能滿足需求。綜合上面的分析,基礎(chǔ)公有云的API網(wǎng)關(guān)只有滿足一部分簡單客戶的需求,對于很多企業(yè)來說私有云的API網(wǎng)關(guān)才是正確的選擇。

關(guān)注Java技術(shù)棧看更多干貨