一線架構師總結:五種開源微服務API網(wǎng)關的終極大P
微服務架構是當下比較流行的一種架構風格,它是一種以業(yè)務功能組織的服務集合,可以持續(xù)交付、快速部署、更好的可擴展性和容錯能力,而且還使組織更容易去嘗試新技術棧。
微服務具有幾個關鍵特征:
高度可維護和可測試性與其他服務松散耦合且可獨立部署能夠由一個小團隊開發(fā)現(xiàn)在很多公司企業(yè)想將自己的單體應用架構遷移到微服務架構,在這個問題上,Martin Fowler提出了3個前提,而Phil Calcado對其進行了擴展如下:
快速配置計算資源基本監(jiān)控快速部署易于配置存儲易于訪問網(wǎng)關認證、授權標準化的 RPC今天我們主要講講易于訪問的網(wǎng)關,也就是 API 網(wǎng)關。
為什么需要 API 網(wǎng)關
假設我們要使用微服務架構構建一個電商平臺,以下可能是一些潛在的服務:
購物車服務訂單服務商品服務評論服務庫存服務客戶端應該怎么訪問這些服務呢?
原來單體應用的情況我們都知道,都在一個服務器上部署,直接訪問IP+端口+服務前綴即可,現(xiàn)在微服務架構下,每個服務都可以獨立部署,并且是由不同的開發(fā)團隊開發(fā)的,難道我們要這樣訪問嗎?
理論上每個服務都有端點可以訪問,但是客戶端就需要記錄所有服務的端點。發(fā)起5次請求,現(xiàn)在還是5個服務,如果之后擴展多了呢?
隨著服務增多,對客戶端來說就是一個災難,隨之帶來的就是安全性問題、擴展性問題等。
所以這種客戶端直接與每個服務交互是不可取的,通常,更好的方式是使用 API 網(wǎng)關
API 網(wǎng)關是客戶端訪問服務的統(tǒng)一入口,API 網(wǎng)關封裝了后端服務,還提供了一些更高級的功能
例如:身份驗證、監(jiān)控、負載均衡、緩存、多協(xié)議支持、限流、熔斷等等,API 網(wǎng)關還可以針對不同的客戶端定制不同粒度的 API
上面例子中修改架構后如下:
API 網(wǎng)關的優(yōu)缺點
API 網(wǎng)關的好處是顯而易見的,封裝了應用程序的內部結構,為不同客戶端提供不同粒度的 API
同時網(wǎng)關自身也提供了一些高級功能,也減少了客戶端與應用程序之間的往返次數(shù),使客戶端代碼更優(yōu)雅。
同時使用網(wǎng)關也存在一些缺點,增加了一個新的組件,增加了整個應用架構的復雜度
一個通俗的道理,你做的越多你犯錯的風險也越高,網(wǎng)關不可用很可能導致整個應用架構崩潰
當然現(xiàn)在有各種各樣的方案,能防止網(wǎng)關崩潰,它也可能存在瓶頸風險。
使用網(wǎng)關有利有弊,我個人而言,利肯定是大于弊的,我們盡可能的將弊端降到最低。
API 網(wǎng)關一些實現(xiàn)
使用一個組件時,尤其是這種比較流行的架構,組件肯定存在開源的,我們不必自己去從零開始去實現(xiàn)一個網(wǎng)關,自己開發(fā)一個網(wǎng)關的工作量是相當可觀的。
現(xiàn)在比較流行的開源 API 網(wǎng)關如下所示:
Kong
Kong是一個在 Nginx 中運行的Lua應用程序,并且可以通過lua-nginx模塊實現(xiàn)
Kong不是用這個模塊編譯Nginx,而是與 OpenResty 一起發(fā)布,OpenResty已經(jīng)包含了 lua-nginx-module, OpenResty 不是 Nginx 的分支,而是一組擴展其功能的模塊。
它的核心是實現(xiàn)數(shù)據(jù)庫抽象,路由和插件管理,插件可以存在于單獨的代碼庫中,并且可以在幾行代碼中注入到請求生命周期的任何位置。
Traefik
Traefik 是一個現(xiàn)代 HTTP 反向代理和負載均衡器,可以輕松部署微服務
它可以與您現(xiàn)有的組件(Docker、Swarm,Kubernetes,Marathon,Consul,Etcd,…)集成,并自動動態(tài)配置。
Ambassador
Ambassador 是一個開源的微服務 API 網(wǎng)關,建立在 Envoy 代理之上,為用戶的多個團隊快速發(fā)布,監(jiān)控和更新提供支持。
它支持處理 Kubernetes ingress controller 和負載均衡等功能,可以與 Istio 無縫集成。
Tyk
Tyk是一個開源的、輕量級的、快速可伸縮的 API 網(wǎng)關,支持配額和速度限制,支持認證和數(shù)據(jù)分析,支持多用戶多組織,提供全 RESTful API?;?go 編寫。
Zuul
Zuul 是一種提供動態(tài)路由、監(jiān)視、彈性、安全性等功能的邊緣服務。Zuul 是 Netflix 出品的一個基于 JVM 路由和服務端的負載均衡器。
API 網(wǎng)關實現(xiàn)對比
總結
由上述對比表格中可以看出:
從開源社區(qū)活躍度來看,無疑是Kong和Traefik較好從成熟度來看,較好的是Kong、Tyk、Traefik從性能角度來看,Kong要比其他幾個領先一些從架構優(yōu)勢的擴展性來看,Kong、Tyk有豐富的插件,Ambassador也有插件但不多,而Zuul是完全需要自研,但Zuul由于與Spring Cloud深度集成,使用度也很高,近年來Istio服務網(wǎng)格的流行,Ambassador因為能夠和Istio無縫集成也是相當大的優(yōu)勢。歡迎工作一到五年的Java工程師朋友們加入Java程序員開發(fā): 721575865
群內提供免費的Java架構學習資料(里面有高可用、高并發(fā)、高性能及分布式、Jvm性能調優(yōu)、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!
6種開源api網(wǎng)關和3種商業(yè)網(wǎng)關
api網(wǎng)關分流量網(wǎng)關和業(yè)務網(wǎng)關
流量網(wǎng)關 :是控制流量進入集群的網(wǎng)關。對于一個服務集群,會有很多非法的請求或者無效的請求,這時候要將請求拒之門外,降低集群的流量壓力。 可定義全局性的、跟具體的后端業(yè)務應用和服務完全無關的策略網(wǎng)關。流量網(wǎng)關通常只專注于全局的Api管理策略,比如全局流量監(jiān)控、日志記錄、全局限流、黑白名單 控制、接入請求到業(yè)務系統(tǒng)的負載均衡等,有點類似防火墻。Kong 就是典型的流量網(wǎng)關。
業(yè)務網(wǎng)關: 一般部署在流量網(wǎng)關之后、業(yè)務系統(tǒng)之前,比流量網(wǎng)關更靠近業(yè)務系統(tǒng)。業(yè)務網(wǎng)關更靠近我們的業(yè)務,也就是與服務器應用層打交道,那么有很多應用層需要考慮的事情就可以依托業(yè)務網(wǎng)關,比如服務發(fā)現(xiàn)、服務熔斷、身份認證、限流限速、統(tǒng)計、性能分析,線程模型、協(xié)議適配、熔斷限流,服務編排 ,就可以在獨立的網(wǎng)關層面來解決。
通常API網(wǎng)關指的是業(yè)務網(wǎng)關。有時候我們也會模糊流量網(wǎng)關和業(yè)務網(wǎng)關,讓一個網(wǎng)關承擔所有的工作,所以這兩者之間并沒有嚴格的界線 。
開源網(wǎng)關
有無好的控制臺對于技術選型很重要
1.無控制臺
Zuul
Spring cloud gateway
2.有控制臺
apache ShenYu(原Soul)
apisix
kong
Gravitee
商業(yè)網(wǎng)關
商業(yè)網(wǎng)關
結論:
中小型項目首選開源Spring cloud gateway,或商業(yè)網(wǎng)關。
大型項目:選擇開源有控制臺的網(wǎng)關,然后擴展改造。
相關問答
apisix哪家公司?支流科技是Apache頂級項目APISIX背后的商業(yè)公司。支流科技成立于2019年,是一家提供API處理和分析的開源基礎軟件公司,目前擁有三個核心產(chǎn)品,分別是是...
阿里云 - 上云就上阿里云 - 觸屏版230萬用戶正享用阿里云提供的云服務器、云數(shù)據(jù)庫、云存儲、CDN、大數(shù)據(jù)等服務,7x24售后支持,故障100倍賠償,快速備案,5天無理由退款。
sdk和 api網(wǎng)關 區(qū)別?sdkSDK是一系列程序接口,文檔,開發(fā)工具的集合,是的,集合,sdk即單單不是一個開發(fā)工具,也不是一個程序。一個完整的SDK應該包括以下內容:(1)接口文件和庫...一...
spoesd框架是干什么的?spoesd框架是一種用于構建分布式服務的開源框架,旨在解決微服務的需求。它提供了API網(wǎng)關、服務發(fā)現(xiàn)、負載均衡、熔斷器和配置中心等功能,使得服務之間可以更加...
...filter中調用一個http接口 - OSCHINA - 中文 開源 技術交流社區(qū)filter中要查詢一個配置,我用http方式調用http://127.0.0.1:{網(wǎng)關端口}/{服務名稱}/接口來查詢,調用2-3次之后整個網(wǎng)關就不能提供服務了。簡單來說就是我...
Java后端微服務開發(fā),為什么要單獨把 api 模塊分離出來?現(xiàn)在的軟件開發(fā)模式和傳統(tǒng)的有很多差別,傳統(tǒng)的開發(fā)模式耦合度較高,隨著技術的發(fā)展越來越多的開發(fā)模式被應用,比如微服務架構模式。其實很多開發(fā)語言都有自己的...
api網(wǎng)關 對什么管控?API網(wǎng)關來實現(xiàn)微服務治理管控中的服務限流,熔斷和降級方面的內容。在前面談微服務架構的時候也談到過類似通過Hystrix,Sentinel來是服務限流熔斷。包括也不斷...
api網(wǎng)關 如何避免成為熱點?你好,系統(tǒng)設置里面有開關功能,建議打開找到關閉就可以了。你好,系統(tǒng)設置里面有開關功能,建議打開找到關閉就可以了。
怎么通俗地理解這句話,流量 網(wǎng)關 負責南北向流量調度及安全防...微服務網(wǎng)關(如SpringCloudGateway)是指與業(yè)務緊耦合的、提供單個業(yè)務域級別的策略,如服務治理、身份認證,權限控制、日志輸出、數(shù)據(jù)加密、熔斷限流等等。...
kong是什么呢?Kong是一個開源的API網(wǎng)關,可以幫助開發(fā)人員管理和監(jiān)控API。它提供了許多功能,如流量控制、身份驗證、請求轉發(fā)和負載均衡等,可以幫助開發(fā)人員更好地管理和保護...
