后端技术
数据库 · 分布式 · 网络 · Java
后端深耕笔记:数据库与 InnoDB、分布式一致性与 Raft、网络编程与零拷贝、Java 并发与微服务,成体系的原理与实战记录。原技术博客的后端栏目,2026-09 随博客并入本站。
一篇读懂 RDMA:为什么 AI 集群的网络要「绕过」操作系统
GPU 很贵,但让 GPU 排队等网络的往往是操作系统——数据包要过内核协议栈、要在内存里来回拷贝。RDMA 用「内核旁路 + 零拷贝」把这条路打通成内存对内存的直通车,把延迟压到微秒级。本文讲透 RDMA 的三大机制、三条传输路线,以及为什么它成了 AI 集群的标配。
一篇读懂限流器:令牌桶、漏桶与滑动窗口的取舍
限流是每个上线系统迟早要补的一课,但「用哪个算法」绝不是背四个名词就完事——固定窗口的边界突刺、令牌桶与漏桶的镜像关系、滑动窗口对数版的内存账,每个选择背后都是真实的取舍。本文用 Redis 官方教程的五种实现为骨架,讲透算法、原子性与选型。
一篇读懂一致性哈希:扩容时只搬 K/N 个 key 的艺术
缓存集群从 10 台扩到 11 台,取模哈希会让几乎全部 key 搬家、缓存瞬间全 miss——一致性哈希用「把服务器和 key 都撒到同一个环上」这一步,把迁移量从「几乎全部」压到「约 K/N」。本文讲透环模型、虚拟节点、它的家族变体,以及工程落地清单。
一篇读懂消息不丢:MQ 可靠性的三方合同
「消息丢了」从来不是一个单点事故,而是生产端、Broker、消费端三个环节各自有各自的丢法。本文按这三方拆解 Kafka 的 acks 与 ISR、RabbitMQ 的 confirm、RocketMQ 的同步刷盘,以及消费端位移提交的经典陷阱,最后给出一套不丢消息的配置合同与工程取舍。
缓存一致性实战:先更新谁,才不会读到脏数据
「先更新数据库再删缓存」几乎是每个人的默认写法,但为什么是这个顺序、残余的不一致窗口长什么样、延迟双删和 binlog 订阅各自在补什么洞——本文把缓存与数据库双写的四种时序逐一推演,讲清 Cache-Aside 的规矩从哪来、窗口怎么收敛,以及生产环境的组合拳与避坑清单。
幂等设计实战:从重复下单说起
用户双击了支付按钮、网关超时重试、支付回调第三次重发——三件事撞在同一毫秒,订单只该创建一次。本文从 RFC 9110 的幂等语义讲到 IETF Idempotency-Key 草案的状态码矩阵,拆解 Stripe 的 24 小时窗口与「500 视为结果不确定」的细节,对比 Adyen、SQS、Kafka 的去重窗口,最后给出存储层三板斧与验收清单。
操作系统内功 · 第 13 篇|io_uring:Linux 异步 IO 的二十年补完计划
libaio 把缓冲 IO 锁进 O_DIRECT 监狱,二十年间 Linux 从未有过真正的异步 IO。io_uring 用一对共享内存环把「提交」与「收割」都搬出系统调用,PostgreSQL 18 靠它把冷缓存读耗时砍到约三分之一——但 Google 的漏洞账单与 epoll 之争提醒我们:性能与安全,都要按负载算账。
操作系统内功 · 第 11 篇|信号与中断:内核如何打断你的程序
你的程序随时可能被内核打断:硬件中断打内核,信号打进程。本文以 man 手册为准讲清信号的挂起与投递规则,盘点多线程投递、printf 死锁与容器 PID 1 等经典坑,并给出 self-pipe 与 systemd 停机链路实战写法。
操作系统内功 · 第 12 篇|cgroup:容器资源隔离的真正执行者
容器只靠 namespace 隔离视图,资源限制与计量的真正执行者是 cgroup。本文拆解 v1 与 v2 的层级与委托差异,cpu、memory、io、pids 四大控制器的超限行为,Kubernetes 的 QoS 分级与 OOM 选择逻辑,并复盘 CPU limit 节流毛刺等经典误配的排查方法。
操作系统内功 · 第 8 篇|容器底座:namespace、overlayfs 与 cgroup v2
容器不是虚拟机——没有 guest kernel,只有三个内核老特性的组合拳:namespace 管隔离、overlayfs 管镜像、cgroup 管配额。本篇拆解 namespace 八兄弟的分工与 user namespace 的安全争议、overlayfs 的 copy-up 机制、cgroup v2 统一层级,以及 K8s 里 OOM 误杀的完整逻辑链。
操作系统内功 · 第 5 篇|IO 多路复用:从 select 1024 上限到 epoll 事件循环
1999 年提出的 C10K 问题催生了 nginx 与 epoll 时代。本篇拆解 select 的三宗罪、epoll 红黑树加就绪链表的两件套、LT 与 ET 两种敲门语义,讲清惊群问题的三代解法,并解释 Redis 为什么单线程也能扛十万连接、io_uring 又补上了哪块短板。
操作系统内功 · 第 2 篇|虚拟内存:页表、TLB 与一次缺页中断的旅程
malloc 返回的指针为什么「立刻可用」却几乎不花时间?一台 64GB 机器为什么能 mmap 500GB 的文件?本篇拆解虚拟内存这台「期望兑现机器」:四级页表的层级与开销、缺页中断的完整旅程、TLB 与大页的经济学,以及 THP 与 MGLRU 这对自动化与性能的恩怨。
操作系统内功 · 第 3 篇|内存分配内幕:伙伴系统、SLUB 与 glibc 碎片连环事故
RSS 缓慢上涨、堆剖析却查不到泄漏,最后被 OOM killer 一枪带走——这类事故的根源常常不是泄漏,而是分配器的碎片化。本篇从内核的伙伴系统讲到 SLUB,再对比 ptmalloc、tcmalloc、jemalloc 三国志,把 OOM killer 的判决逻辑和 overcommit 的三种姿势一次讲透。
操作系统内功 · 第 4 篇|文件系统与 Page Cache:fsync 到底向你承诺了什么
2018 年 PostgreSQL 社区发现 Linux 可能在 fsync 返回成功后丢掉报错、让下一次 fsync 假成功——fsyncgate 事件把「fsync 承诺什么」逼到了台前。本篇从 VFS 与 Page Cache 讲到脏页回写、ext4 日志、fsyncgate 完整始末与 O_DIRECT 双缓冲之争。
操作系统内功 · 第 7 篇|TCP 深水区:TIME_WAIT、Nagle 陷阱与 BBR 拥塞控制
大促高峰端口耗尽、接口莫名多出 40ms、跨洋传输慢成龟速——后端最常见的三类 TCP 生产疑难,根源都藏在本篇:TIME_WAIT 的 2MSL 债务、Nagle 与 delayed ACK 的相互等待、以及从 CUBIC 到 BBR 的拥塞控制换代。附 syncookies 与 TCP Fast Open 的现实约束。
操作系统内功 · 第 9 篇|eBPF:从抓包过滤器到内核可编程层
一门 1992 年为 tcpdump 设计的过滤语言,三十年后成了云原生时代的「内核可编程层」:Cloudflare 用它单核丢弃一千万包/秒,Cilium 用它替换 kube-proxy,全行业却也在收紧它的权限。本篇讲透 eBPF 的验证器、CO-RE 可移植性、XDP 实战与安全争议。
操作系统内功 · 第 10 篇|性能观测方法论:USE 方法、火焰图与 P99 尾延迟
「系统变慢了」是最难的工单——工具人人都有,方法论才分高下。系列收官篇讲透三套底层功法:给每个资源问三个问题的 USE 方法、让热点自己浮出来的火焰图、以及 P99 为什么比均值重要的尾延迟理论,外加压测圈最大的谎言「协调遗漏」。
操作系统内功 · 第 1 篇|进程与线程:fork 的 CoW 代价与 EEVDF 新调度器
进程与线程是后端工程师用得最多、想得最少的两个抽象。本篇从 2014 年 Redis 的 THP 延迟尖刺事故开题,讲透 fork 写时复制的真实账单、上下文切换从 1.2 微秒到 800% 开销的完整谱系,以及 2023 年随 Linux 6.6 登场、取代 CFS 的 EEVDF 新调度器。
操作系统内功 · 第 6 篇|零拷贝:sendfile 与 Kafka 高吞吐的底层密码
同样是发文件,普通路径要 4 次拷贝 2 次系统调用,Kafka 却能在一台普通机器上把消费速率顶到网卡极限——差距就在零拷贝。本篇算清 read+write 的完整拷贝账单,讲透 sendfile 与 SG-DMA 的两档进化、splice 与 mmap 的取舍,以及 nginx 与 TLS 时代的现实约束。
Java 25 LTS 与虚拟线程这三年:从 pinning 之痛到放心用
Java 25 是继 21 之后的又一个 LTS:紧凑对象头转正、简单源文件定稿、Scoped Values 定稿、AOT 缓存一条命令可用。本文以官方 JEP 为准过一遍关键特性,并复盘虚拟线程落地三年的生产经验——pinning 的来龙去脉、适用边界与响应式编程的取舍。
第 1 / 3 页 · 共 55 篇
下一页 →