SpringCloudGateway之高性能篇

news2024/9/22 13:30:17

SpringCloudGateway之高性能篇

背景

在公司的开放平台中,为了统一管理对外提供的接口、处理公共逻辑、实现安全防护及流量控制,确实需要一个API网关作为中间层。
在这里插入图片描述

场景

统一接入点:
API网关作为所有对外服务的单一入口,简化客户端对内部系统的访问,同时方便整体管理和运维。

公共逻辑处理:
在Spring Cloud Gateway中,可以通过自定义过滤器(GatewayFilter)的方式集中处理公共逻辑,例如全局异常处理、日志记录、跨域支持等。

权限验证:
可以在过滤器中实现JWT token验证或者其他认证方式,验证请求的合法性。例如,可以通过pre类型的过滤器对请求头中的Authorization信息进行验证。

限流控制:
使用Spring Cloud Gateway内置的RequestRateLimiter过滤器或者集成第三方限流组件(如Sentinel或Redis RateLimiter),限制来自单个IP地址、用户或服务的请求速率,防止因过载导致系统崩溃。

路由转发:
根据请求路径或其他条件,通过定义路由规则(RoutePredicateFactory)将请求转发至对应的服务实例,同时也可在路由层面实现灰度发布、A/B测试等功能。

熔断与降级:
集成熔断组件如Hystrix或Resilience4j,当后端服务不可用或响应过慢时,及时触发熔断机制,返回预设的错误提示或默认数据,避免连锁反应导致整个系统崩溃。

SpringCloudGateway示例

spring:
  cloud:
    gateway:
      routes:
      - id: my_public_api
        uri: lb://backend-service
        predicates:
        - Path=/api/public/**
        filters:
        - name: TokenAuthenticationFilter # 自定义的Token验证过滤器
        - name: RequestRateLimiter # 限流过滤器
          args:
            key-resolver: "#{@remoteAddrKeyResolver}"
            rate-limiter: "#{@customRateLimiter}"
        - name: Hystrix # 熔断过滤器
          args:
            name: fallbackcmd
            fallbackUri: forward:/fallback

SpringCloudGateway与zuul区别

维度SpringCloudGatewayzuul
社区生态社区热度高社区热度较低、中文文档多
易用性spring cloud 组件集成;基于springboot2.0;需要项目升级至springboot2.Xspring cloud netflix组件集成zuul1.x版本,1.x版本基于阻塞io;2.X版本就netty,异步非阻塞io,支持长连接,但springcloud暂时未集成。zuu1.x版本基于springboot1.x
性能nacos+spring cloud gateway+service;个人本地压测;100并发:3ms;500并发:3ms;5000并发:320ms。相关资料:并发较低的情况下两者一样,并发较高springcloudgateway是zuul1.x的1.6倍eureka+zuul+service。个人本地压测:100并发:3ms;500并发:5ms;5000并发:267ms
维护状态springcloud组件,持续更新,版本从2.0.0开始springcloud组件仅支持到1.X,zuulcore持续维护2.1.4至今
重点功能,特点过滤器有global filter和gatewayfilter,分为全局和局部;基于netty转发。过滤器仅为全局过滤器;基于servlet同步阻塞转懾穵咗榼瘛澔者瓯。

网关整体设计及常用架构

在这里插入图片描述

在这里插入图片描述

优化思路

1、去掉不必要的日志打印
2、调整中间件的关键参数和回收机制
3、框架核心代码重写
4、路由分级切割
5、多级网关路由设计
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1534974.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Go语言创建HTTP服务器并展示网页

使用Go语言创建一个简单的服务器时可以先建立一个项目根目录,随后在根目录中建立一个用于存放静态文件(HTML/CSS/JavaScript)的文件夹 GGboy,接下来输入命令初始化Go模块 go mod init GGboy // 项目名称是 GGboy 在出现 go.mod 文…

QT:三大特性

QT的三大特性: 1、信号与槽 2、内存管理 3、事件处理 1、信号与槽 当信号产生时,就会自动调用绑定的槽函数。 自定义信号: 类中需要添加O_OBJECT宏 声明: signals标签之下进行声明 定义: 信号不需要定义 …

Java项目基于Docker打包发布

一、后端项目 1.打包应用 mvn clean package -DskipTests 2、新建dockerfile文件 #基础镜像 FROM openjdk:8 #工作空间 WORKDIR /opt #复制文件 COPY wms-app-1.0-SNAPSHOT.jar app.jar #配置容器暴漏的端口 EXPOSE 8080 RUN ls #强制执行命令 ENTRYPOINT [ "java&quo…

谷粒商城——缓存的概念

1. 使用缓存的好处:减少数据库的访问频率,提高用户获取数据的速度。 2. 什么样的数据适合存储到缓存中? ①及时性、数据一致性要求不高的数据,例如物流信息、商品类目信息 ②访问量大更新频率不高的数据(读多、写少) 3. 读模式…

sentinel熔断规则详解

1、慢调用降级熔断 1.1、参数详解 最大RT:调用接口的最大时间。 比例阈值:超过了最大RT调用时间的请求的比例。 熔断时长:触发熔断后,熔断的时间 最小请求数据:每秒最少的请求数量,只有大于等于这个数…

电网的正序参数和等值电路(一)

本篇为本科课程《电力系统稳分析》的笔记。 本篇为第二章的第一篇笔记。 电力系统正常运行中,可以认为系统的三相结构和三相负荷完全对称。而对称三相的计算可以用一相来完成,其中所有给出的标称电压都是线电压的有效值,假定系统全部是Y-Y型…

基于Python3的数据结构与算法 - 16 链表

目录 链表 1. 创建链表 2. 链表的插入和删除 3. 双链表 4. 链表总结 链表 链表是由一系列节点组成的元素集合。每个节点包含两部分,数据域item和指向下一个节点得指针next。通过节点之间的相互连接,最终串联成一个链表。 class Node:def __init…

Unity访问安卓(Android)或苹果(iOS)相册

1.下载Native Gallery for Android & iOS插件 2.在场景中添加截图按钮、选择图片按钮、选择视频按钮等 using OpenCVForUnity.CoreModule; using OpenCVForUnity.ImgprocModule; using OpenCVForUnity.UnityUtils; using System.Collections; using System.Collections.Gen…

好用的GPTs:指定主题搜索、爬虫、数据清洗、数据分析自动化

好用的GPTs:指定主题搜索、爬虫、数据清洗、数据分析自动化 Scholar:搜索 YOLO小目标医学方面最新论文Scraper:爬虫自动化数据清洗数据分析 点击 Explore GPTs: Scholar:搜索 YOLO小目标医学方面最新论文 搜索 Scho…

C语言 swab 函数学习

swab函数交换字符串中相邻两个字节; void _swab( char *src, char *dest, int n ); char *src: 要拷贝、转换的字符串, char *dest,转换后存储到dest所表示的字符串, int n要拷贝、转换的字节数; 所…

交通事故档案管理系统|基于JSP技术+ Mysql+Java+Tomcat的交通事故档案管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…

关于OceanBase中旁路导入的应用分享

背景 前段时间,在用户现场协助进行OceanBase的性能测试时,我注意到用户常常需要运用 insert into select 将上亿行的数据插入到一张大宽表里,这样的批量数据插入操作每次都需要耗时半个小时左右。对这一情况,我提议用户尝试采用旁…

福建科立讯通信 指挥调度管理平台 SQL注入漏洞复现(CVE-2024-2620、CVE-2024-2621)

0x01 产品简介 福建科立讯通信指挥调度管理平台是一个专门针对通信行业的管理平台。该产品旨在提供高效的指挥调度和管理解决方案,以帮助通信运营商或相关机构实现更好的运营效率和服务质量。该平台提供强大的指挥调度功能,可以实时监控和管理通信网络设备、维护人员和工作任…

SpringMVC | Spring MVC中的“拦截器”

目录: 拦截器 :1. 拦截器的 “概述”2. 拦截器的 “定义” (创建“拦截器”对象)3. 拦截器的 “配置” (让“拦截器”对象生效)4. 拦截器的 “执行流程”“单个拦截器”的执行流程“多个拦截器”的执行流程 作者简介 :一只大皮卡丘,计算机专业…

python云上水果超市的设计与实现flask-django-php-nodejs

伴随着我国社会的发展,人民生活质量日益提高。于是对云上水果超市进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套云上水果超市,帮助商家进行商品信…

图论基础|深度优先dfs、广度优先bfs

dfs 与 bfs 区别 提到深度优先搜索(dfs),就不得不说和广度优先搜索(bfs)有什么区别 先来了解dfs的过程,很多录友可能对dfs(深度优先搜索),bfs(广度优先搜索…

几个常用的控件(2)

目录 一、单选按钮Radiobutton和RadioButtonList 1、Radiobutton控件 (1)button控制方式 (2)Radiobutton控制方式 2、RadiobuttonList控件 二、列表框ListBox和下拉列表DropdownList 1、ListBox 2、DropdownList 三、面板…

H3C技术大全复现之高级路由交换技术 1

华子目录 VLAN 基本技术VLANIEEE 802.1Q交换机端口类型MVRP协议实验测试 VLAN扩展技术Super VLAN产生背景Super vlan(相当于vlanif接口,也属于虚拟接口,可以充当网关)Sub vlan(普通vlan)关于代理ARP普通代理…

【c++入门】命名空间,缺省参数与函数重载

🔥个人主页: Quitecoder 🔥专栏:c笔记仓 朋友们大家好!本篇内容我们进入一个新的阶段,进入c的学习!希望我的博客内容能对你有帮助! 目录 1.c关键字2.第一个c代码3.命名空间3.1 nam…

python智慧农业小程序flask-django-php-nodejs

当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统智慧农业采取了人工的管理方法,但这…