- 博客(155)
- 收藏
- 关注
原创 深入理解Sentinel:09 限流降级与流量效果控制器(下)
摘要: WarmUpController用于解决系统冷启动问题,通过预热机制使流量平缓增长至阈值。冷启动不仅发生在应用重启时,也适用于连接池重建、缓存刷新等场景。该控制器基于Guava的SmoothRateLimiter算法,采用令牌桶模型实现动态限流:初始化时令牌数达最大值(maxToken),随后通过斜率(slope)逐步调整令牌生成速率,在预热期(如10秒)内从低QPS过渡到目标阈值(如200 QPS)。核心参数包括warningToken(稳定阈值)、coldFactor(冷启动系数,默认3)等。
2026-03-30 09:00:29
763
原创 深入理解Sentinel:08 限流降级与流量效果控制器(中)
Sentinel流量控制算法解析 本文详细介绍了Sentinel框架中的三种经典限流算法及其实现机制。计数器算法通过时间窗口统计请求数量实现QPS限流;漏桶算法通过固定速率处理请求实现平滑限流;令牌桶算法则通过动态生成令牌控制请求通过速率。Sentinel通过TrafficShapingController接口实现不同流量控制策略,包括直接拒绝、预热和匀速排队三种方式。
2026-03-27 08:36:21
441
原创 深入理解Sentinel:07 限流降级与流量效果控制器(上)
摘要:Sentinel通过ProcessorSlot、Checker、Rule和RuleManager实现多种降级功能。FlowSlot作为入口调用FlowRuleChecker检查请求,Checker根据资源规则与实时指标对比决定是否限流。Rule接口定义passCheck方法,FlowRule实现限流规则配置。FlowRuleManager负责加载和管理规则配置。整体流程为:ProcessorSlot调用Checker检查规则,达到阈值则拒绝请求,实现限流或熔断。
2026-03-27 08:35:42
493
原创 深入理解Sentinel:06 资源指标数据统计的实现全解析(下)
摘要:StatisticSlot是Sentinel实现资源指标统计的核心组件,与NodeSelectorSlot和ClusterBuilderSlot构成处理流水线。它通过责任链模式动态决定请求处理流程,在entry方法中根据后续处理结果记录线程数、通过/拒绝请求数等指标,exit方法则记录响应时间和成功数。关键设计包括:1) 多级统计节点(DefaultNode/ClusterNode)分层收集数据;2) 秒级和分钟级滑动窗口实现时间维度统计;3) 回调机制支持扩展处理。
2026-03-26 10:41:13
401
原创 深入理解Sentinel:05 资源指标数据统计的实现全解析
本文详细解析了Sentinel框架中资源指标数据统计的实现机制,重点分析了NodeSelectorSlot和ClusterBuilderSlot两个核心组件的工作原理。NodeSelectorSlot负责为资源创建DefaultNode并维护调用树结构,根据不同的调用链路入口(Context.name)为同一资源创建多个DefaultNode实例。ClusterBuilderSlot则为每个资源创建全局唯一的ClusterNode用于聚合统计指标数据,并通过DefaultNode管理ClusterNode。
2026-03-26 09:49:32
509
原创 深入理解Sentinel:04 Sentinel 中的责任链模式与 Sentinel 的整体工作流程
本文介绍了Sentinel中ProcessorSlot的责任链模式实现机制。ProcessorSlot分为两类:资源指标统计类和降级功能类,前者必须排在后者之前以确保数据依赖。文章详细说明了默认的ProcessorSlot执行顺序,并指出降级类ProcessorSlot的顺序可调整。通过AbstractLinkedProcessorSlot的next指针和fireEntry/fireExit方法实现责任链调用,DefaultProcessorSlotChain作为默认实现维护了链表结构。
2026-03-26 08:41:50
442
原创 深入理解Sentinel: 03 Sentinel 的一些概念与核心类介绍
Sentinel核心概念与统计机制解析 摘要:本文详细介绍了Sentinel框架中的核心概念和统计机制。主要内容包括:1) 资源、规则和降级三大核心概念;2) 资源指标统计相关的关键类,如ResourceWrapper(定义资源名称、类型和流量方向)、Node接口(定义统计指标)及其实现类;3) 重点分析了StatisticNode的实现机制,包括秒级和分钟级滑动窗口的配置与用途,以及并发线程数的统计方法。
2026-03-25 15:13:18
876
原创 深入理解Sentinel: 02 为什么需要服务降级以及常见的几种降级方式
本文探讨了服务降级的必要性及其实现方式。在流量突增时,服务降级能有效避免系统崩溃,主要方式包括:1)限流降级 - 通过控制最大并发请求数保护服务,适用于秒杀等场景;2)熔断降级 - 当依赖服务异常时自动切断调用,支持基于错误率/耗时等指标的自动恢复;3)开关降级 - 通过动态配置关闭非核心功能,提升系统核心处理能力。文章详细分析了各种降级策略的技术实现和适用场景,并强调了降级后的优雅处理机制(如空对象模式)。这些方法共同构建了分布式系统的弹性防护体系。
2026-03-25 10:15:46
428
原创 深入理解Sentinel: 01 一次服务雪崩问题排查经历
本文分享了一次服务雪崩事故的排查经历。事故起因是广告系统并发量突增导致Redis读取超时,进而引发RPC调用超时和服务线程池耗尽。分析发现根本原因是缓存value过大导致Jedis读取耗时过长,加上Dubbo重试机制使并发量翻倍。解决方案包括:优化缓存数据结构改用hash存储、升级Redis集群、引入Sentinel实现熔断降级和限流保护。通过这次事故,作者深刻认识到微服务系统中服务降级和自我保护机制的重要性,为后续Sentinel原理分析专栏奠定了基础。
2026-03-25 08:30:23
530
原创 《ShardingSphere解读》20 归并引擎:如何理解数据归并的类型以及简单归并策略的实现过程?
摘要: 本文介绍了ShardingSphere中的归并引擎机制,主要分为概念解析和实现分析两部分。首先阐述了分库分表环境下数据归并的必要性,将归并按功能分为遍历、排序、分组、分页和聚合5种类型,按实现结构分为流式、内存和装饰者3种方案。然后通过代码分析展示了MergeEngine接口及其实现类(DQLMergeEngine、DALMergeEngine等)的工作机制,重点说明了DQLMergeEngine如何根据查询结果数量、分组条件、排序条件等选择不同的归并策略。
2026-03-24 10:01:11
512
原创 《ShardingSphere解读》19 执行引擎:如何把握 ShardingSphere 中的 Executor 执行模型?(下)
本文介绍了ShardingSphere中的ShardingStatement类,它是StatementExecutor的使用者。ShardingStatement继承自AbstractStatementAdapter,采用适配器模式包装自身实现。核心方法executeQuery的执行流程包括:清理变量、路由分片、初始化StatementExecutor、创建归并引擎获取结果。其中路由引擎通过SimpleQueryShardingEngine完成分片路由,获取SQLRouteResult对象。
2026-03-24 08:48:16
441
原创 《ShardingSphere解读》18 执行引擎:如何把握 ShardingSphere 中的 Executor 执行模型?(上)
本文介绍了ShardingSphere执行引擎的上层设计核心类AbstractStatementExecutor及其实现类。AbstractStatementExecutor作为SQLExecuteTemplate的直接使用者,封装了JDBC规范相关对象和执行逻辑,包含数据库类型、结果集参数、连接对象等变量。其核心方法executeCallback通过SQLExecuteTemplate执行回调,并刷新元数据。
2026-03-23 10:13:57
473
原创 《ShardingSphere解读》17 执行引擎:分片环境下 SQL 执行的整体流程应该如何进行抽象?
ShardingSphere执行引擎的核心组件包括ShardingExecuteEngine、SQLExecuteTemplate等,负责SQL在分片环境下的执行。ShardingExecuteEngine作为底层引擎,通过ShardingExecutorService和ListeningExecutorService实现多线程执行能力,支持串行(serialExecute)和并行(parallelExecute)两种执行模式。
2026-03-23 09:33:28
527
原创 《ShardingSphere解读》16 改写引擎:如何理解装饰器模式下的 SQL 改写实现机制?
摘要: 本文探讨了ShardingSphere中SQL改写机制的实现过程,重点分析了分布式主键场景下的SQL改写。通过BaseShardingEngine的rewriteAndConvert方法展示了SQL改写流程,涉及SQLRewriteContext、SQLToken等核心组件。文中以自增主键为例,说明如何将逻辑SQL转换为真实数据库可执行的SQL,并介绍了GeneratedKeyInsertColumnToken等关键类的实现原理。
2026-03-22 13:19:33
372
原创 《ShardingSphere解读》15 路由引擎:如何在路由过程中集成多种路由策略和路由算法?
本文详细介绍了ShardingSphere路由引擎中的分片策略ShardingStrategy及其实现。ShardingStrategy包含分片列获取和执行分片两个核心方法,并与分片算法ShardingAlgorithm协同工作。
2026-03-22 13:10:52
322
原创 《ShardingSphere解读》14 路由引擎:如何实现数据访问的分片路由和广播路由?
摘要: 本文详细分析了ShardingSphere中的标准路由机制,重点介绍了StandardRoutingEngine的实现原理。标准路由适用于不含关联查询或仅含绑定表关联查询的SQL场景。文章首先阐述了RoutingEngineFactory如何根据上下文创建StandardRoutingEngine,特别讲解了绑定表关系的判定逻辑和配置方式。随后深入剖析了StandardRoutingEngine的核心运行机制,包括三种路由方式:基于Hint的路由、基于分片条件的路由以及混合路由。
2026-03-22 12:33:48
362
原创 《ShardingSphere解读》13 路由引擎:如何理解分片路由核心类 ShardingRouter 的运作机制?
摘要:本文深入解析ShardingSphere路由引擎的架构设计与实现原理。首先介绍路由引擎作为分片流程第二步的核心作用,基于SQL解析结果生成路由策略。通过分析源码包结构,揭示其分层设计:底层sharding-core-route包含核心路由类ShardingRouter,上层sharding-core-entry提供应用层入口。
2026-03-22 12:28:32
362
原创 《ShardingSphere解读》12 解析引擎:SQL 解析流程应该包括哪些核心阶段?(下)
摘要:本文介绍了ShardingSphere SQL解析引擎的第二阶段——SQL片段提取过程。通过ParseRuleRegistry类加载SQLStatementRule、ExtractorRule和FillerRule三种规则定义,详细阐述了从抽象语法树中提取SQLSegment的机制。文章以MySQL为例,展示了如何通过XML配置文件定义SQLSegmentExtractor,并以TableExtractor为例说明表信息提取的具体实现过程,包括表名、别名和所有者信息的获取。
2026-03-22 12:20:49
583
原创 《ShardingSphere解读》11 解析引擎:SQL 解析流程应该包括哪些核心阶段?(上)
摘要:ShardingSphere的分片引擎核心是SQL解析引擎,SQL解析过程贯穿整个中间件。入口为DataSource,通过ShardingDataSourceFactory获取数据源后,SQLParseEngine作为解析引擎入口,采用外观模式屏蔽底层复杂实现。SQLParseEngineFactory基于缓存机制创建解析引擎实例,SQLParseKernel作为内核类管理抽象语法树和SQL语句对象。解析过程通过Hook机制监控,最终生成SQLStatement对象。
2026-03-20 17:27:48
538
原创 《ShardingSphere解读》10 分布式主键:ShardingSphere 中有哪些分布式主键实现方式?
ShardingSphere 提供了分布式主键生成机制,支持分片场景下的全局唯一主键需求。框架通过 GeneratedKey 抽象实现自动生成键功能,开发方式与 MyBatis 类似。核心接口 ShardingKeyGenerator 基于 SPI 机制扩展,内置雪花算法(UUIDShardingKeyGenerator)和 UUID 算法(SnowflakeShardingKeyGenerator)两种实现。通过 TableRule 配置可指定主键生成策略,利用微内核模式动态加载不同实现类。
2026-03-20 08:41:28
422
原创 《ShardingSphere解读》08 数据脱敏:如何确保敏感数据的安全访问?
摘要 数据脱敏是通过规则转换敏感信息以实现隐私保护的技术。ShardingSphere提供了完整的数据脱敏解决方案,其核心抽象包括: 数据存储:支持明文列(plainColumn)和密文列(cipherColumn)双存储模式,通过逻辑列(logicColumn)对应用透明访问 加解密机制:基于ShardingEncryptor接口封装加解密算法,内置AES和MD5实现,支持SPI扩展 业务集成:自动解析和改写SQL,透明处理加解密过程,开发者无需关注实现细节
2026-03-19 09:12:34
459
原创 《ShardingSphere解读》09 微内核架构:ShardingSphere 如何实现系统的扩展性?
本文介绍了微内核架构的基本原理及其在ShardingSphere中的应用。微内核架构由内核系统和插件组成,通过SPI(服务提供接口)机制实现系统扩展性,支持插拔式组件替换。文章通过JDK的SPI实现示例,展示了如何定义服务接口、实现类及配置文件。ShardingSphere基于此机制,在shardingsphere-spi工程中封装了TypeBasedSPI接口和工具类,支持动态加载SPI服务实例。这种架构设计使系统具备高度灵活性,业务变更只需替换插件而无需修改核心代码。
2026-03-19 09:11:53
443
原创 《ShardingSphere解读》07 读写分离:如何集成分库分表+数据库主从架构?
摘要:本文介绍了ShardingSphere如何通过读写分离机制优化高并发场景下的数据库访问。
2026-03-18 11:50:07
784
原创 《ShardingSphere解读》06 数据分片(下)
本文介绍了数据库分库分表改造的具体实现方法。首先讲解了分表操作的配置过程,包括定义数据源、设置分表策略和绑定表规则,通过record_id实现health_record表的水平拆分。然后展示了如何将分库和分表结合使用,创建多个数据源(ds3/ds4/ds5)并基于user_id进行数据路由(ds$->{user_id % 3 + 3})。文中提供了完整的配置示例和测试结果截图,验证了数据正确分布在不同的分表和分库中。该方案利用ShardingSphere的配置体系简化了复杂的分布式数据库管理。
2026-03-18 10:31:07
514
原创 《ShardingSphere解读》05 数据分片(上)
本文介绍了使用ShardingSphere实现分库分表的技术方案。首先构建了一个医疗健康领域的单库单表系统,包含用户、健康记录等核心业务对象。然后通过配置ShardingSphere实现分库改造:1)初始化ds0和ds1两个数据源;2)设置按user_id取模的分库策略;3)配置绑定表和广播表;4)定义表分片规则和分布式主键生成器。最终验证了数据能按预期分布到不同数据库。文章还提出了关于绑定表和广播表作用的思考题,为后续探讨分表、分库+分表等高级特性做铺垫。
2026-03-18 09:58:55
757
原创 《ShardingSphere解读》04 配置驱动:ShardingSphere 中的配置体系是如何设计的?
摘要:本文深入解析了ShardingSphere的配置体系设计,重点介绍了其行表达式语法糖和四种配置方式。核心内容包括:1)行表达式的语法规则和在分片算法中的应用;2)ShardingRuleConfiguration等核心配置类的结构和作用;3)Java代码、Yaml、Spring命名空间和SpringBoot四种配置方式的实现原理及示例;4)Yaml配置到核心配置的转换机制。文章揭示了ShardingSphere如何通过高度抽象的配置体系简化分布式数据库操作,为开发者提供了灵活便捷的配置选择方案。
2026-03-15 18:53:27
362
原创 《ShardingSphere解读》03 JDBC 规范与 ShardingSphere 是什么关系?
本文深入剖析了ShardingSphere如何通过适配器模式重写JDBC规范。作为客户端分片解决方案,ShardingSphere对外提供与JDBC完全一致的接口,内部则通过分层适配器(WrapperAdapter→AbstractUnsupportedOperationXxx→AbstractXxxAdapter→ShardingXxx)实现分片逻辑。以ShardingConnection为例,它继承抽象适配器类,实现了连接缓存、方法记录重放等机制,确保物理连接状态与逻辑连接一致。这种设计既保持了JDBC
2026-03-15 18:41:59
502
原创 《ShardingSphere解读》02 项目:什么是ShardingSphere ?
Apache开源项目ShardingSphere是一款分布式数据库中间件,提供分库分表、读写分离、分布式事务等能力。它包含Sharding-JDBC(轻量级Java框架)、Sharding-Proxy(透明数据库代理)和Sharding-Sidecar(云原生Sidecar)三大核心组件,支持多种数据库协议。采用微内核架构,通过插件机制实现SQL解析、路由、改写等功能,同时提供数据脱敏、配置中心等治理能力。其核心理念是兼容现有数据库而非颠覆,使开发者能像使用单库一样操作分布式数据库集群。
2026-03-13 09:45:38
903
原创 《ShardingSphere解读》01 从理论到实践:如何让分库分表真正落地?
本文探讨了互联网系统开发中分库分表技术的核心概念与实践挑战。文章首先分析了单库单表在数据量增长时面临的性能瓶颈,指出分库分表是保留关系型数据库优势的前提下突破性能天花板的主流方案。文章系统梳理了垂直拆分(按业务字段)和水平拆分(按数据规则)两种策略,以及客户端分片、代理服务器分片和分布式数据库三种实现方式。最后介绍了ShardingSphere这一开源中间件如何整合多种分片方案,为开发者提供一站式解决方案。文章强调分库分表不仅是简单的数据拆分,而是涉及数据建模、路由策略和运维治理的系统工程。
2026-03-13 09:43:21
394
原创 《Mybatis》第10章 MyBatis 缓存机制深度剖析
本文深入剖析MyBatis的两级缓存机制。一级缓存为SqlSession级别,默认开启,基于HashMap实现,适用于事务内重复查询;二级缓存为Mapper级别,需手动配置,可跨会话共享,适合读多写少场景。文章详细解析了两级缓存的实现原理、使用方式、失效场景及常见问题,特别强调了一级缓存的脏读风险和二级缓存的多表关联脏数据问题,并给出了缓存配置建议和最佳实践方案。通过源码分析和面试题解答,帮助开发者合理使用缓存提升性能,同时规避潜在问题。
2026-03-11 08:49:21
542
原创 《MyBatis》第9章:MyBatis执行流程与映射机制
MyBatis执行流程解析:MyBatis框架通过五阶段流程实现数据库操作,包括初始化配置、SqlSession创建、Mapper代理生成、SQL执行和结果映射。核心机制包括动态代理实现方法到SQL的映射,组件化架构处理SQL执行(Executor、StatementHandler等),以及灵活的结果集转换(ResultSetHandler)。
2026-03-11 08:40:44
430
原创 《MyBatis》第8章 MyBatis-Plus 增强框架
摘要: MyBatis-Plus(MP)是MyBatis的增强工具,遵循“只做增强,不做改变”原则,兼容原生MyBatis所有功能。核心特性包括: 通用Mapper:通过BaseMapper提供单表CRUD方法,无需编写SQL。 条件构造器:支持链式调用(QueryWrapper)和类型安全的Lambda表达式(LambdaQueryWrapper),避免SQL拼写错误。 插件体系:内置分页(自动生成方言SQL)、乐观锁(@Version)、自动填充(MetaObjectHandler)等功能。
2026-03-10 08:48:18
750
原创 《MyBatis》第7章 性能调优与实践
本文介绍了MyBatis性能调优的关键策略。重点包括:SQL级别优化(避免N+1查询、使用批量操作和游标查询)、二级缓存最佳实践(适用场景、风险防范及Redis整合方案)以及插件性能优化。通过JOIN查询替代N+1查询、合理使用BATCH执行器和游标查询可显著提升性能。二级缓存需谨慎配置以避免脏数据,分布式场景建议使用Redis缓存。此外,精简插件逻辑可减少性能开销。这些优化手段可有效解决MyBatis应用中的常见性能瓶颈。
2026-03-10 08:46:52
432
原创 《Mybatis》第5章 插件机制与扩展
MyBatis插件机制深度解析:本文系统剖析了MyBatis插件的实现原理与应用实践。插件通过Interceptor接口实现,利用动态代理技术拦截Executor、StatementHandler等四大核心对象的方法调用。重点讲解了插件链的生成机制、方法签名匹配原理,并通过分页插件和慢SQL监控插件的完整案例,展示了如何开发高效稳定的自定义插件。文章还深入分析了Plugin类的动态代理实现细节,总结了插件开发中的执行顺序、性能优化等关键注意事项,为深入理解MyBatis扩展机制提供了全面指导。
2026-03-09 08:46:48
505
原创 《Mybatis》第4章 Mapper 映射文件奥秘
本文深入解析MyBatis核心Mapper映射文件的工作原理。重点剖析了动态SQL的实现机制,包括XML解析为SqlNode树、OGNL表达式求值过程;详细讲解了参数映射(ParamNameResolver)和结果集映射(ResultMap)的实现原理,以及延迟加载的代理机制;系统阐述了一级缓存(SqlSession级别)和二级缓存(Mapper级别)的工作机制、失效场景及Redis整合方案。文章最后提供了高级面试题的完整解答,包括缓存区别、动态SQL优化和延迟加载异常处理等核心知识点。
2026-03-06 15:21:35
341
原创 《MyBatis》 第二章:核心架构与工作流程
本文深入剖析了MyBatis核心架构与执行流程。MyBatis采用三层架构:接口层、核心处理层和基础支撑层,核心组件包括SqlSession、Executor、StatementHandler等。重点分析了SQL执行全流程:从Mapper代理调用开始,经过Executor调度、StatementHandler处理、参数设置到结果集映射。MyBatis运用了多种设计模式如工厂、代理、模板方法等提升扩展性。
2026-03-06 11:25:47
551
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅