HyperLogLog:用1.5KB内存估算十亿级基数的概率魔法
引言:一个看似不可能的问题 假设你正在运营一个日活用户超过十亿的社交平台,产品经理问你:“今天有多少独立用户访问了我们的网站?“这个问题听起来简单,但当你真正思考如何回答时,会发现它蕴含着深刻的计算机科学难题。 ...
引言:一个看似不可能的问题 假设你正在运营一个日活用户超过十亿的社交平台,产品经理问你:“今天有多少独立用户访问了我们的网站?“这个问题听起来简单,但当你真正思考如何回答时,会发现它蕴含着深刻的计算机科学难题。 ...
2010年9月23日,Facebook经历了成立以来最严重的一次宕机——整整2.5小时,全球5亿用户无法访问。事后复盘发现,罪魁祸首竟是一个看似不起眼的配置值错误:当自动验证服务从数据库读取到一个无效值后,它删除了缓存条目,随后大量请求穿透到数据库。数据库超载后返回超时,系统将超时误判为无效值再次删除缓存,形成了无法自愈的死亡螺旋。 ...
数据库教科书告诉开发者一个简单的承诺:事务一旦提交,数据就是持久的。ACID中的"D"代表Durability——持久性。但生产环境中的实际情况远比教科书复杂:同样配置了主从复制、同样使用了SSD存储、同样收到了COMMIT成功的返回码,断电重启后,有些数据确实完好无损,有些却凭空消失了。 ...
2019年,一个电商团队在双十一大促期间遇到了诡异的问题:大量用户反映购物车商品莫名消失,但客服排查后发现商品数据本身没有任何问题。监控日志显示,用户的会话ID在请求链路中发生了跳变——用户从服务器A跳到了服务器B,而服务器B从未见过这个会话。这不是bug,这是分布式系统架构的必然代价。 ...
title: “跳表:概率如何击败确定性复杂度” date: “2026-03-07T04:35:05+08:00” description: “从William Pugh 1990年的原始论文出发,深入解析跳表的概率平衡原理、Redis与LevelDB的技术选型逻辑、与红黑树的权衡分析,以及为什么这种"用随机换简单"的设计哲学在高性能系统中持续发光。” draft: false categories: [“数据结构”, “算法”, “系统设计”] tags: [“跳表”, “Skip List”, “Redis”, “红黑树”, “概率数据结构”, “并发编程”, “LevelDB”] 1989年,马里兰大学的William Pugh向 Communications of the ACM 投递了一篇仅四页的论文。这篇论文提出了一个看似荒谬的问题:能不能用掷硬币的方式,替代红黑树中那些令人头疼的旋转操作? ...
2009 年,Salvatore Sanfilippo(antirez)在开发一个实时日志分析系统时,需要一个能够快速处理并发请求的数据存储。他做出了一个在当时看来"反直觉"的设计选择:用单线程模型处理所有请求。十五年后的今天,这个被命名为 Redis 的项目,单线程核心依然能够支撑每秒 10 万次以上的操作。 ...
2016年2月8日,分布式系统研究员Martin Kleppmann发表了一篇博客文章,标题直截了当:《如何正确实现分布式锁》。文章开篇就对Redis官方文档中的Redlock算法提出了尖锐批评,结论是"这个算法不适合用于正确性依赖于锁的场景"。 ...