API响应时间的长尾困境:为什么P99延迟总是比你想象的更糟糕?

一个API报告的中位响应时间是50毫秒,运维团队对此很满意。但用户持续投诉系统"卡顿"。监控面板显示P99延迟达到了2秒——这意味着每100个请求中就有1个需要等待2秒。如果这个系统每秒处理1000个请求,那么每分钟就有600个用户在经历糟糕的体验。 ...

13 min · 6014 words

计算机时钟为何永远不准——从晶振漂移到分布式时间同步的技术突围

2012年6月30日午夜,全球多家知名网站突然瘫痪。Reddit用户发现网站无法访问,LinkedIn的Java进程陷入死循环,Mozilla的Hadoop集群停止工作,澳洲航空公司的值机系统全面崩溃。罪魁祸首只有一个:一个叫做"闰秒"的额外时间单位。 ...

9 min · 4047 words

打开一个500MB的文件需要多久:从字符串到Piece Tree的文本编辑器数据结构进化史

2018年之前,Visual Studio Code用户经常报告一个奇怪的问题:打开某些文件会导致内存溢出崩溃。罪魁祸首是一个35 MB的文件——听起来不大,但它有1370万行。VSCode为每一行创建一个对象,每个对象占用40-60字节,结果光是行数组就消耗了约600 MB内存,是原文件大小的近20倍。 ...

14 min · 6527 words

GraphQL vs REST:两种API设计范式的十五年博弈

2011年,Facebook面临一场生存危机。移动应用市场正在爆炸式增长,iOS和Android设备数量呈指数级上升,但Facebook的移动应用却饱受诟病——频繁崩溃、响应缓慢、用户体验极差。Mark Zuckerberg后来承认,Facebook当时押注HTML5的战略是"我们犯下的最大错误"。 ...

10 min · 4553 words

故障检测器为何成为分布式系统最脆弱的一环——从心跳超时的两难困境到Phi Accrual的数学突围

1997年,NASA的Mars Pathfinder探测器在火星表面成功着陆后不久,开始出现诡异的系统重启。每次重启都导致数据采集中断,任务濒临失败。工程师们排查后发现,问题出在一个经典的分布式系统困境:优先级反转导致低优先级任务长时间占用关键资源,高优先级的"看门狗"任务无法及时执行,系统误判为故障并触发重启。 ...

10 min · 4796 words

消息队列的投递语义为何如此复杂:从「精确一次」的不可能到「有效一次」的工程实践

2019年,某支付平台因消息重复处理导致同一笔订单被扣款两次。工程师排查后发现,消费者在处理完消息后、发送确认前崩溃,消息队列在超时后重新投递,而业务代码没有实现幂等性。这不是个例——在分布式系统中,消息的重复投递几乎是不可避免的。 ...

12 min · 5898 words

TCP丢包检测为何如此复杂:从超时重传到RACK的四十年技术博弈

1986年10月,美国劳伦斯伯克利实验室(LBL)到加州大学伯克利分校之间的网络连接发生了一件怪事。这两个地理上相距仅400码、中间只隔两个IMP跳站的站点,数据吞吐量从正常的32 Kbps骤降到40 bps——下降了近1000倍。这不是网络故障,而是人类历史上第一次记录到的"拥塞崩溃"(Congestion Collapse)。 ...

11 min · 5261 words