微服务架构中的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.rhkb.cn/news/37298.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中兴B860AV3.2-T/B860AV3.1-T2_S905L3-B_2+8G_安卓9.0_先线刷+后卡刷固件-完美修复反复重启瑕疵

中兴电信B860AV3.2-T/B860AV3.1-T2_晶晨S905L3-B芯片_28G_安卓9.0_先线刷后卡刷-刷机固件包,完美修复刷机后盒子反复重启的瑕疵。 这两款盒子是可以通刷的,最早这个固件之前论坛本人以及其他水友都有分享交流过不少的固件,大概都…

Stable Diffusion lora训练(一)

一、不同维度的LoRA训练步数建议 2D风格训练 数据规模:建议20-50张高质量图片(分辨率≥10241024),覆盖多角度、多表情的平面风格。步数范围:总步数控制在1000-2000步,公式为 总步数 Repeat Image Epoch …

Web3 时代数据保护的关键挑战与应对策略

Web3 时代数据保护的关键挑战与应对策略 随着互联网技术的飞速发展,我们正步入 Web3 时代,这是一个以去中心化、用户主权和数据隐私为核心的新时代。在这个时代,数据保护成为了一个至关重要的议题。本文将探讨 Web3 时代数据保护面临的主要挑…

微信小程序计算属性与监听器:miniprogram-computed

小程序框架没有提供计算属性相关的 api ,但是官方为开发者提供了拓展工具库 miniprogram-computed。 该工具库提供了两个功能: 计算属性 computed监听器 watch 一、安装 miniprogram-computed 在项目的根目录下,使用如下命令,…

实体机安装linux视频教程。windows和ubuntu共存。启动时选择切换引导系统。

登录ubuntu官网下载iso镜像。 https://ubuntu.com/download 桌面版带G U I 操作界面,服务版靠远程命令行操作,类似wsl,没有图形界面,显卡跑满无需分散算力到显示交互界面上。 点alter natice downloads可以下载旧版本。具体版本选…

Numpy

一、Numpy优势 学习目标 目标 了解Numpy运算速度上的优势 知道Numpy的数组内存块风格 知道Numpy的并行化运算 1 Numpy介绍 Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。 Numpy支持常见的数组和矩…

小红书不绑定手机号会显示ip吗

小红书作为一个生活方式分享平台,拥有庞大的用户群体。在小红书上,用户可以分享自己的生活点滴、购物心得、美食体验等,与其他用户进行互动交流。最近,不少用户对于小红书是否会在不绑定手机号的情况下显示IP属地产生了疑问&#…

FPGA multiboot 方案

FPGA multiboot 方案 初版方案 初版方案不需要软件参与,只是为了验证flash启动。当前已完成。 使用jtag 通过vivaod harwaremanager去将fpga bit流文件加载到demo板flash中。 具体操作: 约束添加for golden bitstream # 设置电源参考,1.…

SpringBoot的启动原理?

大家好,我是锋哥。今天分享关于【SpringBoot的启动原理?】面试题。希望对大家有帮助; SpringBoot的启动原理? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot的启动原理主要是通过 SpringApplication 类来…

aws训练快速入门教程

AWS 相关核心概念 简洁地介绍一下AWS训练云服务的核心关联概念: AWS核心服务层: 基础设施层: EC2(计算), S3(存储), RDS(数据库)等人工智能层: SageMaker(训练平台), AI服务等 机器学习服务分级: 高层: 预构建AI服务(开箱即用)中层: SageMaker(主要训练平台)底层: 框架和基…

(一)飞行器的姿态欧拉角, 欧拉旋转, 完全数学推导(基于坐标基的变换矩阵).(偏航角,俯仰角,横滚角)

(这篇写的全是基矢变换矩阵)不是坐标变换矩阵,坐标变换矩阵的话转置一下,之后会有推导. 是通过M转置变换到P撇点.

工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管…

在 Windows 系统下,将 FFmpeg 编译为 .so 文件

1. 准备环境 确保你的 Windows 系统已安装以下工具: Android Studio NDK(Native Development Kit) MSYS2(用于提供类 Unix 环境) FFmpeg 源码 Git Bash(可选,推荐使用) 安装 …

蓝桥杯备考---》分类讨论之Fixed Points

这道题的意思啊,就是说我们在数组里输入n个数,我们尽可能让下标和数组的值相同,我们只能交换一次,最多能有多少个值和下标一样 这里我们需要分类讨论,如果每个下标的值都符合要求,我们就不交换了 如果不是…

什么是数学建模?数学建模是将实际问题转化为数学问题

数学建模是将实际问题转化为数学问题,并通过数学工具进行分析、求解和验证的过程。 一、数学建模的基本流程 问题分析 • 明确目标:确定需要解决的核心问题。 • 简化现实:识别关键变量、忽略次要因素。 • 定义输入和输出:明确模…

Microchip AN1477中关于LLC数字补偿器的疑问

最近在学习Microchip的AN1477关于LLC的功率级传递函数推导及数字补偿器设计,对其中的2P2Z数字补偿器的系数有一些困惑。我在MATLAB中运行了源程序提供的VMC_LLC.m文件,发现有些地方和AN1477中的结果不一致。现在把相关有疑问的地方列举出来,也…

【软考-架构】8.4、信息化战略规划-CRO-SCM-应用集成-电子商务

✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 信息化战略体系💯考试真题第一题第二题 信息系统战略规划💯考试真题第一题第二题 ✨客户关系管理CRM供应链管理SCM💯考试真题第一题第二…

Excel处理控件Spire.XLS系列教程:C# 在 Excel 中添加或删除单元格边框

单元格边框是指在单元格或单元格区域周围添加的线条。它们可用于不同的目的,如分隔工作表中的部分、吸引读者注意重要的单元格或使工作表看起来更美观。本文将介绍如何使用 Spire.XLS for .NET 在 C# 中添加或删除 Excel 单元格边框。 安装 Spire.XLS for .NET E-…

【工具分享】vscode+deepseek的接入与使用

目录 第一章 前言 第二章 获取Deepseek APIKEY 2.1 登录与充值 2.2 创建API key 第三章 vscode接入deepseek并使用 3.1 vscode接入deepseek 3.2 vscode使用deepseek 第一章 前言 deepseek刚出来时有一段时间余额无法充值,导致小编没法给大家发完整的流程&…

Android之悬浮窗实现

文章目录 前言一、效果图二、实现步骤1.AndroidManifest权限以及service注册2.service代码3.activity实现 总结 前言 经常接触音视频以及直播的同学应该知道,悬浮窗是必备需求,今天就记录一下自己悬浮窗的视线过程,流程就是点击缩小按钮回到…