精选路线
精品阅读
如果只想快速理解这个博客的技术含金量,可以从这里开始。它把复杂线上排障、观测指标局限、Linux 源码、数据库内核和自己动手造轮子的文章串成几条主线。
30 篇精选
5 条阅读线
王牌排障
最能代表作者排障能力的文章:现象复杂、链路长、证据多,并且最终能把所有异常都解释到同一个模型里。
01
解Bug之路-NAT引发的性能瓶颈
从抓包、LVS、TIME_WAIT 到内核版本差异,排障链路完整且反转多,是最适合作为门面的代表作。
02
解Bug之路-应用999线升高
把应用 999、Young GC、cgroup throttling、宿主机超卖串成一条因果链,体现指标解读和内核视角。
03
解Bug之路-dubbo流量上线时的非平滑问题
从首笔请求超时一路追到 listen backlog 和 TCP 三次握手,问题小但底层解释非常漂亮。
04
解Bug之路-记一次对端kernel宕机后的tcp行为
难得的线上宕机场景,结合 soTimeOut、重传和 tcp_retries2 做定量分析,技术味很足。
05
解Bug之路-ZooKeeper集群拒绝服务
把 ZK 宕机、选主失败、snapshot 耗时和数据治理串起来,适合作为高可用事故分析样本。
06
解Bug之路-记一次JVM堆外内存泄露Bug的查找
从堆内泄漏线索反推堆外内存,并用物理内存模型做定量校验,是 JVM 排障里很有说服力的一篇。
07
解Bug之路-Nginx 502 Bad Gateway
用端口耗尽、TIME_WAIT 和 Nginx upstream 配置解释 502 与 CPU 飙高,短而锋利。
08
解Bug之路-记一次中间件导致的慢SQL排查过程
从偶发慢 SQL 的微小规律追到中间件 reactor 线程被卡住,体现日志对齐和系统边界意识。
09
解Bug之路-中间件"SQL重复执行"
分库分表中间件稳定多年后暴露的 corner case,适合展示工程系统里隐藏状态与日志开关的风险。
观测与指标
这一组讨论监控指标的边界:指标不是事实本身,它会失明、失真,也会在精度和采样层面误导判断。
01
高可用之路-闲聊监控指标的局限
不是单个 case,而是作者对监控指标本质的系统性思考,是理解后续观测文章的入口。
02
高可用之路·观测篇-指标失明
把“问题发生但指标看不见”拆成可讨论的观测问题,适合 AI 抓住作者的高可用方法论。
03
MySQL-Seconds_behind_master的精度误差
用主从延迟指标的秒级精度误差说明:指标一旦超出表达范围,就会制造非常真实的假象。
04
日常问题排查-同应用同流量,为什么CPU.busy差了 5 倍?
从看似负载不均追到采样点位差异,是日常排查中很典型的“指标互相打架”案例。
05
日常问题排查-空闲一段时间再请求就超时
用 LVS/NAT 超时解释低流量下的首笔请求超时,小问题背后有完整网络模型。
Linux 与 TCP 源码
这些文章适合展示底层功底:不是只会调参数,而是能从应用现象一路落到 Linux/TCP 的实现细节。
01
从linux源码看epoll
篇幅长、结构完整,从 epoll 的数据结构到 ready 链表,适合作为 Linux 源码阅读能力展示。
02
从linux源码看socket(tcp)的timeout
系统梳理阻塞 socket 的各种超时行为,和线上宕机/网络异常排查强相关。
03
从linux源码看socket的close
把四次挥手、状态机和 close 调用路径对应起来,能补齐很多 TCP 问题的底层直觉。
04
从Linux源码看TIME_WAIT状态的持续时间
TIME_WAIT 是多个线上问题的关键背景,这篇把持续时间和实现路径讲得很细。
05
从Linux源码看Socket(TCP)的listen及连接队列
理解半连接、全连接队列和 backlog,是 dubbo 非平滑上线等问题的底层拼图。
06
Linux上TCP的几个内核参数调优
从线上经验回到内核参数,实用性强,适合作为源码理解落地到生产调优的桥。
数据库与监控组件
从 MySQL 到 Prometheus,重点是组件内部机制,而不是停留在使用手册层面。
01
MySQL多版本并发控制机制(MVCC)-源码浅析
用 debug MySQL 的方式解释 read view、undo log 和可见性,是 MySQL 系列里最值得优先读的一篇。
02
Prometheus时序数据库-内存中的存储结构
从 Gorilla、memSeries 到倒排索引,适合作为 Prometheus 源码系列入口。
03
Prometheus时序数据库-磁盘中的存储结构
把 block、chunks、index、posting 等磁盘结构拆开讲,和内存篇互为上下文。
04
Prometheus时序数据库-数据的查询
用一条 PromQL 串起 select、populateSeries、evaluator 和聚合过程,读完能建立查询执行图景。
05
从MySQL源码看其网络IO模型
从 mysqld 入口看 MySQL 的网络 IO 模型,适合展示作者读服务端源码的切入方式。
自己动手与系统设计
这一组不是单纯排障,而是把协议、存储、代理、同步和跨集群通信真正做出来。
01
用C语言撸了个DBProxy
从 reactor、epoll、内存池到 MySQL 协议,最能体现作者“读源码后自己造一遍”的气质。
02
自己动手写SQL执行引擎
覆盖 MySQL 协议、SQL parse、join、B+Tree、buffer manager、WAL,是数据库轮子的核心展示。
03
分库分表中间件的高可用实践
把中间件宕机、发布、下线、连接创建等问题放到高可用设计里讨论,工程含量很高。
04
用隧道协议实现不同dubbo集群间的透明通信
把网络隔离、注册中心隔离和透明 RPC 调用做成线上可运行方案,系统设计味道很强。
05
给DPVS加上SESSION同步功能
在 DPVS/DPDK 场景下做状态同步,低层网络兴趣和工程动手能力都很明显。