avatar
文章
20
标签
61
分类
30
首页
归档
标签
分类
关于
GoofySatoshi's Blog
搜索
首页
归档
标签
分类
关于

GoofySatoshi's Blog

多线程并发、等待及通知机制
发表于2025-10-21|更新于2025-10-21|多线程、并发|进程•线程•Java并发•操作系统
1. 基础概念进程进程 = 程序 + 执行 进程是系统分配资源的基本单位(内存、CPU时间片)进程是用来实现多进程并发执行的一个实体,实现对CPU的虚拟化,让每个进程感觉都拥有一个CPU,核心技术就是上下文切换和进程调度。进程是正在运行的程序的实例。进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。进程是执行中的程序,除了可执行代码外还包含进程的活动信息和数据,比如用来存放函数变量、局部变量、返回值的用户栈,存放进程相关数据的数据段,内核中进程间切换的内核栈,动态分配的堆。 早期操作系统程序都是单个运行的,CPU利用率低下,为了提高CPU的利用率,加载多个程序到内存并发运行,在单核CPU中这种属于伪并发。其实在同一时间只运行一个程序 线程通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度...
深入理解 Sentinel 限流组件推模式实现
发表于2025-10-16|更新于2025-10-21|微服务中间件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-21|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-21|后端技术中间件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-21|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-21|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-21|分布式系统中间件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-21|分布式系统中间件|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-21|技术微服务|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-21|中间件学习Sentinel|Sentinel•源码解析•中间件
Sentinel源码学习笔记一、客户端与服务端的交互流程 1. 连接建立:客户端启动时通过配置的服务端地址(如  spring.cloud.sentinel.transport.dashboard.server )与Sentinel Dashboard建立长连接(HTTP长轮询或WebSocket),定期发送心跳包保持连接。2. 数据同步: 客户端将实时统计的监控数据(QPS、异常数等)通过长连接上报给服务端,服务端在控制台展示实时监控图表。 服务端通过长连接向客户端推送规则配置(流控、熔断等),客户端接收后更新本地规则缓存并生效。3. 指令交互:服务端可通过控制台手动触发客户端规则更新、熔断状态重置等指令,客户端接收后执行对应操作并返回结果。 二、自动配置类(以Spring Cloud整合为例)的核心逻辑  SentinelAutoConfiguration  是核心自动配置类,主要执行以下操作: 1. 初始化核心组件:注册  SentinelResourceAspect  切面,通过AOP拦截被  @SentinelResource  注解标记的资源(方法/接口...
12
avatar
GoofySatoshi
分享技术、读书笔记和生活点滴
文章
20
标签
61
分类
30
Follow Me
公告
连雨不知春归去,一晴方觉夏已深
最新文章
多线程并发、等待及通知机制2025-10-21
深入理解 Sentinel 限流组件推模式实现2025-10-16
Tomcat的IO模型与性能调优2025-10-13
Tomcat类加载机制与热部署原理详解2025-10-13
Tomcat 整体结构以及设计源码分析2025-10-10
分类
  • Java1
    • JVM1
      • 垃圾收集器1
  • Java Web2
    • 中间件2
      • Tomcat2
  • 中间件1
  • 中间件学习1
标签
进程 分布式流量控制 XA模式 Java 源码剖析 限流组件 CI/CD Gateway 中间件 全局事务ID Hexo Pipeline-Valve 模式 Linux IO模型 NIO G1 垃圾收集器 Tomcat IO模型 博客 Undo Log Tomcat 架构 热部署 Tomcat性能调优 工具 APR Tomcat 源码分析 微服务治理 垃圾回收机制 推模式 GitHub Tomcat 操作系统 教程 类加载机制 源码解析 配置中心 微服务 事件驱动 Servlet 容器 分布式事务 事务协调器 Web 应用部署
归档
  • 十月 2025 5
  • 九月 2025 6
  • 八月 2025 6
  • 五月 2025 1
  • 五月 2024 2
网站信息
文章数目 :
20
本站总字数 :
45.4k
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2019 - 2025 By GoofySatoshi
搜索
数据加载中