公司設計網(wǎng)站建設合同網(wǎng)站友情鏈接的作用
網(wǎng)關一般分為流量網(wǎng)關和業(yè)務網(wǎng)關,流量網(wǎng)關負責接入所有的流量,并分發(fā)給不同的子系統(tǒng),那在具體的業(yè)務接入之前,還有一層業(yè)務網(wǎng)關。
流量網(wǎng)關提供全局性的、與后端業(yè)務應用無關的策略,例如 HTTPS證書卸載、Web防火墻、全局流量監(jiān)控、日志記錄、黑白名單控制、接入請求到業(yè)務系統(tǒng)的負載均衡等,比如Kong。
業(yè)務網(wǎng)關業(yè)務緊耦合的、提供單個業(yè)務域級別的策略,如服務治理、身份認證,權限控制、日志輸出、數(shù)據(jù)加密、熔斷限流等等,比如K8s的Ingress。
流量網(wǎng)關負責南北向流量調(diào)度及安全防護,業(yè)務網(wǎng)關負責東西向流量調(diào)度及服務治理。

這張圖展示了一個多層 Gateway 架構,其中有一個總的 Gateway 接入所有的流量(流量網(wǎng)關),并分發(fā)給不同的子系統(tǒng),還有第二級 Gateway 用于做各個子系統(tǒng)的接入 Gateway(業(yè)務網(wǎng)關)??梢钥吹?#xff0c;網(wǎng)關所管理的服務力度可粗可細。通過網(wǎng)關,我們可以把分布式架構組織成一個星型架構,由網(wǎng)絡對服務的請求進行路由和分發(fā)。但是隨著k8s的普及,Ingress 成為 K8s 生態(tài)的網(wǎng)關標準,促使流量網(wǎng)關和業(yè)務網(wǎng)關,合二為一。
常見的網(wǎng)關
Nginx
k8s已經(jīng)將Nginx與Ingress Controller合并為一個組件: ingress-nginx-controller
OpenResty
Nginx + Lua 的高性能 Web 平臺,其內(nèi)部集成了大量精良的 Lua 庫、第三方模塊以及大多數(shù)的依賴項。用于方便地搭建能夠處理超高并發(fā)、擴展性極高的動態(tài) Web 應用、Web 服務和動態(tài)網(wǎng)關。
Kong
It is based on Nginx and OpenResty. Kong or Kong API Gateway is a cloud-native, platform-agnostic, scalable API Gateway distinguished for its high performance and extensibility via plugins.
By providing functionality for proxying, routing, load balancing, health checking, authentication (and more), Kong serves as the central layer for orchestrating microservices or conventional API traffic with ease.
Kong runs natively on Kubernetes thanks to its official Kubernetes Ingress Controller.
The top Kong features include:
Advanced routing, load balancing, health checking - all configurable via a RESTful admin API or declarative configuration.
Authentication and authorization for APIs using methods like JWT, basic auth, OAuth, ACLs and more.
Proxy, SSL/TLS termination, and connectivity support for L4 or L7 traffic.
Plugins for enforcing traffic controls, rate limiting, req/res transformations, logging, monitoring and including a plugin developer hub.
Sophisticated deployment models like Declarative Databaseless Deployment and Hybrid Deployment (control plane/data plane separation) without any vendor lock-in.
Native ingress controller support for serving Kubernetes.


Apisix
It is based on Nginx and OpenResty. APISIX 是一個微服務API網(wǎng)關,具有高性能、可擴展性等優(yōu)點。它基于 nginx(openresty)和 Lua 實現(xiàn)功能,借鑒了Kong的思路,將Kong底層的關系型數(shù)據(jù)庫(Postgres)替換成了NoSQL型的 etcd,這使得 APISIX 相較于 Kong 在性能上有了很大提升,在啟用各類插件的情況下,Apache APISIX 的性能是 Kong 的 10 倍,且Apisix是100%開源的,它的功能和Kong收費版的功能相當。

功能 | APISIX | KONG |
反向代理和路由 | 支持 | 支持 |
負載均衡 | 支持 | 支持 |
身份驗證和授權 | 支持 | 支持 |
IP列表白名單/黑名單 | 支持 | 支持 |
限速和流控 | 支持 | 支持 |
請求變形 | 支持 | 支持 |
版本控制 | 支持 | 支持 |
斷路器 | 支持 | 支持 |
多協(xié)議支持 | 支持 | 支持 |
緩存 | 支持 | 支持 |
數(shù)據(jù)庫存儲 | etcd | Postgres/Cassandra |
Zuul
Zuul是Netflix公司開源的,使用了一系列不同類型的過濾器,被構建來支持動態(tài)路由、監(jiān)視、彈性和安全性,使我們能夠快速靈活地將功能應用到服務中。Zuul采用同步阻塞架構,依賴多線程來支持吞吐量的增長,性能較低。
Zuul2
Netflix宣布了通用API網(wǎng)關Zuul的架構轉(zhuǎn)型。Zuul原本采用同步阻塞架構,轉(zhuǎn)型后叫作Zuul2,采用異步非阻塞架構。Zuul2和Zuul1在架構方面的主要區(qū)別在于,Zuul2運行在異步非阻塞的框架上,比如Netty。性能比Zuul高20%左右。
Spring Cloud Gateway
SpringCloud Gateway是基于WebFlux框架實現(xiàn)的,而WebFlux框架底層則使用了高性能的Reactor模式通信框架Netty。在于高并發(fā) 非阻塞式通信的話就非常有優(yōu)勢了。它的目標是提供統(tǒng)一的路由方式且也是基于 Filter 鏈的方式提供了網(wǎng)關基本的功能,例如:安全,監(jiān)控/指標,和限流、反向代理、鑒權、流量控制、熔斷、日志監(jiān)控... 是SpringCloud團隊研發(fā)的,能夠很好的融入到SpringCloud產(chǎn)品中。
Envoy
Envoy was purpose-built to have a dynamic configuration API (no more config files and hot-reloads with dropped connections!), fine-grained visibility into backends with Service/Endpoint Discovery, and exceptional performance and tight tail-latency since it’s based on C++. These are very important considerations for organizations using modern proxy technology in performant and highly dynamic (ie, cloud) environments.
Lastly, Envoy is supported by hundreds of companies and is also where the innovation is happening in L7 proxies. Envoy was one of the first proxies to support HTTP2/gRPC on both sides of the connection, Web Assembly (for dynamic extension), and more recently, the HTTP 3 protocol.

性能對比
基于 Java 的異步化 API 網(wǎng)關

Kong

APISIX

Envoy Gateway

從以上性能數(shù)據(jù)可以看出,相同條件下:
Envoy 的 TPS 可以達到 12W 左右;
基于 Java 的異步化 API 網(wǎng)關最高可到 2.8W 左右;
基于 Nginx 的 Kong,TPS 可以到 5W 左右;
基于 Nginx 并相較 Kong 有一定優(yōu)化的 APISIX 可以到 9W 左右。
小結
1、Zuul2和SpringCloudGateway性能不夠,且對應用框架有侵入,不考慮
2、Kong 和 Apisix 都是基于 Lua + nginx(OpenResty) 的,這在2010年之前是常見的方式,插件也豐富,非常實用,而且 Apisix 的性能也很強勁。但是隨著不斷擁抱云原生,他們的這種技術則變得過時老舊。
3、Envoy畢業(yè)于CNCF孵化器,是繼Kubernetes和Prometheus之后的第三位CNCF畢業(yè)生,重新定義了網(wǎng)關的定位和能力,被譽為云原生網(wǎng)關,甚至被稱之為下一代網(wǎng)關,已經(jīng)有很多公司(Google、Alibaba、Wangyi)在積極布局做背書
它是一個輕量級的7層服務代理,圍繞應用程序運行,通常采用sidecar樣式,并提供服務發(fā)現(xiàn)和動態(tài)配置功能以及支持gRpc的負載平衡功能。
并且Envoy還對前端/邊緣代理支持,在邊緣使用相同的軟件有很大的好處(可觀察性、管理、相同的服務發(fā)現(xiàn)和負載平衡算法等)。 Envoy 具有一個功能集,使其非常適合作為大多數(shù)現(xiàn)代 Web 應用程序用例的邊緣代理。這包括HTTP/1.1 HTTP/2 和 HTTP/3 支持,以及 HTTP L7 路由(能夠根據(jù)路徑、權限、內(nèi)容類型、運行時及參數(shù)值等對請求進行路由和重定向)。
基于這兩點,Envoy可以讓南北和東西流量合并,不僅可以用做統(tǒng)一的流量網(wǎng)關,也可類似Service Mesh,采用sidecar樣式,對應用做些基礎設施的功能,比如負載均衡,降級熔斷等。
