一行请求瘫痪百万用户:Web缓存投毒为何成为互联网的隐形杀手

2018年8月,PortSwigger安全研究员James Kettle在Black Hat USA上展示了一项研究成果。他通过一个精心构造的HTTP请求,成功控制了Firefox浏览器的更新系统——理论上可以影响数千万用户。攻击方式简单到令人不安:发送一个带有恶意X-Forwarded-Host头的请求,缓存在此基础上存储了一个指向攻击者服务器的响应,随后所有请求更新的Firefox用户都会被重定向到攻击者控制的服务器。 ...

9 min · 4413 words

内存分配器为何成为高并发服务器的隐形瓶颈:从ptmalloc到mimalloc的四十年技术博弈

title: “内存分配器为何成为高并发服务器的隐形瓶颈:从ptmalloc到mimalloc的四十年技术博弈” date: “2026-03-07T07:47:31+08:00” description: “深入解析内存分配器的演进历程,从dlmalloc的设计原理到ptmalloc的多线程扩展,从jemalloc的arena架构到tcmalloc的per-CPU缓存,再到mimalloc的free list sharding创新。揭示高并发环境下内存分配的性能瓶颈、内存碎片的本质原因,以及如何根据工作负载选择合适的内存分配器。” draft: false categories: [“系统编程”, “性能优化”] tags: [“内存分配器”, “jemalloc”, “tcmalloc”, “mimalloc”, “ptmalloc”, “内存碎片”, “多线程性能”, “系统调优”] 2017年,某支付平台的技术团队发现一个诡异现象:服务器运行一段时间后,RSS(Resident Set Size)持续增长,最终达到堆内存的三倍以上。排查后发现,问题出在glibc的默认内存分配器——即使应用层正确释放了内存,分配器却未能将物理内存归还给操作系统。 ...

12 min · 5533 words

循环依赖为何如此难以根除:从编译器报错到生产事故的完整技术解析

Uber的调度系统曾经遇到过一个难以复现的诡异bug:location-service → driver-service → trip-service → location-service,形成了一个完美的循环调用链。这个bug只在特定条件下触发——当司机和乘客恰好处于同一个geohash网格中时。在测试环境中,这个条件几乎不可能被满足,因此问题长期潜伏。直到某次高峰期,大量用户在相同区域,循环依赖终于暴露,系统负载瞬间飙升。 ...

11 min · 5126 words

一个服务地址背后的十五年博弈:从DNS到服务网格的演进之路

title: “一个服务地址背后的十五年博弈:从DNS到服务网格的演进之路” date: “2026-03-07T07:33:21+08:00” description: “深入解析微服务架构中服务发现的核心挑战。从DNS的TTL困境到客户端与服务端发现模式的权衡,从Eureka的AP设计哲学到Consul的Raft一致性保证,系统梳理不同服务发现方案的技术本质。分析Netflix、阿里巴巴等企业的实践案例,揭示服务发现在网络分区、脑裂、健康检查等场景下的设计考量,并提供不同场景下的技术选型决策框架。” draft: false categories: [“分布式系统”, “微服务”, “架构设计”] tags: [“服务发现”, “DNS”, “Consul”, “Eureka”, “etcd”, “服务网格”, “Istio”, “Kubernetes”, “CAP定理”, “Raft”, “微服务”, “负载均衡”, “健康检查”] 2015年,Netflix的工程师们设计了一个看似反直觉的机制:当Eureka服务注册中心检测到大量客户端心跳丢失时,它不会驱逐这些"失联"的实例,而是进入"自我保护模式",保留所有现有记录。这不是bug,而是设计者精心埋下的安全机制。这个设计揭示了服务发现系统面临的一个根本性困境:在网络不可靠的世界里,你究竟应该相信什么? ...

14 min · 6638 words

Source Map为何成为前端安全的隐形漏洞——从Apple泄露事件到70%网站的共同困境

2025年11月4日,Apple发布了重新设计的App Store网站。几小时后,一个名为rxliuli的GitHub用户发现了一个令人震惊的问题:网站的JavaScript文件末尾赫然写着//# sourceMappingURL=...,指向了一个可公开访问的.map文件。通过一个Chrome扩展,这位用户下载了Apple前端代码库的完整源码——包括Svelte/TypeScript源代码、状态管理逻辑、UI组件、API集成代码和路由配置。这个仓库在被DMCA下架前被fork了超过8000次。 ...

8 min · 3554 words

数据库已提交的事务为何会丢失?从fsync到异步提交的持久性权衡

数据库教科书告诉开发者一个简单的承诺:事务一旦提交,数据就是持久的。ACID中的"D"代表Durability——持久性。但生产环境中的实际情况远比教科书复杂:同样配置了主从复制、同样使用了SSD存储、同样收到了COMMIT成功的返回码,断电重启后,有些数据确实完好无损,有些却凭空消失了。 ...

13 min · 6186 words

浏览器存储配额:为什么你的本地数据会在关键时刻消失?

一个离线优先的笔记应用,用户积累了数月的本地数据。某天打开应用,发现所有数据消失了——没有任何错误提示,没有任何用户操作。开发者检查代码,没有发现任何删除数据的逻辑。这不是bug,这是浏览器的存储驱逐机制在"正常工作"。 ...

9 min · 4320 words