企業(yè)對(duì)API網(wǎng)關(guān)怎么應(yīng)用與選擇

前言

「 API網(wǎng)關(guān) 」是任何微服務(wù)架構(gòu)的重要組成部分擒贸。有了它我們可以在一個(gè)獨(dú)立的模塊上方便的處理一些非業(yè)務(wù)邏輯恐锣,可以讓微服務(wù)本身專注在自身特定的功能上嵌言,使得每個(gè)微服務(wù)的開(kāi)發(fā)更容易和更快速蝠检。

一怖亭、API網(wǎng)關(guān)的用處

API網(wǎng)關(guān)我的分析中會(huì)用到以下三種場(chǎng)景。

1坤检、Open API

企業(yè)需要將自身數(shù)據(jù)兴猩、能力等作為開(kāi)發(fā)平臺(tái)向外開(kāi)放,通常會(huì)以rest的方式向外提供早歇。 最好的例子就是淘寶開(kāi)放平臺(tái)倾芝、騰訊公司的QQ開(kāi)發(fā)平臺(tái)、微信開(kāi)放平臺(tái)箭跳。

Open API開(kāi)放平臺(tái)必然涉及到客戶應(yīng)用的接入晨另、API權(quán)限的管理、調(diào)用次數(shù)管理等谱姓,必然會(huì)有一個(gè)統(tǒng)一的入口進(jìn)行管理借尿,這正是API網(wǎng)關(guān)可以發(fā)揮用處的時(shí)候。

2屉来、微服務(wù)網(wǎng)關(guān)

微服務(wù)的概念最早在2012年提出路翻,在Martin Fowler的全力支持下,微服務(wù)在2014年后得到了火速發(fā)展茄靠。

在微服務(wù)架構(gòu)中茂契,有一個(gè)組件可以說(shuō)是必不可少的,那就是微服務(wù)網(wǎng)關(guān)慨绳,微服務(wù)網(wǎng)關(guān)處理了負(fù)載均衡掉冶,緩存真竖,路由,訪問(wèn)控制厌小,服務(wù)代理恢共,監(jiān)控锌蓄,日志等焙蹭。

API 網(wǎng)關(guān)在微服務(wù)架構(gòu)中正是以微服務(wù)網(wǎng)關(guān)的身份存在。

3雳灾、API服務(wù)管理平臺(tái)

上述的微服務(wù)架構(gòu)對(duì)企業(yè)來(lái)說(shuō)有可能實(shí)施上是艱難的涨岁,企業(yè)有很多遺留系統(tǒng)拐袜,要全部抽取為微服務(wù)改動(dòng)太大,對(duì)企業(yè)來(lái)說(shuō)成本太高梢薪。

但是由于不同系統(tǒng)間存在大量的API服務(wù)互相調(diào)用蹬铺,因此需要對(duì)系統(tǒng)間服務(wù)調(diào)用進(jìn)行管理,清晰地看到各系統(tǒng)調(diào)用關(guān)系秉撇,對(duì)系統(tǒng)間調(diào)用進(jìn)行監(jiān)控等甜攀。

API網(wǎng)關(guān)可以解決這些問(wèn)題,我們可以認(rèn)為如果沒(méi)有大規(guī)模的實(shí)施微服務(wù)架構(gòu)琐馆,那么對(duì)企業(yè)來(lái)說(shuō)微服務(wù)網(wǎng)關(guān)就是企業(yè)的API服務(wù)管理平臺(tái)规阀。

二、API網(wǎng)關(guān)在企業(yè)架構(gòu)中的地位

一個(gè)企業(yè)隨著信息系統(tǒng)復(fù)雜度的提高瘦麸,必然出現(xiàn)外部合作伙伴應(yīng)用谁撼、企業(yè)自身的公網(wǎng)應(yīng)用、企業(yè)內(nèi)網(wǎng)應(yīng)用等滋饲。

在架構(gòu)上應(yīng)該將這三種應(yīng)用區(qū)別開(kāi)厉碟,三種應(yīng)用的安排級(jí)別、訪問(wèn)方式也不一樣屠缭。

因此在我的設(shè)計(jì)中將這三種應(yīng)用分別用不同的網(wǎng)關(guān)進(jìn)行API管理箍鼓,分別是:API網(wǎng)關(guān)(OpenAPI合伙伙伴應(yīng)用)、API網(wǎng)關(guān)(內(nèi)部應(yīng)用)呵曹、API網(wǎng)關(guān)(內(nèi)部公網(wǎng)應(yīng)用)款咖。

如下圖所示:

三、企業(yè)中如何應(yīng)用API網(wǎng)關(guān)

1奄喂、?對(duì)于OpenAPI使用的API網(wǎng)關(guān)來(lái)說(shuō)之剧,一般合作伙伴要以應(yīng)用的形式接入到OpenAPI平臺(tái),合作伙伴需要到 OpenAPI平臺(tái)申請(qǐng)應(yīng)用砍聊。

因此在OpenAPI網(wǎng)關(guān)之外背稼,需要有一個(gè)面向合作伙伴的使用的平臺(tái)用于合作伙伴,這就要求OpenAPI網(wǎng)關(guān)需要提供API給這個(gè)用戶平臺(tái)進(jìn)行訪問(wèn)玻蝌。

如下架構(gòu):

當(dāng)然如果是在簡(jiǎn)單的場(chǎng)景下蟹肘,可能并不需要提供一個(gè)面向合作伙伴的門(mén)戶词疼,只需要由公司的運(yùn)營(yíng)人員直接添加合作伙伴應(yīng)用id/密鑰等,這種情況下也就不需要合作伙伴門(mén)戶子系統(tǒng)帘腹。

2贰盗、?對(duì)于內(nèi)網(wǎng)的API網(wǎng)關(guān),在起到的作用上來(lái)說(shuō)可以認(rèn)為是微服務(wù)網(wǎng)關(guān)阳欲,也可以認(rèn)為是內(nèi)網(wǎng)的API服務(wù)治理平臺(tái)舵盈。

當(dāng)企業(yè)將所有的應(yīng)用使用微服務(wù)的架構(gòu)管理起來(lái),那么API網(wǎng)關(guān)就起到了微服務(wù)網(wǎng)關(guān)的作用球化。

而當(dāng)企業(yè)只是將系統(tǒng)與系統(tǒng)之間的調(diào)用使用rest api的方式進(jìn)行訪問(wèn)時(shí)使用API網(wǎng)關(guān)對(duì)調(diào)用進(jìn)行管理秽晚,那么API網(wǎng)關(guān)起到的就是API服務(wù)治理的作用。

架構(gòu)參考如下:

3筒愚、?對(duì)于公司內(nèi)部公網(wǎng)應(yīng)用(如APP赴蝇、公司的網(wǎng)站),如果管理上比較細(xì)致巢掺,在架構(gòu)上可能由獨(dú)立的API網(wǎng)關(guān)來(lái)處理這部分內(nèi)部公網(wǎng)應(yīng)用

如果想比較簡(jiǎn)單的處理句伶,也可以是使用面向合作伙伴的API網(wǎng)關(guān)。

如果使用獨(dú)立的API網(wǎng)關(guān)陆淀,有以下的好處:

面向合作伙伴和面向公司主體業(yè)務(wù)的優(yōu)先級(jí)不一樣考余,不同的API網(wǎng)關(guān)可以做到業(yè)務(wù)影響的隔離。

內(nèi)部API使用的管理流程和面向合作伙伴的管理流程可能不一樣轧苫。

內(nèi)部的API在功能擴(kuò)展等方面的需求一般會(huì)大于OpenAPI對(duì)于功能的要求楚堤。

基于以上的分析,如果公司有能力浸剩,那么還是建議分開(kāi)使用合作伙伴OPEN API網(wǎng)關(guān)和內(nèi)部公網(wǎng)應(yīng)用網(wǎng)關(guān)钾军。

到這里鳄袍,也給大家推薦一個(gè)架構(gòu)交流學(xué)習(xí)群:710373545绢要,里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring,MyBatis拗小,Netty源碼分析重罪,高并發(fā)、高性能哀九、分布式剿配、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化這些成為架構(gòu)師必備的知識(shí)體系阅束。還能領(lǐng)取免費(fèi)的學(xué)習(xí)資源呼胚,相信對(duì)于已經(jīng)工作和遇到技術(shù)瓶頸的碼友,在這個(gè)群里會(huì)有你需要的內(nèi)容息裸。

四蝇更、API網(wǎng)關(guān)有哪些競(jìng)爭(zhēng)方案

1沪编、 對(duì)于Open API平臺(tái)的API網(wǎng)關(guān),我分析只能選擇API網(wǎng)關(guān)作為解決方案.

業(yè)界沒(méi)有發(fā)現(xiàn)比較好的可以用來(lái)作為Open API平臺(tái)的入口的其他方案年扩。

2蚁廓、 對(duì)于作為微服務(wù)網(wǎng)關(guān)的API網(wǎng)關(guān),業(yè)界的選擇可以選擇的解決方案比較多厨幻,也取決于微服務(wù)器的實(shí)現(xiàn)方案相嵌,有一些微服務(wù)架構(gòu)的實(shí)現(xiàn)方案是不需要微服務(wù)網(wǎng)關(guān)的。

(1)?Service Mesh

這是新興的基于無(wú)API網(wǎng)關(guān)的架構(gòu)况脆,通過(guò)在客戶端上的代理完成屏蔽網(wǎng)絡(luò)層的訪問(wèn)饭宾,這樣達(dá)到對(duì)應(yīng)用層最小的改動(dòng)

當(dāng)前Service Mesh的產(chǎn)品還正在開(kāi)發(fā)中,并沒(méi)有非常成熟可直接應(yīng)用的產(chǎn)品漠另。 發(fā)展最迅速的產(chǎn)品是Istio捏雌。建議大家密切關(guān)注相關(guān)產(chǎn)品的研發(fā)、業(yè)務(wù)使用進(jìn)展笆搓。

(2)基于duboo架構(gòu)

在這個(gè)架構(gòu)中通常是不需要網(wǎng)關(guān)的性湿,是由客戶端直接訪問(wèn)服務(wù)提供方,由注冊(cè)中心向客戶端返回服務(wù)方的地址满败。

五肤频、API網(wǎng)關(guān)解決方案

私有云開(kāi)源解決方案如下:

Kong kong是基于Nginx+Lua進(jìn)行二次開(kāi)發(fā)的方案:

https://konghq.com/

Netflix Zuul,zuul是spring cloud的一個(gè)推薦組件:

https://github.com/Netflix/zuul

orange,這個(gè)開(kāi)源程序是國(guó)人開(kāi)發(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

自開(kāi)發(fā)解決方案:

基于Nginx+Lua+ OpenResty的方案算墨,可以看到Kong,orange都是基于這個(gè)方案

基于Netty宵荒、非阻塞IO模型。通過(guò)網(wǎng)上搜索可以看到國(guó)內(nèi)的宜人貸等一些公司是基于這種方案净嘀,是一種成熟的方案报咳。

基于Node.js的方案。這種方案是應(yīng)用了Node.js天生的非阻塞的特性挖藏。

基于java Servlet的方案暑刃。zuul基于的就是這種方案,這種方案的效率不高膜眠,這也是zuul總是被詬病的原因岩臣。

到這里,也給大家推薦一個(gè)架構(gòu)交流學(xué)習(xí)群:710373545宵膨,里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring架谎,MyBatis,Netty源碼分析辟躏,高并發(fā)谷扣、高性能、分布式捎琐、微服務(wù)架構(gòu)的原理会涎,JVM性能優(yōu)化這些成為架構(gòu)師必備的知識(shí)體系涯曲。還能領(lǐng)取免費(fèi)的學(xué)習(xí)資源,相信對(duì)于已經(jīng)工作和遇到技術(shù)瓶頸的碼友在塔,在這個(gè)群里會(huì)有你需要的內(nèi)容幻件。

六、企業(yè)怎么選擇API網(wǎng)關(guān)

如果要選擇一款已有的API網(wǎng)關(guān)蛔溃,需要從以下幾個(gè)方面去考慮绰沥。

1、性能與可用性

如果一旦采用了API網(wǎng)關(guān)贺待,那么API網(wǎng)關(guān)就會(huì)作為企業(yè)應(yīng)用核心徽曲,因此性能和可用性是必須要求的。

從性能上來(lái)說(shuō)麸塞,需要讓網(wǎng)關(guān)增加的時(shí)間消耗越短越好秃臣,個(gè)人覺(jué)得需要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ù)一臺(tái)服務(wù)器的crash都應(yīng)該不影響整體系統(tǒng)的可用性蠢终。

多套網(wǎng)關(guān)應(yīng)該支持同一管理平臺(tái)和同一監(jiān)控中心。如:一個(gè)企業(yè)的OpenAPI網(wǎng)關(guān)和內(nèi)部應(yīng)用的多個(gè)系統(tǒng)群的不同的微服務(wù)網(wǎng)關(guān)可以在同一監(jiān)控中心進(jìn)行監(jiān)控茴她。

2寻拂、可擴(kuò)展性、可維護(hù)性

一款產(chǎn)品總有不能滿足生產(chǎn)需求的地方丈牢,因此需求思考產(chǎn)品在如何進(jìn)行二次開(kāi)發(fā)和維護(hù)祭钉,是否方便公司團(tuán)隊(duì)接手維護(hù)產(chǎn)品。

3赡麦、需求匹配度

需要評(píng)估各API網(wǎng)關(guān)在需求上是否能滿足朴皆。

比如:如果是OpenAPI平臺(tái)需要使用API網(wǎng)關(guān)帕识,那么需要看API網(wǎng)關(guān)在合作伙伴應(yīng)用接入泛粹、合作伙伴門(mén)戶集成、訪問(wèn)次數(shù)限額等OpenAPI核心需求上去思考產(chǎn)品是否能滿足要求肮疗。

如果是微服務(wù)網(wǎng)關(guān)晶姊,那么要從微服務(wù)的運(yùn)維、監(jiān)控伪货、管理等方面去思考產(chǎn)品是否足夠強(qiáng)大们衙。

4钾怔、是否開(kāi)源?公司是否有自開(kāi)發(fā)的能力蒙挑?

現(xiàn)有的開(kāi)源產(chǎn)品如kong宗侦,zuul,orange都有基礎(chǔ)的API網(wǎng)關(guān)的核心功能忆蚀,這些開(kāi)源產(chǎn)品大多離很好的使用有一定的距離

比如:沒(méi)有提供管理功能的UI界面矾利、監(jiān)控功能弱小,不支持OpenAPI平臺(tái)馋袜,沒(méi)有公司運(yùn)營(yíng)與運(yùn)維的功能等男旗。

當(dāng)然開(kāi)源產(chǎn)品能獲取源代碼,如果公司有比較強(qiáng)的研發(fā)能力欣鳖,能hold住這些開(kāi)源產(chǎn)品察皇,經(jīng)過(guò)二次開(kāi)發(fā)kong、zuul應(yīng)該還是適應(yīng)一些公司泽台,不過(guò)需求注意以下一些點(diǎn):

kong是基于ngnix+lua的什荣,從公司的角度比較難于找到能去維護(hù)這種架構(gòu)產(chǎn)品的人。需求評(píng)估當(dāng)前公司是否有這個(gè)能力去維護(hù)這個(gè)產(chǎn)品怀酷。

zuul因?yàn)榧軜?gòu)的原因在高并發(fā)的情況下性能不高溃睹,同時(shí)需要去基于研究整合開(kāi)源的適配zuul的監(jiān)控和管理系統(tǒng)。

orange由于沒(méi)有被大量使用胰坟,同時(shí)是國(guó)內(nèi)個(gè)人在開(kāi)源因篇,在可持續(xù)性和社區(qū)資源上不夠豐富,出了問(wèn)題后可能不容易找到人問(wèn)笔横。

另外kong提供企業(yè)版本的API網(wǎng)關(guān)竞滓,當(dāng)然也是基于ngnix+lua的,企業(yè)版本可以購(gòu)買他們的技術(shù)支持吹缔、培訓(xùn)等服務(wù)商佑、以及擁有界面的管理、監(jiān)控等功能厢塘。

5茶没、公有云還是私有云

現(xiàn)在的亞馬遜、阿里晚碾、騰訊云都在提供基礎(chǔ)公有云的API網(wǎng)關(guān)抓半,當(dāng)然這些網(wǎng)關(guān)的基礎(chǔ)功能肯定是沒(méi)有問(wèn)題,但是二次開(kāi)發(fā)格嘁,擴(kuò)展功能笛求、監(jiān)控功能可能就不能滿足部分用戶的定制需求了。

另外很多企業(yè)因?yàn)樽陨硇畔踩脑颍荒苁褂猛饩W(wǎng)公有網(wǎng)的API網(wǎng)關(guān)服務(wù)探入,這樣就只有選擇私有云的方案了狡孔。

在需求上如果基于公有云的API網(wǎng)關(guān)只能做到由內(nèi)部人員為外網(wǎng)人員申請(qǐng)應(yīng)用,無(wú)法做到定制的合作伙伴門(mén)戶蜂嗽,這也不適合于部分企業(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)只有滿足一部分簡(jiǎn)單客戶的需求隆嗅,對(duì)于很多企業(yè)來(lái)說(shuō)私有云的API網(wǎng)關(guān)才是正確的選擇界阁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市胖喳,隨后出現(xiàn)的幾起案子泡躯,更是在濱河造成了極大的恐慌,老刑警劉巖丽焊,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件较剃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡技健,警方通過(guò)查閱死者的電腦和手機(jī)写穴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)雌贱,“玉大人啊送,你說(shuō)我怎么就攤上這事⌒拦拢” “怎么了馋没?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)降传。 經(jīng)常有香客問(wèn)我篷朵,道長(zhǎng),這世上最難降的妖魔是什么婆排? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任声旺,我火速辦了婚禮,結(jié)果婚禮上段只,老公的妹妹穿的比我還像新娘腮猖。我一直安慰自己,他們只是感情好翼悴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布缚够。 她就那樣靜靜地躺著,像睡著了一般鹦赎。 火紅的嫁衣襯著肌膚如雪谍椅。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天古话,我揣著相機(jī)與錄音雏吭,去河邊找鬼。 笑死陪踩,一個(gè)胖子當(dāng)著我的面吹牛杖们,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肩狂,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼摘完,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了傻谁?” 一聲冷哼從身側(cè)響起孝治,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎审磁,沒(méi)想到半個(gè)月后谈飒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡态蒂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年杭措,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钾恢。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡手素,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘩蚪,到底是詐尸還是另有隱情刑桑,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布募舟,位于F島的核電站祠斧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拱礁。R本人自食惡果不足惜琢锋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呢灶。 院中可真熱鬧吴超,春花似錦、人聲如沸鸯乃。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鸟悴,卻和暖如春陈辱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背细诸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工沛贪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人震贵。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓利赋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親猩系。 傳聞我的和親對(duì)象是個(gè)殘疾皇子媚送,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容