微服务架构中的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.mzph.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…