常见面试题17

简介: 本文介绍如何使用Sentinel配置限流,包括启动控制台、引入依赖、设置QPS或线程数规则,并讲解滑动窗口算法在时间窗口限流中的应用。同时概述了Gateway网关的路由、鉴权、限流、缓存、监控等核心作用,及其基于过滤器链的请求处理机制与常见内置过滤器的使用方式。

如何利用Sentinel配置限流

  • 启动Sentinel控制台;
  • 项目中引入Sentinel依赖;
  • 先访问要限流的资源;
  • 访问Sentinel控制台,设置按照qps或者线程数等限流规则

滑动窗口算法

在限流中,滑动窗口算法通常用于实现基于时间的限流策略,例如限制一定时间窗口内的请求数量。

滑动时间窗口算法中只包含1个固定跨度的窗口,但窗口是可移动动的,与时间区间无关。

具体规则如下:

  • 窗口时间跨度Interval大小固定,例如1秒
  • 时间区间跨度为Interval / n ,例如n=2,则时间区间跨度为500ms
  • 窗口会随着当前请求所在时间currentTime移动,窗口范围从currentTime-Interval时刻之后的第一个时区开始,到currentTime所在时区结束。

Gateway网关作用

作用:路由与鉴权,以外有如下:

限流:实现微服务访问流量计算,基于流量计算分析进行限流,可以定义多种限流规则。

缓存:数据缓存。

日志:日志记录。

监控:记录请求响应数据,api耗时分析,性能监控。

鉴权:权限身份认证。

灰度:线上灰度部署,可以减小风险。

路由:路由是API网关很核心的模块功能,此模块实现根据请求,锁定目标微服务并将请求进行转发。

Gateway实现原理

  1. 初始化阶段:Spring Cloud Gateway 启动时会加载配置文件中定义的路由规则,创建对应的 RouteDefinition 对象。
  2. 路由匹配:当接收到一个请求时,Gateway 会依次匹配定义的路由规则,找到符合条件的路由。
  3. 过滤器链:针对匹配到的路由,依次执行该路由配置的过滤器链,对请求进行处理。
  4. 执行过滤器:每个过滤器可以修改请求和响应,记录日志,进行权限校验等操作。
  5. 转发请求:经过所有过滤器处理后,将请求转发给目标服务。
  6. 返回响应:将目标服务的响应返回给客户端。

过滤器实现方式

在 Spring Cloud Gateway 中,过滤器(Filter)用于对传入的 HTTP 请求或传出的 HTTP 响应进行处理,可以实现日志记录、请求转发、权限校验、请求修改等功能。Spring Cloud Gateway内置了许多常用的过滤器,同时也支持自定义过滤器来满足特定的业务需求。以下是一些常用的内置过滤器及其功能:

  1. AddRequestHeader:向请求头中添加指定的键值对。
  2. AddRequestParameter:向请求参数中添加指定的键值对。
  3. RewritePath:重写请求路径。
  4. StripPrefix:去除请求路径中的n段前缀。
  5. SetStatus:设置响应的状态码。
  6. AddResponseHeader:向响应头中添加指定的键值对。

目录
相关文章
|
2月前
|
JavaScript 安全
vue3使用ts传参教程
Vue 3结合TypeScript实现组件传参,提升类型安全与开发效率。涵盖Props、Emits、v-model双向绑定及useAttrs透传属性,建议明确声明类型,保障代码质量。
282 0
|
微服务 设计模式 测试技术
深入理解 DDD(领域驱动设计)思想
领域驱动设计(DDD)是一种以业务为核心的软件开发方法,通过限界上下文、聚合、实体、值对象等模型,分离业务与技术复杂性,提升系统可维护性与扩展性,尤其适用于复杂业务系统的架构设计。
771 0
|
2月前
|
缓存 安全 Java
JUC系列之《CountDownLatch:同步多线程的精准发令枪 》
CountDownLatch是Java并发编程中用于线程协调的同步工具,通过计数器实现等待机制。主线程等待多个工作线程完成任务后再继续执行,适用于资源初始化、高并发模拟等场景,具有高效、灵活、线程安全的特点,是JUC包中实用的核心组件之一。
|
2月前
|
Java 项目管理 Maven
Maven项目管理与构建自动化完全指南
Maven彻底改变了Java项目管理方式,通过POM模型、依赖管理和标准化构建流程,大幅提升开发效率。本文深入解析其核心概念、多模块管理、私服搭建及与Spring Boot、Docker等现代技术栈的集成实践,助力开发者实现高效、规范的项目构建与团队协作。
Maven项目管理与构建自动化完全指南
|
2月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
212 6
|
2月前
|
NoSQL API 调度
常见面试题20
分布式锁适用于共享资源互斥、防止重复操作、控制并发流量等场景,常见于超卖防控。可通过数据库、Redis(如Redisson)、ZooKeeper实现,其中Redisson适合高并发,ZooKeeper保证强一致性。
75 5
|
2月前
|
NoSQL Redis
redis增删查改用什么
因此,我推荐使用成熟的redis增删查改客户端来管理redis的数据,我平时是使用yunedit-redis来管理redis的数据。 因为yunedit-redis不单提供了增删查改的能力,它还能提供了导出导入功能,这对于多云数据迁移十分重要,比如本地redis实例的数据,迁移到阿里云上来。
117 7
|
2月前
|
缓存 负载均衡 Java
常见面试题16
MyBatis提供一级缓存(SqlSession级)和二级缓存(Mapper级),提升查询效率。Eureka通过注册、续约、发现、下线实现服务治理,Nacos在功能与性能上更优,支持配置管理与实时推送。Spring Cloud LoadBalancer取代Ribbon,提供轮询、随机等负载策略。Hystrix与Sentinel均支持熔断限流,但Sentinel在流量控制和实时性上更强。
71 2
|
2月前
|
索引 Python
098-python列表_切片_slice_开始_结束
本文介绍了Python中列表的切片(slice)操作,通过“前闭后开”原则截取列表片段,支持正负索引、省略端点等用法,并结合生活实例(如切面包、直播切片)帮助理解。切片不改变原列表,返回新列表。
239 4
|
2月前
|
存储 缓存 NoSQL
探秘HashMap
探秘HashMap:基于数组+链表/红黑树的高效键值存储,通过哈希计算、扰动函数与位运算实现O(1)级访问,结合扩容与树化机制,在性能与空间间达到精妙平衡,是Java集合核心利器。