- 博客(156)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
原创 虚拟线程落地 Java 21:平台线程池迁移中的 pinning、吞吐与阻塞点排查
面向具备 Java 后端经验、正在把平台线程池迁移到 Java 21 虚拟线程的读者,围绕一次可复现的迁移实验展开:先建立调度模型与兼容环境,再解释 pinning 的触发条件、synchronized 与 ReentrantLock 的差异、ThreadLocal 成本变化,最后用受控压测对比迁移前后吞吐并给出阻塞点排查顺序与适用边界。
2026-10-20 08:00:00
165
原创 synchronized 与 AQS 锁竞争剖析:从锁升级到 CLH 队列的定位路径
面向 Java 后端读者,围绕“线上同步代码变慢时如何判断是锁竞争并给出证据”这一件事展开。先区分 Java 21 下 synchronized 的真实行为与流传已久的偏向锁说法,再讲对象头标记、轻量级锁与重量级锁膨胀、ObjectMonitor 与 AQS 两套排队结构,用可复现的争用实验演示 jcmd 线程栈、JFR 锁事件与火焰图观察路径,最后给出失败案例与适用边界。
2026-10-20 08:00:00
26
原创 线程池参数与队列选择:核心数、最大数、拒绝策略的边界推演与可复现压测
本文围绕 ThreadPoolExecutor 的任务接纳链路,解释核心线程懒创建、先入队后扩容、有界与无界队列、四种拒绝策略的行为边界,并给出可自行编译运行的观察示例与验证步骤。同时说明池状态指标的采样含义、预热与 allowCoreThreadTimeOut 的相互作用,以及容量评估与拒绝语义的选择方法。文中示例为教学观察代码,未声称已在本机运行并得到固定输出;关键机制表述以 Java 21 官方文档为准,Spring Boot 3.5 仅作背景说明。
2026-10-19 08:00:00
150
原创 PostgreSQL 执行计划深读:从 EXPLAIN 输出到代价模型驱动的 SQL 改写
本文以可完整执行的主线实验讲解 PostgreSQL 17/18 执行计划阅读:从 EXPLAIN 与 EXPLAIN ANALYZE 字段语义、actual rows 按 loops 平均与版本显示差异,到顺序扫描、索引扫描、位图扫描与三种连接算法的选择依据,再深入统计信息、代价参数与 SELECT 统计目标的作用边界。示例在 PostgreSQL 17.10 与 18.6 隔离环境验证,明确单次观察不等于性能基线。
2026-10-19 08:00:00
162
原创 Spring Boot 集成 PostgreSQL 的连接池调优:HikariCP、prepared statement 与服务器资源边界
从接口变慢场景切入,用“Java 线程 → HikariCP → PostgreSQL 后端进程 → 磁盘与内存”的框架,逐层讲 HikariCP 连接池大小、prepared statement 的服务端行为、max_connections 与内存边界,并澄清 wait_timeout 的归属。含三个完整示例、对比表与排障清单。
2026-10-18 08:00:00
132
原创 PostgreSQL 流复制与高可用切换:主从延迟、同步提交与 Spring Boot 读写分离的边界
本文从一次“刚下单却查不到”的线上困惑切入,先建立主库、备库、WAL 与切换器的整体模型,再逐层拆解流复制、同步提交、主从延迟、故障切换与读写分离的机制和取舍。文中给出可直接复现的 Docker 配置、Java 与 Spring Boot 示例和诊断脚本,并总结延迟测量、切换判定、读写分离边界与排障清单,帮助 Java 后端开发者、数据库工程师和架构师把高可用方案落到可验证的工程判断上。
2026-10-17 08:00:00
182
原创 PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
面向 Java 后端开发者与数据库工程师,从一次误删数据的真实场景切入,先建立“全量基线 + 增量日志 + 恢复目标点”的备份恢复整体模型,再逐层拆解 pg_basebackup 物理备份、WAL 归档链路、PITR 时间点恢复、恢复窗口与 RPO/RTO 的换算关系,以及备份校验与演练方法。文中给出多个可复现的命令与 Spring Boot 集成示例,并附常见误区、排障清单与决策表,帮助团队把备份从“看起来有”变成“真的能恢复”。
2026-10-17 08:00:00
167
原创 PostgreSQL MVCC 与长事务:为什么 Spring 事务未提交会拖垮 autovacuum 与索引膨胀
线上库磁盘只涨不降、索引越来越胖、查询越来越慢,往往不是业务数据真的增长,而是长事务把旧版本钉在表里,让 autovacuum 清不掉死元组。本文从一次 Spring 事务忘记提交的真实场景切入,讲清 MVCC 可见性、事务快照、xmin/xmax 与死元组的生命周期,说明长事务如何卡住 autovacuum、造成表与索引膨胀,并给出可复现示例、SQL 排查语句、Spring 侧事务边界治理与参数调优建议,适合 Java 后端与数据库工程师。
2026-10-16 08:00:00
351
原创 PostgreSQL 锁等待排查实战:从 pg_locks 到 Spring Boot 连接池的连锁阻塞
线上接口突然集体超时,数据库 CPU 却不高,这类故障往往不是 SQL 慢,而是锁等待把连接池拖垮。本文从一次真实的「订单状态更新卡死」切入,先给出锁等待链的一句话模型,再拆解 pg_locks、pg_stat_activity、行级锁等待与 Spring Boot HikariCP 的连接占用关系,最后给出一套从发现到定位再到止血的排障路径与工程规范。
2026-10-16 08:00:00
199
原创 PostgreSQL 分区表在 Java 应用中的路由陷阱:约束排除、分区裁剪与跨分区事务
面向 Java 后端开发者与数据库工程师,从一次线上慢查询切入,先建立“分区表从 SQL 到执行计划再到后端事务”的整体框架,再逐层拆解声明式分区的元数据规则、分区裁剪与约束排除的差异、跨分区事务的锁与 MVCC 代价,以及 Spring Data 在写入路由上的常见坑。文中给出三个可复现的 Java 与 SQL 示例、对比表、排障清单与选型结论,帮助读者把分区真正用对。
2026-10-15 08:00:00
182
原创 读懂 PostgreSQL 执行计划:从 EXPLAIN 输出定位 Spring Boot 慢 SQL 的代价估算偏差
本文面向 Java 后端开发者与数据库工程师,从一次 Spring Boot 接口变慢的真实场景切入,先用一句话模型解释 PostgreSQL 如何用统计信息估算代价、再据此选择执行计划,然后逐层拆解 EXPLAIN 与 EXPLAIN ANALYZE 输出中的 rows、cost、loops 等关键字段。文章重点讲清行数估算错误如何放大为嵌套循环的灾难,为什么统计信息目标、数据倾斜和关联列相关性会导致偏差,最后给出一套可复用的定位流程、排障清单与生产调优建议。
2026-10-15 08:00:00
239
原创 备份恢复实战:oplog 增量、PITR 与分片集群一致性快照恢复
本文从一次误删数据的真实恢复诉求出发,先建立副本集与分片集群的备份恢复整体框架,再逐步拆解 oplog 增量备份、PITR、fsync 锁与一致性快照、分片集群备份协调、恢复演练等核心机制。文章包含可直接复现的 Java 与命令示例,并给出常见误区、生产实践建议、排障清单与决策表,帮助 Java 后端开发者、数据库工程师和架构师把备份从“有”变成“真的能恢复”。
2026-10-14 08:00:00
100
原创 PostgreSQL JSONB 在 Spring Boot 中的读写边界:从 JDBC 类型映射到 GIN 索引失效
很多团队把 JSONB 当作“无模式万能字段”,直到 GIN 索引不生效、PgJDBC 绑定参数报错、并发更新互相覆盖才开始排查。本文先给出 JSONB 在 Spring Boot 中的完整读写链路模型,再逐层拆解 JDBC 类型映射、参数绑定、jsonb_path_query、含更新锁的并发读写,并用三个可复现示例演示索引命中与失效的真实执行计划,最后汇总选型决策表与排障清单。
2026-10-14 08:00:00
827
原创 索引设计边界:从 ESR 规则到复合索引前缀失效的慢查询定位
很多 MongoDB 慢查询并不是“没建索引”,而是索引字段顺序不匹配查询形状,或者复合索引前缀未被命中。本文从一次真实的订单查询变慢场景切入,先建立“查询形状决定索引形状”的整体框架,再逐层讲清 ESR 规则、复合索引的排序与边界、前缀失效的判定方式,并结合慢查询日志、count 扫描放大、覆盖查询与 Spring Boot 落地示例,给出可复盘的定位步骤与选型清单,帮助后端开发者和数据库工程师把索引从“凭感觉加”变成“按规则设计”。
2026-10-13 08:00:00
461
原创 MongoDB 读写策略与一致性取舍:readConcern、readPreference 与 causal session
面向 Java 后端开发者、数据库工程师与架构师,从一次“刚写入就查不到”的真实困惑切入,先建立副本集读写链路的最小模型,再逐层拆解 readConcern、readPreference、writeConcern、因果一致性与多数派读,并用可复现的 Spring Boot 示例演示会话如何串起读写顺序。文章给出主从延迟下的取舍决策表、常见误区、排障清单与生产参数建议,帮助你在可用性、延迟与一致性之间做出可解释的工程判断。
2026-10-13 08:00:00
318
原创 MongoDB 事务开销实测:快照隔离下的写冲突、重试与分片事务边界
本文从一次库存扣减写冲突切入,用实测数据说明 MongoDB 多文档事务在快照隔离下的真实开销:何时发生 WriteConflict、重试为何要包住整个事务、分片事务与单分片的边界在哪、会话因果一致性如何影响读己之写。文中给出三个可复现的 Java 示例、多个诊断命令和对比表,帮助 Java 后端开发者、数据库工程师和架构师在业务中正确使用事务,避免长事务拖慢副本集并踩中分片事务的性能陷阱。
2026-10-12 08:00:00
768
原创 Spring Data MongoDB 批量写入实践:BulkOperations 批大小与写关注权衡
面向 Java 后端开发者与数据库工程师,从一次“循环 insert 慢到超时”的真实场景切入,用一句话模型和全局流程图先建立 BulkOperations 的整体框架,再逐层拆解有序与无序批量、批大小切分、写关注级别与 wtimeout 的相互关系。文中给出三个可复现示例、多张对比表和决策清单,帮助你在吞吐、延迟与数据安全之间做出可落地的工程选择,并附常见误区、排障顺序与复盘问题。
2026-10-12 08:00:00
501
原创 MongoDB 分片集群均衡器调优:chunk 迁移风暴的成因与限流策略
线上 MongoDB 分片集群突然 CPU 飙升、业务读写变慢,很可能不是分片键设计不当,而是均衡器在短时间内触发了大量 chunk 迁移。本文从一次真实的迁移风暴切入,先建立分片集群、均衡器、chunk 与迁移限流的整体框架,再逐层拆解迁移风暴的触发条件、均衡窗口、zone 分片与热点写如何相互作用,最后给出可直接落地的限流参数、排障清单和分片键选择决策表。适合 Java 后端开发者、数据库工程师与架构师排查集群抖动并制定长期分片治理策略。
2026-10-11 08:00:00
228
原创 聚合管道性能剖析:$lookup、$unwind 与内存溢出的执行计划解读
很多 Java 后端开发者写出的聚合管道在测试环境跑得飞快,上线后却因为 $lookup、$unwind 引起内存溢出或超时。本文先建立一条可复述的执行链路模型:管道阶段如何被优化器重排、下推,$lookup 与 $unwind 在内存中怎样放大文档,allowDiskUse 又在什么时刻介入。随后用三个可复现的完整示例逐步推演,给出执行计划解读方法、常见误区、生产调优与排障清单,帮助读者对聚合管道性能问题做出可落地的工程判断。
2026-10-11 08:00:00
372
原创 Elasticsearch 深度分页的代价与替代方案:from/size、scroll、search_after 与 PIT 选择
深度分页在 Elasticsearch 中不是简单的“翻到第 N 页”,而是一场关于内存、协调节点与分片排序的代价博弈。本文从业务翻页卡顿场景切入,先建立“每个分片先排序取局部结果、协调节点再归并”的整体模型,再逐一拆解 from/size 的 max_result_window 上限、scroll 上下文与快照语义、search_after 的无状态游标、point in time 的一致性读,最后给出四类方案的对比表、排障清单与选型决策清单,帮助 Java 后端与搜索工程师在生产中做出可解释的选择。
2026-10-10 08:00:00
186
原创 MongoDB 副本集选举风暴排查:从心跳超时到 Journal 刷盘阻塞
本文从一次线上主从频繁切换的真实场景切入,先给出副本集选举的最小模型与整体流转框架,再逐层拆解心跳超时、Journal 刷盘阻塞、writeConcern 等待与选举风暴之间的因果链。文中提供三个可复现的完整示例与多份诊断命令、对比表和排障清单,帮助 Java 后端开发者、数据库工程师和架构师定位复制延迟、主节点抖动与写阻塞问题,并给出可直接落地的参数取舍建议。
2026-10-10 08:00:00
473
原创 Elasticsearch Query DSL 执行计划剖析:query 与 filter 上下文、缓存命中与慢查询定位
从真实慢查询切入,梳理 Query DSL 的打分与过滤两条路径、query cache 的键与失效条件,以及 _explain、profile、慢查询日志的定位方法,并给出三个可复现的完整示例与排障顺序。
2026-10-09 08:00:00
178
原创 从 TF-IDF 到 BM25:Elasticsearch 相关性评分的字段长度归一化与 boost 调参边界
从一次排序投诉切入,讲清 BM25 打分链路、字段长度归一化与 boost 乘法结构及调参边界,用 explain API 串起排查过程,并给出三个可运行 Java 示例与多个请求响应块。
2026-10-09 08:00:00
332
原创 Spring Boot 集成 Elasticsearch 的生产实践:客户端选型、索引生命周期与批量写入容错
面向 Java 后端与搜索工程师,从一次“搜索变慢、写入丢数据”的真实场景切入,先给出 Spring Boot 与 Elasticsearch 协作的整体模型,再逐层展开客户端选型(Java API Client 与 Spring Data ES)、索引生命周期管理、bulk 批量写入容错与连接池调优。文中提供三个可复现的完整示例和多个诊断片段,帮助读者把集群参数、代码配置与业务结果对应起来,形成可直接用于生产选型与排障的决策清单。
2026-10-08 08:00:00
684
原创 倒排索引与 FST 在 Lucene 中的内存布局:segment、docValues 与词典压缩的工程取舍
本文从一次搜索请求的视角切入,讲清 Lucene 中倒排索引、FST 词典、segment 合并与 doc values 如何共同决定查询速度与内存占用。文章给出可复述的整体框架、三层存储结构对比、合并与词典压缩的取舍逻辑,并提供可运行的 Lucene 示例、Elasticsearch 配置与排障清单,帮助 Java 后端与搜索工程师做出可落地的容量与性能判断。
2026-10-08 08:00:00
335
原创 Elasticsearch 分片分配与再平衡的底层逻辑:从 allocation decider 到集群扩容抖动
本文从一次集群扩容后分片迟迟不均衡的真实场景切入,先用一句话模型说明分片分配是“候选节点过滤 + 权重排序”的过程,再按整体结构、核心机制、完整过程、设计取舍、工程使用逐层展开。你会看到 allocation decider 如何决定分片能否落在某节点、再平衡如何搬动分片、shard 恢复为何先小后大、磁盘水位线怎样从根上阻断写入。文中给出 6 个可复现的配置、命令与 Java 示例,并用 3 张表格、2 个 ASCII 流程图和排障清单帮你把扩容抖动变成可预期的工程问题。
2026-10-07 08:00:00
150
原创 Elasticsearch 写入链路的 refresh、flush 与 translog 边界:为什么 bulk 吞吐会突然塌陷
从一次 bulk 吞吐突然塌陷的真实场景切入,先建立 Elasticsearch 写入链路的整体框架,再逐层拆解 refresh_interval、translog 持久化、flush 阈值、bulk 背压与写入拒绝之间的关系。文章包含可复现的 Java 与 REST 示例、状态流转图、对比表和排障清单,帮助 Java 后端开发者、搜索工程师与架构师判断瓶颈出在哪一段,并给出可落地的参数取舍。
2026-10-07 08:00:00
172
原创 Redis Cluster 集群运维实战:槽位迁移、MOVED/ASK 重定向与扩容缩容的数据一致性
面向 Java 后端开发者与架构师,从一次请求在 Redis Cluster 中的流转讲起,先建立“16384 个槽位 + 集群总线 + 重定向”的整体模型,再逐层拆解槽位迁移、MOVED 与 ASK 的差异、扩容缩容步骤、迁移期间的数据一致性与客户端处理方式。文中给出可复现的命令与 Java 示例,并整理常见误区、生产建议、排障清单和复盘问题,帮助你把知识点落成可执行的运维方案。
2026-10-06 08:00:00
339
原创 Redis 哨兵模式深度实践:主观下线、客观下线与 Raft 选举的源码级排障
面向 Java 后端与中间件工程师,从一次主库宕机后的告警风暴切入,先建立哨兵集群的最小模型,再逐层拆解主观下线、客观下线、Raft 选举、sentinel.conf 配置、故障转移与脑裂防治。文中给出可复现的 Docker 环境、三个完整示例、时序图与对比表,并附排障清单与生产参数建议,帮助读者在真实事故中快速定位是网络抖动、quorum 配置错误还是选举僵局。
2026-10-06 08:00:00
537
原创 Redis 大 Key 与热点 Key 生产治理:发现、拆分、限流与本地缓存的组合策略
大 Key 和热点 Key 是 Redis 生产事故里最常见也最容易被忽视的两类问题:前者拖慢单次操作、阻塞主线程、放大主从复制延迟;后者让单个分片被打穿,Cluster 扩容也救不了。本文从真实线上场景切入,先给出一句话模型和全局治理框架,再依次讲清发现手段(扫描、采样、监控)、拆分策略(哈希分片、位图分片)、本地缓存的三种实现与一致性取舍、限流的四种落点,最后用大 Key 拆分、热点 Key 三级缓存、分片限流三个完整示例串起整套方案。适合 Java 后端开发者、架构师与中间件工程师。
2026-10-05 08:00:00
683
原创 Redis 分布式锁的边界条件:Redlock 争议、锁续期与客户端崩溃后的互斥失效
本文从一次“锁没生效”的线上疑问切入,先建立分布式锁的最小模型与完整调用链路,再逐层拆解 SET NX PX、Lua 原子解锁、误删锁、锁续期与 watchdog、Redlock 争议,以及客户端崩溃、主从切换、GC 停顿导致的互斥失效。文中给出三个可复现的 Java 完整示例、多张对比表和排障清单,帮助 Java 后端开发者、架构师与中间件工程师判断什么场景该用单机锁、什么场景只能依赖 fencing token 或数据库约束。
2026-10-05 08:00:00
594
原创 Redis 内存优化与性能调优:编码转换、内存碎片与慢查询的定位链路
很多团队遇到 Redis 变慢、内存上涨时,第一反应是加机器或盲目调大 maxmemory,结果问题反复出现。本文以一次线上内存告警为引子,先建立“写入路径 → 编码转换 → 内存分配 → 碎片产生 → 淘汰触发 → 慢查询暴露”的整体框架,再逐层拆解 Redis 的对象编码、内存碎片、slowlog、内存淘汰与性能调优,并给出可复现的示例、排障清单与决策表,帮助 Java 后端开发者与架构师把零散命令串成一条可执行的定位链路。
2026-10-04 08:00:00
356
原创 Redis 持久化机制深度对比:RDB fork 代价、AOF 重写与混合持久化的恢复时延
本文面向 Java 后端开发者与架构师,从一次真实的主从切换事故切入,把 Redis 的持久化拆成快照、命令日志、后台子进程三条线索讲清。你会先建立 RDB、AOF 重写、混合持久化的整体框架,再通过可复现实验理解 fork 的写时复制代价、重写期间的写放大、以及三者重启恢复时延的差异。文中给出 6 个以上可直接运行的配置、命令与 Java 示例,并附选型决策表、排障清单与常见误区,帮助你在生产环境做出有依据的参数取舍。
2026-10-04 08:00:00
334
原创 Redis 主从复制全解析:从 PSYNC 协议到复制积压缓冲区的故障切换边界
本文面向 Java 后端开发者与架构师,从一次主节点宕机后的数据不一致问题切入,先建立 Redis 主从复制的整体角色模型,再逐层拆解 PSYNC 握手、复制偏移量、全量重同步、repl_backlog 环形缓冲与故障切换边界。文中给出多个可复现的 redis-cli 与 Spring Boot/Redisson 示例,并用表格和流程图对比全量与增量复制、backlog 命中与未命中、Sentinel 与 Cluster 的切换差异,最后落到监控指标、排障清单与容量规划建议。
2026-10-03 08:00:00
220
原创 Spring Boot 集成 Redis 企业级实践:连接池、序列化与缓存穿透雪崩的工程化防御
本文面向 Java 后端开发者与架构师,从一次真实的高并发查询变慢场景切入,先建立 Spring Boot 与 Redis 协作的整体框架,再逐层拆解 Lettuce 连接池、序列化、缓存穿透与缓存雪崩、布隆过滤器等关键机制。文中给出可复现的完整示例与诊断清单,帮助读者判断什么场景该用哪种连接与序列化策略,如何用空值、互斥重建、随机过期与布隆过滤器分层防御,并沉淀一套可落地的选型与排障方法。
2026-10-03 08:00:00
385
原创 ISR 收缩与 HW 推进:副本同步的边界条件与 UnderReplicated 排障
从 UnderReplicatedPartitions 告警切入,用 Leader/Follower/ISR/HW/LEO 模型推演 ISR 收缩条件、HW 推进时序与滞后判定口径,并给出 unclean 选举取舍、可运行命令与 Spring Kafka 示例、排障清单与配置决策表。
2026-10-02 08:00:00
296
原创 Kafka 分区分配与 Leader 选举:Controller 如何用 ZK/KRaft 元数据驱动状态机
面向 Java 后端与中间件工程师,从一次分区不可用的真实困惑切入,先给出 Controller、分区状态机、Leader 选举与元数据缓存的整体框架,再沿时间线推演创建 Topic、Leader 宕机、ISR 收缩等关键流程。文中对比 ZK 与 KRaft 两代元数据实现,给出可直接运行的 Java 管理客户端示例、配置与诊断命令,并整理常见误区、生产实践建议、排障清单与复盘问题,帮助读者把分区分配与选举机制转化为可落地的工程判断。
2026-10-02 08:00:00
307
原创 消费者组 Rebalance 全流程:从 JoinGroup 到分区撤销的停顿与优化
本文用一条完整时间线拆解 Kafka 消费者组从 JoinGroup 到分区撤销的全过程,先给出可复述的整体模型,再逐层讲清 Rebalance 协议、JoinGroup/SyncGroup 交互、静态成员与增量协作再均衡的差异,以及 session.timeout.ms、max.poll.interval.ms 等参数的调优取舍。文中给出可直接运行的 Java 示例与生产排障清单,帮助 Java 后端开发者、架构师和中间件工程师把再均衡停顿控制在可接受范围内。
2026-10-01 08:00:00
370
原创 acks=all 不等于不丢消息:生产者重试、幂等与乱序的真实边界
很多人以为把生产者 acks 设成 all 就不会丢消息,但真实线上事故往往来自重试、max.in.flight.requests 与幂等开关的组合。本文从一次订单丢失的排查场景切入,先建立生产者发送链路的一句话模型,再逐层拆解 acks 语义、retries 与退避、enable.idempotence、请求超时与重试乱序之间的边界,最后给出 Spring Kafka 工程实践、排障清单和决策表,帮助 Java 后端与中间件工程师把不丢消息真正配置到生产可用。
2026-10-01 08:00:00
181
原创 消息顺序的保证与妥协:分区键、重试队列与消费并发下的乱序根因
围绕 Kafka 分区内有序这一前提,系统梳理消息乱序的典型根因:分区键设计不当、发送端重试导致 Broker 端消息交错、消费端并发模型破坏顺序、重试队列与原 Topic 交错。文章给出可复现的 Spring Kafka 示例、生产配置建议、排障清单和面试复盘问题,帮助 Java 后端开发者、架构师与中间件工程师在顺序与吞吐之间做条件化取舍,并建立可落地的顺序保证边界。
2026-09-30 08:00:00
354
Redis windows客户端
2020-08-20
spring集成webservice,启动配置文件时出现错误,跪求各位大声解答
2017-06-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅