avatar
文章
19
标签
57
分类
29
首页
归档
标签
分类
关于
GoofySatoshi's Blog
搜索
首页
归档
标签
分类
关于

GoofySatoshi's Blog

深入理解 Sentinel 限流组件推模式实现
发表于2025-10-16|更新于2025-10-13|微服务中间件Sentinel|Sentinel•Nacos•限流组件•推模式•Spring生态•分布式流量控制
在微服务架构中,流量控制是保障系统稳定性的核心手段,Sentinel 作为主流限流组件,其规则同步模式直接影响分布式环境下的可用性。本文将聚焦 Sentinel 推模式的实现细节,对比拉模式的局限性,并补充多种主流实现方案,为线上分布式场景提供实践参考。 一、Sentinel 规则同步的两种核心模式在正式讲解推模式前,需先明确 Sentinel 规则同步的两种基础模式:拉模式(Pull Mode) 与 推模式(Push Mode),二者的核心差异在于规则的主动方与持久化方式。 1.1 拉模式:本地文件驱动的“被动同步”拉模式是 Sentinel 最基础的规则同步方式,核心依赖本地文件存储,实现逻辑如下: 客户端通过定时任务(默认间隔 3 秒)主动读取本地配置文件(如 JSON 格式); 若文件内容变更,客户端更新本地规则缓存,生效限流逻辑; 服务端(或运维人员)需手动向每个客户端节点推送文件,才能实现规则更新。 局限性: 无法实现“一策多节点”:规则仅对单个节点生效,若微服务部署 10 个实例,需手动更新 10 次配置文件; 无持久化保障:本地文件易丢失,且无法追溯规则变更...
Tomcat的IO模型与性能调优
发表于2025-10-13|更新于2025-10-13|Java Web中间件Tomcat|Tomcat IO模型•Linux IO模型•Reactor线程模型•Tomcat性能调优•NIO•APR•Tomcat线程池参数•JConsole监控
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类加载机制与热部署原理详解
发表于2025-10-13|更新于2025-10-13|后端技术中间件Tomcat|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 整体结构以及设计源码分析
发表于2025-10-10|更新于2025-10-13|Java Web中间件Tomcat|Tomcat•Tomcat 架构•Servlet 容器•Pipeline-Valve 模式•LifeCycle 接口•Tomcat 源码分析•Web 应用部署
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 垃圾收集器学习笔记
发表于2025-09-22|更新于2025-10-13|JavaJVM垃圾收集器|G1 垃圾收集器•JVM•Java 虚拟机•垃圾回收机制
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 模式的区别
发表于2025-09-19|更新于2025-10-13|分布式系统中间件Seata|Seata•AT模式•XA模式•分布式事务•全局事务ID•Undo Log•事务协调器
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 分布式事务其他模式学习笔记
发表于2025-09-07|更新于2025-10-13|分布式系统中间件|Seata•分布式事务
  今天学习了 Seata 分布式事务的其他模式,包括 XA 模式、TCC 模式和 Saga 模式,以下是详细整理: 一、XA 模式 核心特点 连接持有机制:XA 模式会持有数据库连接(如 MySQL 的  Connection  对象)直至两阶段提交完成,在此期间连接无法释放,可能影响数据库连接池性能。 注解使用:需同时使用  @GlobalTransactional (保证分布式事务的提交/回滚)和  @Transactional (保证本地事务正常提交)两个注解。 两阶段流程:1. 一阶段:各分支事务执行本地业务逻辑,但不提交,仅记录日志并等待全局协调。2. 二阶段:事务协调者(TC)根据全局事务状态,决定所有分支事务执行  commit (提交)或  rollback (回滚)。 优缺点 优点:强一致性,依赖数据库原生 XA 协议,无需侵入业务代码。 缺点:长期持有连接导致性能损耗大,不适合高并发场景,一般不推荐使用。 二、TCC 模式 核心概念 TCC 模式将分布式事务分为三个阶段,需手动实现业务逻辑: 1. Try:资源检查与预留(如扣减库存前检查库...
Sentinel 拉模式实现详解
发表于2025-09-04|更新于2025-10-13|技术微服务|Sentinel•流量控制•拉模式
一、为什么需要 Sentinel 拉模式?Sentinel 默认的内存模式存在明显缺陷:限流规则仅存储在客户端内存中,应用重启后规则全部丢失,无法满足生产环境的规则持久化与统一管理需求。 拉模式是 Sentinel 规则持久化的核心方案之一,其核心逻辑是客户端主动通过定时轮询,从外部存储(如 MySQL、本地文件)拉取规则,并结合 SPI 扩展机制实现自定义数据源,彻底解决“重启失效”问题。本文将完整拆解拉模式的实现流程,基于 MySQL 存储规则,适配 Spring Boot 场景。 二、拉模式与 SPI 的关系在动手实现前,先理清两个关键概念,避免与推模式混淆: 概念 作用说明拉模式 客户端通过定时任务主动轮询外部存储(如 MySQL),获取最新规则并加载到 Sentinel,实时性取决于轮询间隔。SPI 扩展机制 Sentinel 提供  ReadableDataSource  接口作为 SPI 扩展点,允许自定义“规则读取逻辑”,框架启动时自动扫描加载。 三、完整实现步骤(基于 MySQL + Spring Boot)1. 环境准备:引入依赖在  pom.xml  中添...
Sentinel源码学习笔记
发表于2025-09-03|更新于2025-10-13|中间件学习Sentinel|Sentinel•源码解析•中间件
Sentinel源码学习笔记一、客户端与服务端的交互流程 1. 连接建立:客户端启动时通过配置的服务端地址(如  spring.cloud.sentinel.transport.dashboard.server )与Sentinel Dashboard建立长连接(HTTP长轮询或WebSocket),定期发送心跳包保持连接。2. 数据同步: 客户端将实时统计的监控数据(QPS、异常数等)通过长连接上报给服务端,服务端在控制台展示实时监控图表。 服务端通过长连接向客户端推送规则配置(流控、熔断等),客户端接收后更新本地规则缓存并生效。3. 指令交互:服务端可通过控制台手动触发客户端规则更新、熔断状态重置等指令,客户端接收后执行对应操作并返回结果。 二、自动配置类(以Spring Cloud整合为例)的核心逻辑  SentinelAutoConfiguration  是核心自动配置类,主要执行以下操作: 1. 初始化核心组件:注册  SentinelResourceAspect  切面,通过AOP拦截被  @SentinelResource  注解标记的资源(方法/接口...
Sentinel 控制台用法与工作原理学习笔记
发表于2025-09-01|更新于2025-10-13|技术笔记中间件学习|Sentinel•流量控制•熔断降级
Sentinel 控制台用法与工作原理学习笔记一、流控规则配置 基础控制维度:支持对 QPS(每秒查询率)和并发线程数进行控制。 三种流控模式: 直接关系:直接针对接口配置流量规则,可设置 QPS 或并发线程数阈值,当触发阈值时直接对该接口进行限流。 关联关系:适用于存在关联的服务,例如调用 A 服务的请求过多时,可配置当 A 服务的 QPS 或并发线程数达到阈值后,对关联的 B 服务进行流量控制,避免因 A 服务过载影响 B 服务。 链路关系:针对具有调用关系的链路进行配置,可对链路上的特定节点或多个节点限流,进而控制整个链路的流量。需注意:1.7 版本后,链路控制功能需在配置文件中设置 WebContextUtile 参数为 false 才能生效。 三种流控类型: 快速失败:当接口请求超过设定阈值(QPS 或并发线程数)时,直接返回失败结果。 接口预热:服务启动时,通过模拟线程加载缓存等资源,避免刚启动就被大量流量击垮,逐渐提升接口处理能力至阈值。 排队等待:可设置超时时间,请求会进入队列等待处理。若超时则被剔除并返回失败;未超时则正常响应。例如,阈值设为 20 时,每秒...
12
avatar
GoofySatoshi
分享技术、读书笔记和生活点滴
文章
19
标签
57
分类
29
Follow Me
公告
连雨不知春归去,一晴方觉夏已深
最新文章
深入理解 Sentinel 限流组件推模式实现2025-10-16
Tomcat的IO模型与性能调优2025-10-13
Tomcat类加载机制与热部署原理详解2025-10-13
Tomcat 整体结构以及设计源码分析2025-10-10
G1 垃圾收集器学习笔记2025-09-22
分类
  • Java1
    • JVM1
      • 垃圾收集器1
  • Java Web2
    • 中间件2
      • Tomcat2
  • 中间件1
  • 中间件学习1
标签
拉模式 热部署 博客 CI/CD 分布式事务 源码解析 Tomcat 源码分析 推模式 Tomcat性能调优 APR Tomcat 架构 Undo Log Tomcat IO模型 源码分析 Spring Cloud 微服务 动态配置 Java 配置中心 限流组件 源码剖析 Tomcat线程池参数 Sentinel 中间件 流量控制 Seata 事务协调器 Linux IO模型 分布式流量控制 Spring生态 Nacos GitHub XA模式 LifeCycle 接口 工具 全局事务ID Java 虚拟机 Hexo Pipeline-Valve 模式 微服务网关
归档
  • 十月 2025 4
  • 九月 2025 6
  • 八月 2025 6
  • 五月 2025 1
  • 五月 2024 2
网站信息
文章数目 :
19
本站总字数 :
36.3k
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2019 - 2025 By GoofySatoshi
搜索
数据加载中