深入理解 Sentinel 限流组件推模式实现
在微服务架构中,流量控制是保障系统稳定性的核心手段,Sentinel 作为主流限流组件,其规则同步模式直接影响分布式环境下的可用性。本文将聚焦 Sentinel 推模式的实现细节,对比拉模式的局限性,并补充多种主流实现方案,为线上分布式场景提供实践参考。 一、Sentinel 规则同步的两种核心模式在正式讲解推模式前,需先明确 Sentinel 规则同步的两种基础模式:拉模式(Pull Mode) 与 推模式(Push Mode),二者的核心差异在于规则的主动方与持久化方式。 1.1 拉模式:本地文件驱动的“被动同步”拉模式是 Sentinel 最基础的规则同步方式,核心依赖本地文件存储,实现逻辑如下: 客户端通过定时任务(默认间隔 3 秒)主动读取本地配置文件(如 JSON 格式); 若文件内容变更,客户端更新本地规则缓存,生效限流逻辑; 服务端(或运维人员)需手动向每个客户端节点推送文件,才能实现规则更新。 局限性: 无法实现“一策多节点”:规则仅对单个节点生效,若微服务部署 10 个实例,需手动更新 10 次配置文件; 无持久化保障:本地文件易丢失,且无法追溯规则变更...
Tomcat的IO模型与性能调优
1. Tomcat的I/O模型1.1 Linux I/O模型I/O要解决什么问题?I/O本质上是在解决在计算机内存与外部设备之间拷贝数据的过程 程序通过CPU向外部设备发出读指令,数据从外部设备拷贝至内存需要一段时间,这段时间CPU就没事情做了,程序此时有两种选择: 让出CPU资源,CPU执行其他任务 继续使用CPU轮询数据是否拷贝完成 采取的具体策略就是不同I/O模型要解决的问题 以网络数据读取为例分析,会涉及两个对象,一个是调用I/O操作的用户线程,另一个是操作系统内核。一个进程的地址空间分为用户空间和内核空间,基于安全上的考虑,用户程序只能访问用户空间,内核程序可以访问整个进程空间,只有内核可以直接访问各种硬件资源,比如磁盘和网卡。 当用户线程发起I/O调用后,网络数据读取操作会经历两个步骤: 数据准备阶段:用户线程等待内核将数据从网卡拷贝到内核空间 数据拷贝阶段:内核将数据从内核空间拷贝到用户空间(用户进程的缓冲区) Linux的I/O模型分类 同步阻塞I/...
Tomcat类加载机制与热部署原理详解
1.Tomcat类加载机制详解1.1 JVM类加载器Java中有3种类加载器,当然你也可以自定义类加载器 引导类加载器(启动类加载器):负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,比如rt.jar、charsets.jar 扩展类加载器:负责加载支撑JVM运行的JRE的lib目录下ext扩展目录中的核心jar包 应用程序类加载器(系统类加载器):负责ClassPath路径下的类包,主要就是加载你自己写的类 自定义类加载器:自己实现,负责加载自定义路径下的类包1234567891011121314151617public class ClassLoaderDemo{ public static void main(String[] args){ // BootStrapClassLoader c/c++实现,java层面是获取不到的,会输出null System.out.println(ReentrantLock.class.getClassLoader()); // ExtClassLoader System.out...
Tomcat 整体结构以及设计源码分析
1. Tomcat是什么?Tomcat 是一款开源的 Java Web 服务器 + Servlet 容器,由 Apache 软件基金会开发维护,主要用于部署和运行 Java Web 应用程序(如基于 Servlet、JSP、Spring MVC 等技术的应用)。它是 Java 生态中最流行的 Web 容器之一,兼具轻量性、稳定性和易扩展性,广泛用于开发和生产环境。 123456789apache-tomcat-10.0.0/├── bin/ # 脚本与可执行文件目录├── conf/ # 配置文件目录├── lib/ # 核心依赖库目录├── webapps/ # Web 应用部署目录├── logs/ # 日志文件目录├── temp/ # 临时文件目录├── work/ # JSP 编译缓存目录└── LICENSE、NOTICE 等 # 许可证和说明文件 2. WEB应用部...
G1 垃圾收集器学习笔记
G1垃圾收集器学习笔记2025-09-23一、G1垃圾收集器概述G1(Garbage-First)是Java 9默认的垃圾收集器,核心特性如下: 取消物理分代:将内存划分为2048个逻辑Region(默认值) 动态分区管理:年轻代/老年代区域可相互转化 巨型对象处理:新增Humongous区存储超Region 50%的大对象 二、内存管理机制1. 内存分区 逻辑分区:保留年轻代(Eden/Survivor)、老年代概念 物理结构: 默认2048个Region(通过-XX:G1HeapRegionSize调整) 年轻代初始占比5%(动态调整,上限60%) Eden:Survivor默认比例8:1:1 2. 特殊区域 Humongous区: 存储超过Region 50%的大对象 若对象超过单个Region大小,会被分割存储于多个连续Region 三、垃圾回收流程G1回收分为四个阶段: 初始标记(Stop The World) 标记GC Roots直接引用对象 并发标记(Concurrent) 与...
Seata AT 模式与 XA 模式的区别
1. 模式区别 AT 模式:生成的是数据源代理(DataSource Proxy),通过代理拦截 SQL 执行,无需额外配置默认模式(Seata 默认支持 AT 模式),而非“数据库动态代理”(表述更精准)。 XA 模式:生成的是 XA 数据源代理(XADataSource Proxy),需在 YAML 中显式配置 seata.tx-mode=XA(而非仅“配置默认模式为 XA”),且依赖数据库原生 XA 协议支持(如 MySQL、Oracle 的 XA 事务能力)。 2. AT 模式流程 第一步会申请全局事务 ID(XID)(需明确“全局”,与分支事务 ID 区分)。 基于原有分布式服务调用逻辑扩展,实现异常后的自动回滚(而非“自动补偿”)——补偿逻辑通过 Undo Log 反向生成 SQL 实现,需明确概念。 事务开始前:申请 XID 并存储到 ThreadLocal(Seata 内部通过 RootContext 管理 XID,MDC 通常用于日志打印携带 XID,非核心存储位置,修正存储载体);往 TC(事务协调器)的全局事务表(global_table)插入记录;将数据...
Seata 分布式事务其他模式学习笔记
今天学习了 Seata 分布式事务的其他模式,包括 XA 模式、TCC 模式和 Saga 模式,以下是详细整理: 一、XA 模式 核心特点 连接持有机制:XA 模式会持有数据库连接(如 MySQL 的 Connection 对象)直至两阶段提交完成,在此期间连接无法释放,可能影响数据库连接池性能。 注解使用:需同时使用 @GlobalTransactional (保证分布式事务的提交/回滚)和 @Transactional (保证本地事务正常提交)两个注解。 两阶段流程:1. 一阶段:各分支事务执行本地业务逻辑,但不提交,仅记录日志并等待全局协调。2. 二阶段:事务协调者(TC)根据全局事务状态,决定所有分支事务执行 commit (提交)或 rollback (回滚)。 优缺点 优点:强一致性,依赖数据库原生 XA 协议,无需侵入业务代码。 缺点:长期持有连接导致性能损耗大,不适合高并发场景,一般不推荐使用。 二、TCC 模式 核心概念 TCC 模式将分布式事务分为三个阶段,需手动实现业务逻辑: 1. Try:资源检查与预留(如扣减库存前检查库...
Sentinel 拉模式实现详解
一、为什么需要 Sentinel 拉模式?Sentinel 默认的内存模式存在明显缺陷:限流规则仅存储在客户端内存中,应用重启后规则全部丢失,无法满足生产环境的规则持久化与统一管理需求。 拉模式是 Sentinel 规则持久化的核心方案之一,其核心逻辑是客户端主动通过定时轮询,从外部存储(如 MySQL、本地文件)拉取规则,并结合 SPI 扩展机制实现自定义数据源,彻底解决“重启失效”问题。本文将完整拆解拉模式的实现流程,基于 MySQL 存储规则,适配 Spring Boot 场景。 二、拉模式与 SPI 的关系在动手实现前,先理清两个关键概念,避免与推模式混淆: 概念 作用说明拉模式 客户端通过定时任务主动轮询外部存储(如 MySQL),获取最新规则并加载到 Sentinel,实时性取决于轮询间隔。SPI 扩展机制 Sentinel 提供 ReadableDataSource 接口作为 SPI 扩展点,允许自定义“规则读取逻辑”,框架启动时自动扫描加载。 三、完整实现步骤(基于 MySQL + Spring Boot)1. 环境准备:引入依赖在 pom.xml 中添...
Sentinel源码学习笔记
Sentinel源码学习笔记一、客户端与服务端的交互流程 1. 连接建立:客户端启动时通过配置的服务端地址(如 spring.cloud.sentinel.transport.dashboard.server )与Sentinel Dashboard建立长连接(HTTP长轮询或WebSocket),定期发送心跳包保持连接。2. 数据同步: 客户端将实时统计的监控数据(QPS、异常数等)通过长连接上报给服务端,服务端在控制台展示实时监控图表。 服务端通过长连接向客户端推送规则配置(流控、熔断等),客户端接收后更新本地规则缓存并生效。3. 指令交互:服务端可通过控制台手动触发客户端规则更新、熔断状态重置等指令,客户端接收后执行对应操作并返回结果。 二、自动配置类(以Spring Cloud整合为例)的核心逻辑 SentinelAutoConfiguration 是核心自动配置类,主要执行以下操作: 1. 初始化核心组件:注册 SentinelResourceAspect 切面,通过AOP拦截被 @SentinelResource 注解标记的资源(方法/接口...
Sentinel 控制台用法与工作原理学习笔记
Sentinel 控制台用法与工作原理学习笔记一、流控规则配置 基础控制维度:支持对 QPS(每秒查询率)和并发线程数进行控制。 三种流控模式: 直接关系:直接针对接口配置流量规则,可设置 QPS 或并发线程数阈值,当触发阈值时直接对该接口进行限流。 关联关系:适用于存在关联的服务,例如调用 A 服务的请求过多时,可配置当 A 服务的 QPS 或并发线程数达到阈值后,对关联的 B 服务进行流量控制,避免因 A 服务过载影响 B 服务。 链路关系:针对具有调用关系的链路进行配置,可对链路上的特定节点或多个节点限流,进而控制整个链路的流量。需注意:1.7 版本后,链路控制功能需在配置文件中设置 WebContextUtile 参数为 false 才能生效。 三种流控类型: 快速失败:当接口请求超过设定阈值(QPS 或并发线程数)时,直接返回失败结果。 接口预热:服务启动时,通过模拟线程加载缓存等资源,避免刚启动就被大量流量击垮,逐渐提升接口处理能力至阈值。 排队等待:可设置超时时间,请求会进入队列等待处理。若超时则被剔除并返回失败;未超时则正常响应。例如,阈值设为 20 时,每秒...