微服務架構中的API網關:Spring Cloud與Kong/Traefik等方案對比

微服務架構中的API網關:Spring Cloud與Kong/Traefik等方案對比

    • 一、API 網關的概念
    • 二、API 網關的主要功能
      • 2.1 統一入口與路由轉發
      • 2.2 安全與權限控制
      • 2.3 流量管理與容錯
      • 2.4 API 管理與聚合
      • 2.5 監控與日志
      • 2.5 協議轉換與適配
      • 2.6 控制平面與配置管理
    • 三、API 網關選型
      • 3.1 常見的 API 網關
        • 3.1.1 Nginx
        • 3.1.2 Zuul
        • 3.1.3 Spring Cloud Gateway
        • 3.1.4 Kong
        • 3.1.5 Traefik
      • 3.2 API 網關對比
    • 四、Traefik 的后端跟蹤系統
      • 4.1 Jaeger
      • 4.2 Zipkin
      • 4.3 Datadog

在這里插入圖片描述

一、API 網關的概念


?? API 網關是一個服務器,是系統的唯一入口。

?? API 網關方式的核心要點是:所有的客服端和消費端都通過統一的網關接入微服務統一的入口,協調和管理微服務之間的通信。

網關也是提供 REST/HTTP 的訪問 API

二、API 網關的主要功能


2.1 統一入口與路由轉發


  • 統一入口:所有外部請求必須通過網關訪問后端微服務,網關成為系統的唯一入口。這隱藏了后端服務的復雜性,外部無需直接調用具體的服務實例。
  • 請求路由:根據請求的路徑、參數、Header 等條件,將請求動態路由到對應的后端微服務。(例如:通過路徑匹配,/api/order 路由到訂單服務
  • 負載均衡:網關通常集成負載均衡策略(如輪詢、權重、哈希),將流量分發到多個后端服務實例,提高系統吞吐量和可用性。

2.2 安全與權限控制


  • 身份認證與授權
    • 統一處理用戶身份驗證,避免每個微服務重復實現認證邏輯。
    • 通過過濾器攔截請求,校驗權限(如檢查 Token 有效性),未通過直接攔截。
  • 安全策略
    • 防止惡意請求(如 SQL 注入XSS 攻擊)。
    • 實現黑白名單、IP 限制等安全措施。

2.3 流量管理與容錯


  • 限流與降級
    • 通過熔斷器(如 Hystrix )或限流算法(如令牌桶、漏桶)控制請求速率,防止系統過載。
    • 在后端服務不可用時,返回預定義的降級響應(如緩存數據或錯誤提示)
  • 灰度發布與 AB 測試
    • 根據用戶特征(如 HeaderCookie)或流量比例,將請求路由到不同版本的服務實例,實現灰度發布或 AB 測試

2.4 API 管理與聚合


  • API 統一管理
  • 請求聚合:將多個后端服務的請求合并為一個接口,減少客戶端的調用次數。例如,網關調用訂單服務和用戶服務,聚合結果后返回給客戶端(如Fegin接口)。

2.5 監控與日志


  • 流量監控:通過監控系統可視化統計的請求QPS、響應時間、錯誤率等,記錄請求日志。
  • 調用鏈追蹤:通過鏈路追蹤工具(如 ZipkinSleuth)在網關層注入 Trace ID,追蹤請求的全鏈路調用過程。

2.5 協議轉換與適配


  • 協議轉換
    • 將外部的 HTTP 請求轉換成內部服務的其他協議(如 gRPCDubbo),或反之。
    • 適配不同客戶端的需求(如移動端需要簡化響應,Web 端需要完整數據)。
  • 數據格式轉換:統一處理數據格式(如 JSONProtobuf),降級后端服務的復雜性。

2.6 控制平面與配置管理


  • 動態配置:通過控制平面(如 API 管理平臺)動態更新路由規則、限流策略等,無需重啟網關。
  • 彈性伸縮:根據流量自動擴縮網關實例,提升系統應對突發流量的能力。

三、API 網關選型

3.1 常見的 API 網關


名稱公司語言特點缺點
Nginx(2004)Nginx IncC/Lua高性能,成熟穩固門檻高,偏運維,可編程弱
Zuul1(2012)Netflix/PivotalJava成熟,簡略門檻低性能個別,可編程個別
Spring Cloud Gateway(2016)PivotalJava異步,配置靈便晚期產品
Envoy(2016)LyftC++高性能,可編程 API/ServiceMesh集成門檻較高
Kong(2014)Kong IncOpenResty/Lua高性能,可編程API門檻較高
Traefik(2015)ContainousGolang云原生,可編程API/對接各種服務發現生產案例不太多

在這里插入圖片描述

3.1.1 Nginx

??Nginx 是一個高性能的 HTTP 和反向代理服務器。Nginx 一方面可以做反向代理,另外一方面可以做靜態資源服務器,接口使用 Lua 動態語言可以完成靈活的定制功能。

3.1.2 Zuul

??ZuulNetflix 開源的一個 API 網關組件,它可以和 EurekaRibbonHystrix 等組件配合使用。社區活躍,融合于 Spring Cloud 完整生態,是構建微服務體系前置網關服務的最佳選型之一。

??Zuul 的核心是一系列的過濾器,這些過濾器可以完成以下功能:

  • 統一鑒權 + 動態路由 + 負載均衡和壓力測試
  • 審查與監控
  • 多區域彈性

Zuul 目前有兩個大的版本:Zuul1Zuul2

  • Zuul1:基于 Servlet 框架構建,采用阻塞和多線程方式,一個線程處理一次連接請求,這種方式在內部延遲嚴重、設備故障較多情況下會引起存活的連接增多和線程增加的情況發生。
  • Zuul2:Netflix 發布的 Zuul2 有重大的更新,它運行在異步和無阻塞框架上,每個 CPU 核心一個線程,處理所有的請求和響應,請求和相應的生命周期是通過事件和回調來處理的,這種方式減少了線程數量,因此開銷較小。
3.1.3 Spring Cloud Gateway

??Spring Clloud GatewaySpring Cloud 的一個全新的 API 網關項目,目的是為了替換掉 Zuul1,它基于 Spring5.0 + SpringBoot2.0 + WebFlux (基于高性能的 Reactor 模式響應式通信框架 Netty,異步非阻塞模型)等技術開發,性能高于 Zuul,官方測試,Spring Cloud Gateway 是 Zuul 的 1.6 倍,旨在為微服務框架提供一種簡單有效的統一的 API 路由管理方式。

??Spring Cloud Gateway 可以與 Spring Cloud Discovery Client(如 Eureka)、RibbonHystrix 等組件配合使用,實現路由轉發、負載均衡、熔斷、鑒權、路由重寫、日志監控等,并且 Gateway 還內置了限流過濾器,實現了限流的功能。

3.1.4 Kong

??Kong 是一款基于 OpenResty(Nginx + Lua 模塊)編寫的高可用、易擴展的,由 Mashape 公司開源的 API Gateway 項目。Kong 是基于 Nginx 和 Apache Cassandra 或 PostgreSQL 構建的,能提供易于使用的 RestFul API 來操作和配置 API 管理系統,所以它可以水平擴展多個 Kong 服務器,通過前置的負載均衡配置把請求均勻地分發到各個 Server,來應對大批量的網絡請求。

3.1.5 Traefik

??Treakfik 是一個為了讓部署微服務更加便捷而誕生的現代 HTTP 反向代理、負載均衡工具。它支持多種后臺(Docker、Swarm、Kubernetes、Marathon、Mesos、Consul、Zookeeper、BoltDB、Rest API 等)來自動化、動態的應用它的配置文件設置。

重要特性:

  • 它非常快,無需安裝其它以來,通過 Go 語言編寫的單一可執行文件;
  • 多種后臺支持:Docker、Swarm、Kubernetes、Marathon、Mesos、Consul、Etcd;
  • 支持 Rest API、Websocket、HTTP/2、Docker 鏡像;
  • 監聽后臺變化進而自動化應用新的配置文件配置;
  • 配置文件熱更新,無需重啟進程;
  • 后端斷路器、負載均衡、容錯機制;
  • 清爽的前端頁面,可監控服務指標;

3.2 API 網關對比


KongTraefikAmbassadorTykZuul
基本主要用途企業級 API 管理微服務網關微服務網關微服務網關微服務網關
學習曲線適中simplesimple適中simple
成本開源/企業版開源開源/pro開源/企業版開源
社區star40.4k53.7K18710k13.6k
配置配置語言Admin Rest api,Text file(nginx.confg等)TOMLYAML(kubernetes annotation)Tyk REST APIRESTAPI, YAML 靜態配置
配置端點類型命令式聲明式聲明式命令式命令式
拖拽方式yesnononono
管理模式configurabledecentralised,self-servicedecentralised,self-servicedecentralised,self-servicedecentralised,self-service
部署kubernetes適中(k8s yaml, helm chart)easyeasy適中(k8s yaml, helm chart)適中(k8s yaml, helm chart)
Cloud IAAShigheasyN/Aeasyeasy
**Private Data Center **higheasyN/Aeasyeasy
部署模式金絲雀(企業版)金絲雀金絲雀,shadow金絲雀金絲雀
statepostgres,cassandrakuberneteskubernetesredis內存文件
可擴展性擴展功能插件自己實現插件插件自己實現
擴展方法水平水平水平水平水平
功能服務發現動態動態動態動態動態
協議http,https,websockethttp,https,grpc,websockethttp,https,grpc,websockethttp,https,grpc,websockethttp,https
基于kong + nginxtraefikenvoytykzuul
ssl 終止yesyesyesyesno
websocketyesyesyesyesno
routinghost,path,methodhost,pathhost,path,headerhost,path
限流yesnoyesyes需要開發
熔斷yesyesnoyes需要其他組件
重試yesyesnoyesyes
健康檢查yesnonoyesyes
負載均衡算法輪詢,哈希輪詢,加權輪詢加權輪詢輪詢輪詢,隨機,加權輪詢,自定義
權限Basic Auth、HMAC、JWT、Key、LDAP、OAuth 2.0、PASETO、plus paid Kong Enterprise options like OpenID connectbasicyesHMAC、JWT、Mutual TLS、OpenID Connect、基本身份驗證、LDAP、社交OAuth(例如 GPlus,Twitter,Github)和傳統基本身份驗證提供成程序開發實現
tracingyesyesyesyes需要其他組件
istio集成nonoyesnono
dashboardyesyesgrafana,Prometheusyesno

主要關注 Kong、Traefik 和 Zuul 即可

  • 從開源社區活躍度來看,無疑是 KongTraefik 較好;
  • 從成熟度來看,較好的是 Kong、Tyk、Traefik;
  • 從性能來看,Kong 要比其他幾個領先一些;
  • 從架構優勢的擴展性來看,Kong、Tyk 有豐富的插件,Ambassador也有插件但不多,而Zuul是完全需要自研,但Zuul由于與Spring Cloud深度集成,使用度也很高,近年來Istio服務網格的流行,Ambassador因為能夠和Istio無縫集成也是相當大的優勢。

四、Traefik 的后端跟蹤系統

工具JaegerZipkinDatadogInstanaElasticHaystack
主要用途分布式追蹤(APM),支持全棧監控,分析微服務延遲和依賴關系分布式追蹤(APM),輕量級,適合成熟微服務架構。全棧可觀測性(APM、日志、指標、安全),商業 SaaS 服務。
自動化監控(APM、日志、指標),支持 200+ 技術棧,AI 驅動根因分析。全棧可觀測性(APM、日志、指標),基于 Elasticsearch 的開源/商業解決方案。NLP 檢索與問答系統(非追蹤系統),用于構建文檔檢索和語義搜索。
學習曲線中等中等中等
成本開源免費(需第三方存儲)開源免費(需第三方存儲)商業付費(需訂閱)商業付費(需訂閱)開源免費(商業版需付費)開源免費
社區star21.1k17.1k3k477.5k19.8k
配置語言YAML/CLIYAML/Java配置YAML/JSON/Cloud UI自動化配置(無手動)YAML/JSON/Kibana UIPython/JSON
部署方式Docker、Kubernetes、云服務Docker、Kubernetes、獨立部署云服務、混合部署(需代理)云服務、自托管代理Docker、Kubernetes、本地部署Docker、Python 環境
可擴展性高(支持多種存儲如 Cassandra/Elasticsearch,插件豐富)中(依賴自定義存儲,架構較老)高(云原生擴展性強,集成豐富)高(自動適應技術變化,支持大規模環境)高(彈性擴展,支持多集群和云原生)中(依賴外部存儲如 Elasticsearch/Faiss)
開發語言GoJavaGoGoGoPython
  • 輕量級 APM:Zipkin(簡單快速啟動)
  • 全棧可觀測性:Elastic(開原生態)或 Datadog(商業 SaaS)
  • 自動化監控:Instana(AI 驅動,適合復雜環境)
  • NLP 檢索系統:Haystack(需注意用途差異)

4.1 Jaeger


??Jaeger 是一款強大的開源分布式追蹤系統,專門用于監控和排查基于微服務的分布式系統。借助其可擴展和靈活的架構,Jaeger 能夠處理大量的數據,提供非常優秀的性能表現。

Jaeger的特點

  • 開源免費:Jaeger 是一款開源解決方案,任何人都可以免費使用。
  • 提供先進的搜索和可視化功能:幫助你了解請求的流向,并找出系統中的瓶頸或問題。
  • 支持 Elasticsearch 進行數據持久化:確保數據的穩定保存和高效查詢。
  • 默認提供 Prometheus 指標:讓你更方便地監控系統性能。
  • 使用 Jaeger UI,用戶可以根據服務、持續時間和標簽輕松過濾追蹤:讓你更方便地找到所需的信息。

??Jaeger 憑借其強大的功能和開放的特性,在分布式追蹤領域受到了許多開發者的歡迎。從監控到排錯,從可視化到過濾,Jaeger 為微服務的管理和維護提供了全方位的支持,是許多開發者不可或缺的工具之一。
在這里插入圖片描述

在這里插入圖片描述

4.2 Zipkin


在這里插入圖片描述
在這里插入圖片描述

??Zipkin 是另一種流行的開源分布式跟蹤解決方案。最初由 Twitter 開發,用于收集他們的計時數據來排查延遲問題,現在由 OpenZipkin 社區維護。

Zipkin 的特點

  • 提供基于網頁的用戶界面以可視化追蹤數據:使得數據分析更加直觀便捷。
  • 允許用戶根據服務名稱、時間范圍等進行追蹤過濾:可以迅速找到你關注的部分。
  • 提供諸如依賴關系圖和火焰圖等可視化展示:更形象地展現系統的運作狀態。
  • 支持與各種工具集成,如日志和度量平臺:提供更全面的監控和分析功能。
  • 開源:開放的社區支持和免費使用。

??Zipkin 憑借其強大的可視化功能和靈活的過濾選項,在分布式追蹤領域贏得了不少贊譽。不管是大公司還是小團隊,都可以借助 Zipkin 更加輕松地監控和排查基于微服務的系統,了解系統的運行狀況和性能表現。其開源的特性也讓更多的開發者能夠參與其中,共同推動這一領域的進展。

4.3 Datadog


??DataDog 是一款流行的基于云的監控平臺,讓你可以通過各種指標、日志和追蹤來監控微服務。它實時展現了你的系統行為,確保你對系統的運行狀況有清晰的了解。

DataDog的特性

  • 提供異常檢測功能:可以自動通知用戶系統的異常行為。
  • 支持可視化服務、服務依賴關系和位置:你可以更直觀地看到系統的組成和運作方式。
  • 用戶可分析追蹤和深入指標:通過這些信息,可以輕松找出問題的根本原因。
  • 支持每個APM主機高達50次追蹤:足夠滿足大部分監控需求。
  • 支持多個云支持供應商:包括 AWS、Azure 和 GCP 等。

??DataDog 以其強大的功能和靈活的應用,成為了許多企業和開發人員監控微服務的首選工具。無論是系統的實時運行情況,還是深入診斷問題,DataDog 都能提供有效的支持,讓你對自己的系統有更全面、更精確的掌控。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898599.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898599.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898599.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NewStar CTF web wp

文章目錄 week1headach3會贏嗎智械危機謝謝皮蛋PangBai 過家家(1) week3include meblindsql1臭皮的計算機臭皮踩踩背這照片是你嗎 week4Pangbai過家家四blindsql2chocolateezcmsssezpollute隱藏的密碼 weeek5pangbai過家家(5)redissqlshell臭皮吹泡泡臭皮…

Linux驅動開發-①中斷②阻塞、非阻塞IO和異步通知

Linux驅動開發-①中斷②阻塞、非阻塞IO和異步通知 一,中斷1.中斷的流程2.上半部和下半部2.1上半部2.2下半部2.2.1 tasklet2.2.2 工作隊列 3.按鍵延時消抖中斷程序 二,阻塞和非阻塞IO和異步通知1.阻塞IO1.1 常見結構11.2 常見結構2 2.非阻塞IO2.1 驅動結構…

Docker和Dify學習筆記

文章目錄 1 docker學習1.1 基本命令使用1.1.1 docker ps查看當前正在運行的鏡像1.1.2 docker stop停止容器1.1.3 docker compose容器編排1.1.4 docker網絡[1] 進入到容器里面敲命令[2] docker network ls[3] brige網絡模式下容器訪問宿主機的方式 2 Dify的安裝和基礎使用2.1 下…

高并發庫存系統是否適合使用 ORM(Hibernate / MyBatis)

在設計高并發的庫存管理系統時,數據層的選擇至關重要。許多企業開發中習慣使用 ORM(如 Hibernate、MyBatis)來簡化數據庫訪問,但在高并發、高吞吐的場景下,ORM 的適用性往往成為爭議焦點。本文將探討高并發庫存系統是否…

Web爬蟲利器FireCrawl:全方位助力AI訓練與高效數據抓取。本地部署方式

開源地址:https://github.com/mendableai/firecrawl 01、FireCrawl 項目簡介 Firecrawl 是一款開源、優秀、尖端的 AI 爬蟲工具,專門從事 Web 數據提取,并將其轉換為 Markdown 格式或者其他結構化數據。 Firecrawl 還特別上線了一個新的功…

探秘Transformer系列之(16)--- 資源占用

探秘Transformer系列之(16)— 資源占用 文章目錄 探秘Transformer系列之(16)--- 資源占用0x00 概述0x01 背景知識1.1 數據類型1.2 進制&換算數字進制存儲度量換算 1.3 參數顯存占用有參數的層無參數的層所需資源 1.4 計算量 0…

jaeger安裝和簡單使用

文章目錄 jaeger安裝和使用什么是jaegerjaeger安裝 jaeger安裝和使用 什么是jaeger 官網:https://www.jaegertracing.io/ Jaeger 是一個分布式追蹤系統。Jaeger的靈感來自 Dapper 和 OpenZipkin,是一個由 Uber 創建并捐贈給 云原生計算基金會&#xf…

【Mybatis-plus】在mybatis-plus中 if test標簽如何判斷 list不為空

博主介紹:?全網粉絲22W,CSDN博客專家、Java領域優質創作者,掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域? 技術范圍:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大數據、物…

FRP在物聯網設備中的穿透方案

物聯網設備常位于NAT后,FRP為其提供穩定穿透鏈路。 配置要點 輕量化部署:使用ARM版本FRP客戶端,適配樹莓派等設備9。 自啟動腳本:通過systemd或crontab實現設備重啟后自動連接26。 低功耗優化:調整心跳間隔&#xf…

【遞歸,搜索與回溯算法篇】- 名詞解釋

一. 遞歸 1. 什么是遞歸? 定義: 函數自己調用自己的情況關鍵點: ?終止條件: 必須明確遞歸出口,避免無限遞歸 ?子問題拆分: 問題需能分解成結構相同的更小的子問題缺點: ?棧溢出風險&#x…

條件變量,鎖,共享數據的關系

條件變量、共享數據和鎖之間的三方耦合關系源于多線程環境下對資源訪問的同步需求。以下是關鍵點分析: 條件變量中通常會對共享數據進行判斷和處理,如果不加鎖就會出現數據競爭的問題,所以并不是條件變量要跟鎖一起使用,而是上鎖為…

大屏技術匯集【目錄】

Cesium 自從首次發布以來,經歷了多個版本的迭代和更新,每個版本都帶來了性能改進、新功能添加以及對現有功能的優化。以下是 Cesium 一些重要版本及其主要特點: 主要版本概述 Cesium 1.0 (2012年) 初始版本發布,確立了Cesium作為…

圖解AUTOSAR_CP_EEPROM_Abstraction

AUTOSAR EEPROM抽象模塊詳細說明 基于AUTOSAR標準的EEPROM抽象層技術解析 目錄 1. 概述 1.1 核心功能1.2 模塊地位2. 架構概覽 2.1 架構層次2.2 模塊交互3. 配置結構 3.1 主要配置容器3.2 關鍵配置參數4. 狀態管理 4.1 基本狀態4.2 狀態轉換5. 接口設計 5.1 主要接口分類5.2 接…

C++相關基礎概念之入門講解(下)

1. 引用 ? int main() {const int a10;int& aaa;aa;cout<<aa<<endl; } 引用 不是新定義一個變量&#xff0c;而 是給已存在變量取了一個別名 &#xff0c;編譯器不會為引用變量開辟內存空 間&#xff0c;它和它引用的變量 共用同一塊內存空間&#xff08;初…

注意力機制,本質上是在做什么?

本文以自注意機制為例&#xff0c;輸入一個4*4的矩陣 如下&#xff1a; input_datatorch.tensor([[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16] ],dtypetorch.float) 得到Q和K的轉置如下。 此時&#xff0c;計算QK^T ,得到如下結果 第一行第一個位置就是第一條樣本和第…

記一次wsl2+docker無法運行的經歷

前情提要 由于某個大創項目的需要和對貓娘機器人的迫切渴求&#xff08;bushi 需要在電腦里面安裝docker desktop。由于電腦里面安裝了wsl2環境 因此決定使用wsl2dockerdesktop的方式配置docker 遇到的問題 在像往常一樣安裝docker desktop并且啟動時 提示錯誤&#xff1a; …

PageHelper插件依賴引入不報錯,但用不了

情況: 父模塊pom. Xml 引入1. 4. 0以上版本的pagehelper-spring-boot-starter。 要用到插件的子模塊&#xff0c;去掉版本號&#xff0c;引入和父模塊一樣的依賴。 引入成功&#xff0c;沒有報錯&#xff0c;但是打開右邊的maven里面沒有找到PageHelper插件。 終端清空并重…

Windows搭建免翻墻的BatteryHistorian

文章參考 GitCode - 全球開發者的開源社區,開源代碼托管平臺 免翻墻的BatteryHistorian主要原理&#xff1a;修改go源碼 1.安裝Java環境 1.點擊下載 Java JDK&#xff0c;并安裝,一路next 2.java -version 檢驗是否安裝成功 2.安裝Git工具 1、點擊下載 Git&#xff0c;并…

項目中pnpm版本和全局pnpm版本不一致

項目中pnpm版本和全局pnpm版本不一致 檢查package.json中&#xff0c;是否存在"packageManager": “pnpm8.6.10”&#xff0c;限制了pnpm的版本。

透析Vue的nextTick原理

nextTick 是 Vue.js 中的一個核心機制&#xff0c;用于在 下一次 DOM 更新周期后 執行回調函數。它的核心原理是 利用 JavaScript 的事件循環機制&#xff08;Event Loop&#xff09;&#xff0c;結合微任務&#xff08;Microtask&#xff09;或宏任務&#xff08;Macrotask&am…