常见面试题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:向响应头中添加指定的键值对。

目录
相关文章
|
7月前
|
JavaScript 安全
vue3使用ts传参教程
Vue 3结合TypeScript实现组件传参,提升类型安全与开发效率。涵盖Props、Emits、v-model双向绑定及useAttrs透传属性,建议明确声明类型,保障代码质量。
627 0
|
8月前
|
缓存 Java 数据库
常见面试题13
本文详解Spring核心机制:Bean生命周期(实例化、依赖注入、初始化、销毁)、三级缓存无法解决构造函数循环依赖(需@Lazy解决)、AOP原理(动态代理实现日志、权限控制)及事务管理(@Transactional与传播行为),并梳理常用注解分类。
291 5
|
7月前
|
Java 项目管理 Maven
Maven项目管理与构建自动化完全指南
Maven彻底改变了Java项目管理方式,通过POM模型、依赖管理和标准化构建流程,大幅提升开发效率。本文深入解析其核心概念、多模块管理、私服搭建及与Spring Boot、Docker等现代技术栈的集成实践,助力开发者实现高效、规范的项目构建与团队协作。
1194 156
Maven项目管理与构建自动化完全指南
|
7月前
|
缓存 安全 Java
JUC系列之《CountDownLatch:同步多线程的精准发令枪 》
CountDownLatch是Java并发编程中用于线程协调的同步工具,通过计数器实现等待机制。主线程等待多个工作线程完成任务后再继续执行,适用于资源初始化、高并发模拟等场景,具有高效、灵活、线程安全的特点,是JUC包中实用的核心组件之一。
|
微服务 设计模式 测试技术
深入理解 DDD(领域驱动设计)思想
领域驱动设计(DDD)是一种以业务为核心的软件开发方法,通过限界上下文、聚合、实体、值对象等模型,分离业务与技术复杂性,提升系统可维护性与扩展性,尤其适用于复杂业务系统的架构设计。
2090 7
|
7月前
|
运维 监控 API
《SaaS应用技术攻坚:从定制化到运维的六大核心实践拆解》
本文结合项目管理SaaS开发实践,拆解六大核心技术实践:迭代时按租户规模分层灰度发布,同步配置并设自动回滚保障稳定;租户隔离采用“逻辑+物理”混合方案,结合数据中台解决跨租户统计难题;基于K8s构建租户级弹性伸缩,按访问特征分组并优化阶梯策略平衡性能成本;以插件化架构处理定制需求,通过标准接口与扩展表实现标准化与个性化平衡;从索引、SQL、分库分表三维度优化数据库性能;构建租户级运维监控体系,聚焦业务、系统、数据指标实现精准告警与快速排查。
411 3
|
7月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
766 6
|
8月前
|
SQL Java 索引
常见面试题12
通过SkyWalking链路追踪或MySQL慢查询日志定位慢SQL,结合explain分析执行计划,优化索引与表设计,提升SQL性能。Spring中IOC实现对象托管,DI完成依赖注入,Bean默认单例非线程安全,作用域可配置,初始化时机分情况而定。
175 7
|
7月前
|
数据库 微服务
常见面试题19
BASE理论提出“基本可用、软状态、最终一致性”,是分布式系统中对CAP定理的实践妥协。相比强一致的刚性事务(ACID),它属于柔性事务,强调高可用与最终一致,适用于Seata等分布式事务方案中的AT、TCC、SAGA模式,而非传统2PC的强一致性。
135 7
|
7月前
|
负载均衡 安全 应用服务中间件
常见面试题18
正向代理代表客户端发起请求,隐藏客户端身份,用于访问控制与隐私保护;反向代理代表服务器接收请求,实现负载均衡与安全防护;CDN通过全球节点加速内容分发;Nginx可作反向代理实现轮询、权重等负载均衡策略;CAP定理指出分布式系统无法同时满足一致性、可用性与分区容错性。
165 4