错误处理为何分裂五十年:从PL/I的ON语句到Rust的Result类型

1964年,IBM开始设计PL/I语言,并引入了一个名为ON的语句。程序员可以用ON ENDFILE(SYSIN) GO TO LABEL;来指定当文件结束时跳转到特定标签。这是编程语言史上第一次将"异常情况处理"作为一等语言特性。 ...

12 min · 5800 words

分布式锁为何成了生产事故的隐形杀手——从Martin Kleppmann与antirez的论战说起

2016年2月8日,分布式系统研究员Martin Kleppmann发表了一篇博客文章,标题直截了当:《如何正确实现分布式锁》。文章开篇就对Redis官方文档中的Redlock算法提出了尖锐批评,结论是"这个算法不适合用于正确性依赖于锁的场景"。 ...

11 min · 5447 words

为什么不存在万能压缩算法:从香农熵到不可能三角的数学真相

1948年,贝尔实验室的Claude Shannon在《Bell System Technical Journal》上发表了一篇论文——“A Mathematical Theory of Communication”。这篇论文定义了一个被称为"熵"的量: ...

12 min · 5650 words

健康检查为何成了分布式系统的隐形杀手——从TCP端口探测到语义健康检测的二十年陷阱

2018年,一个技术团队在生产环境遇到了一个诡异的现象:每当数据库响应变慢,整个服务集群就会在几分钟内完全瘫痪。排查后发现,罪魁祸首是健康检查——当数据库变慢时,应用的健康检查端点开始超时,负载均衡器将服务器标记为不健康,剩余服务器承受更多流量,进一步恶化,形成恶性循环。 ...

13 min · 6109 words

TCP拥塞控制算法四十年演进:从Reno到BBR的技术博弈

1986年10月,Lawrence Berkeley Laboratory(LBL)与加州大学伯克利分校之间的网络连接出现了一个令人困惑的现象:两地相隔仅400码,中间只经过两个IMP(Interface Message Processor)跳转,正常情况下数据吞吐量应维持在32 Kbps左右,但在这段时间里,吞吐量骤降至40 bps——下降了近1000倍。 ...

13 min · 6369 words

无锁编程的内存困境:为什么最难的竟不是算法本身

2015年,Rust核心团队成员Aaron Turon发布了一个名为Crossbeam的库。他在博客中写道:“如果我问Rust社区,构建锁-free数据结构最大的障碍是什么,答案几乎总是一样的——内存管理。” ...

13 min · 6441 words

限流算法的选择困境:令牌桶、漏桶还是滑动窗口?

2005年,卡内基梅隆大学的研究人员进行了一项有趣的实验。他们在校园网络的边缘路由器上部署了四种不同的限流算法,然后用真实流量和Blaster蠕虫攻击数据进行测试。结果令人意外:表现最差的算法错误率高达30%,而表现最好的算法错误率低于1%。 ...

10 min · 4594 words