展示 HN:系统设计图集,含交互式架构图
摘要
一个基于网络的交互式图集,提供了常见系统设计问题的详细示例和架构图,如 Twitter 信息流和聊天系统。
暂无内容
查看缓存全文
缓存时间: 2026/09/23 22:01
# 系统设计图谱
来源:https://atlas-sysdes.vercel.app/
## 设计方案
15个
按出现频率排序的常见问题。前五个覆盖了大部分常见问题。
01### Twitter / Instagram 信息流 家庭时间线每秒服务15万次读取,一条帖子可能触达上亿粉丝。大V问题。仅针对中位数用户的设计会失败——扇出成本是双峰的,代码路径必须分流。扇出将单个事件分发给多个接收者,例如将帖子发送给所有关注者。缓存将热点数据保留在快速存储中以跳过慢速查询。Cassandra 为跨多节点高写入负载设计的宽列数据库。核心特性极快的写入速度(LSM树)、无主架构无单点故障、通过添加节点线性扩展、可调整每次查询的一致性、多数据中心复制适用场景写入密集型时序数据与动态流、始终在线的多区域数据、事先已知键的访问模式分页分页返回大型结果集。 (https://atlas-sysdes.vercel.app/docs/01-twitter-instagram-feed)02### 聊天 / Slack 五千万个并发连接、有序的消息传递,以及会话中途离线的用户。你有五十个有状态网关节点和一条发给爱丽丝的消息。发送者如何找到持有她连接的节点?当她离线时会发生什么?实时推送在事件发生时立即将更新推送给客户端。WebSocket浏览器与服务器之间的持久双向连接。核心特性基于单一TCP连接的全双工通信、服务器主动推送无轮询、低单消息开销、有状态:会话粘性更难负载均衡适用场景聊天、实时协作、多人游戏、动态流、在线状态、通知服务器必须在无请求时主动推送Cassandra 为跨多节点高写入负载设计的宽列数据库。核心特性极快的写入速度(LSM树)、无主架构无单点故障、通过添加节点线性扩展、可调整每次查询的一致性、多数据中心复制适用场景写入密集型时序数据与动态流、始终在线的多区域数据、事先已知键的访问模式幂等性重复请求与执行一次产生相同效果。 (https://atlas-sysdes.vercel.app/docs/02-chat-slack)03### URL 缩短器 每天一亿次链接访问,读写比达百比一。经典的估算热身题。生成短、唯一、不可猜测的键而不产生中心瓶颈——认识到这是缓存问题而非数据库问题。估算用于流量、存储和容量的粗略计算。缓存将热点数据保留在快速存储中以跳过慢速查询。Redis用于缓存、计数器、队列和发布/订阅的内存数据存储。核心特性亚毫秒级读写、丰富数据类型(有序集合、哈希、流)、每个键的TTL过期、原子操作和Lua脚本、可选持久化和副本适用场景在数据库前缓存热读、计数器、速率限制、排行榜、具有TTL的会话与短生命周期数据分片将数据分割存储在多台机器上,避免单节点持有全部数据。 (https://atlas-sysdes.vercel.app/docs/03-url-shortener)04### 分布式限流器 在一组无状态API服务器集群上强制执行全局限制,每秒一百万次请求。在每次请求中无需同步Redis往返即可执行全局限制——并决定当限流器自身存储宕机时该怎么办。速率限制限制客户端在时间窗口内可发出的请求数量。Redis用于缓存、计数器、队列和发布/订阅的内存数据存储。核心特性亚毫秒级读写、丰富数据类型(有序集合、哈希、流)、每个键的TTL过期、原子操作和Lua脚本、可选持久化和副本适用场景在数据库前缓存热读、计数器、速率限制、排行榜、具有TTL的会话与短生命周期数据并发保证多个请求同时操作时数据的正确性。可靠性在系统部分故障时保持可用和正确。 (https://atlas-sysdes.vercel.app/docs/04-rate-limiter)05### 通知系统 来自多个生产者的事件,匹配给接收者,通过应用内消息、邮件和推送送达,且不丢失任何一条。第三方送达渠道经常故障且受限。不能丢失任何信息,不能出现明显重复,且一个不稳定的服务提供商不能拖垮其他系统。事件驱动服务对发布的事件做出反应,而非相互调用。Kafka用于服务间流式传输事件的分布式、分区提交日志。核心特性可重放性:消费者可回退偏移量、持久化复制分区、容错:领导者故障转移、高吞吐量按分区扩展、分区内有序适用场景多服务间流式传输事件、回放历史以重建或填充数据、大规模日志指标与点击流扇出将单个事件分发给多个接收者,例如将帖子发送给所有关注者。幂等性重复请求与执行一次产生相同效果。熔断器停止调用故障依赖项直到其恢复。 (https://atlas-sysdes.vercel.app/docs/05-notification-system)06### 搜索与自动补全 十亿文档,每秒十万次查询,且每次按键都触发自动补全。搜索是分散聚合模型,因此延迟取决于最慢的分片。索引不是数据源——必须解释如何保持同步及其滞后性。搜索通过文本查找文档,通常使用倒排索引。Elasticsearch基于倒排索引的分布式搜索引擎。核心特性带相关性排序的全文搜索、近实时索引、分片与复制、聚合与分面、模糊匹配与自动补全适用场景全文搜索与自动补全、搜索和分析日志、跨多字段过滤与分面分片将数据分割存储在多台机器上,避免单节点持有全部数据。缓存将热点数据保留在快速存储中以跳过慢速查询。 (https://atlas-sysdes.vercel.app/docs/06-search-typeahead)07### Uber / 外卖追踪 五百万司机每四秒上报一次位置,实时匹配给乘客。两个问题结合:每秒125万次位置写入会摧毁任何磁盘索引,以及匹配步骤中两个乘客不能获得同一个司机。地理空间索引按地图位置索引和查询事物。Redis用于缓存、计数器、队列和发布/订阅的内存数据存储。核心特性亚毫秒级读写、丰富数据类型(有序集合、哈希、流)、每个键的TTL过期、原子操作和Lua脚本、可选持久化和副本适用场景在数据库前缓存热读、计数器、速率限制、排行榜、具有TTL的会话与短生命周期数据并发保证多个请求同时操作时数据的正确性。实时推送在事件发生时立即将更新推送给客户端。Saga通过补偿步骤撤销的多步事务。 (https://atlas-sysdes.vercel.app/docs/07-uber-delivery-tracking)08### 视频流 上传、转码并以每秒25太比特的出站流量交付视频。视频字节永不接触应用服务器——上传时如此,播放时亦然。实际构建的是元数据服务和转码管道。对象存储廉价持久的文件与对象存储,如S3。核心特性极高持久性(11个9)、近乎无限的规模、低每GB成本(存储层)、预签名URL支持直接上传、整体对象写入无就地修改适用场景用户上传、媒体与备份、大型文件而非可查询记录、数据湖与长期存档CDN从靠近用户的位置提供内容的边缘服务器。核心特性来自近边缘的低延迟、从源站分流流量、缓存静态文件与媒体、吸收流量高峰和DDoS攻击适用场景静态资源图片和视频、远离源站的用户群体、边缘可缓存的API响应分块将大文件分割成片段以上传、去重和同步。流处理在无界事件流上持续计算结果。 (https://atlas-sysdes.vercel.app/docs/08-video-streaming)09### 网络爬虫 一百亿页面,每秒一万次抓取,且不冲击任何单一域名。礼仪性。快速爬取很容易;在不使单个主机过载的前提下快速爬取,需要按主机分组而非FIFO的队列设计。然后在无法存储所有已见记录的规模下去重。布隆过滤器紧凑的集合检查,回答“肯定不”或“可能”。去重检测并丢弃重复项或消息。一致性哈希将键映射到节点,使得添加节点时仅移动少量键。速率限制限制客户端在时间窗口内可发出的请求数量。 (https://atlas-sysdes.vercel.app/docs/09-web-crawler)10### 支付系统 通过不可靠的外部处理器进行收费、扣款、退款和支付,同时账本必须平衡。在一致性战胜可用性的设计中,至少一次加幂等性不再是口号,而是防止重复扣款的机制。一致性每位读者是否看到最新写入及其时效。幂等性重复请求与执行一次产生相同效果。Saga通过补偿步骤撤销的多步事务。发件箱将事件与数据一起写入数据库,然后发布。Postgres关系型SQL数据库,事务数据的安全默认选择。核心特性ACID事务、联接约束外键、强一致性、扩展:JSONB、PostGIS、全文搜索、通过流复制实现读副本适用场景涉及资金、订单及任何需要事务的场景、通过联接查询的关系型数据、在规模迫使之前始终作为默认选择 (https://atlas-sysdes.vercel.app/docs/10-payment-system)11### 票务大师 / 预订 五万人在同一秒钟内想要同样的百个座位。这是竞争而非规模。行锁竞争最先崩溃,而非吞吐量——因此答案是在应用层前进行准入控制,而非更大的集群。并发保证多个请求同时操作时数据的正确性。一致性每位读者是否看到最新写入及其时效。Postgres关系型SQL数据库,事务数据的安全默认选择。核心特性ACID事务、联接约束外键、强一致性、扩展:JSONB、PostGIS、全文搜索、通过流复制实现读副本适用场景涉及资金、订单及任何需要事务的场景、通过联接查询的关系型数据、在规模迫使之前始终作为默认选择Saga通过补偿步骤撤销的多步事务。 (https://atlas-sysdes.vercel.app/docs/11-ticketmaster-booking)12### Dropbox / 文件同步 跨设备同步文件时,不因一段文字修改而重新上传两GB文件。通过内容定义分块和增量同步提高带宽效率——并妥善处理两个客户端离线编辑同一文件的情况。分块将大文件分割成片段以上传、去重和同步。去重检测并丢弃重复项或消息。对象存储廉价持久的文件与对象存储,如S3。核心特性极高持久性(11个9)、近乎无限的规模、低每GB成本(存储层)、预签名URL支持直接上传、整体对象写入无就地修改适用场景用户上传、媒体与备份、大型文件而非可查询记录、数据湖与长期存档一致性每位读者是否看到最新写入及其时效。 (https://atlas-sysdes.vercel.app/docs/12-dropbox-file-sync)13### 广告点击聚合 每秒一百万事件聚合到快速仪表盘和精确的计费数字中。事件时间。点击到达时延迟、乱序且重复。按到达时间聚合简单但错误,而广告主根据这些数字付费。流处理在无界事件流上持续计算结果。Flink用于有状态实时计算的流处理器。核心特性通过检查点实现精确一次状态、事件时间窗口与水位线、低延迟处理、大型键控状态容错适用场景实时聚合与告警、流上欺诈或异常检测、连接与窗口化事件流OLAP为聚合海量数据集优化的分析数据库。核心特性列式存储与压缩、对数十亿行快速聚合、物化视图与上卷例如ClickHouse、Druid、BigQuery适用场景大型事件表上的仪表盘、即席分析查询、聚合而非逐行更新Kafka用于服务间流式传输事件的分布式、分区提交日志。核心特性可重放性:消费者可回退偏移量、持久化复制分区、容错:领导者故障转移、高吞吐量按分区扩展、分区内有序适用场景多服务间流式传输事件、回放历史以重建或填充数据、大规模日志指标与点击流去重检测并丢弃重复项或消息。 (https://atlas-sysdes.vercel.app/docs/13-ad-click-aggregation)14### 分布式缓存 构建Redis:一百个节点持有TB级热点数据,提供亚毫秒级读取。重新平衡。朴素取模哈希在添加节点时会使80%的缓存失效并冲击源站。一致性哈希无法解决热点键问题。一致性哈希将键映射到节点,使得添加节点时仅移动少量键。缓存将热点数据保留在快速存储中以跳过慢速查询。Redis用于缓存、计数器、队列和发布/订阅的内存数据存储。核心特性亚毫秒级读写、丰富数据类型(有序集合、哈希、流)、每个键的TTL过期、原子操作和Lua脚本、可选持久化和副本适用场景在数据库前缓存热读、计数器、速率限制、排行榜、具有TTL的会话与短生命周期数据复制在多个节点保存数据副本以提高持久性和读扩展。 (https://atlas-sysdes.vercel.app/docs/14-distributed-cache)15### Google Docs 多人同时编辑同一文档,无感知延迟且不丢失编辑。收敛性。两个用户在无协调情况下编辑同一句子。最终双方必须得到完全相同的文档,且任一编辑都不能被静默丢弃——因此“最后写入胜出”是灾难性错误。CRDT / OT合并并发编辑使每个副本收敛到相同状态。一致性每位读者是否看到最新写入及其时效。WebSocket浏览器与服务器之间的持久双向连接。核心特性基于单一TCP连接的全双工通信、服务器主动推送无轮询、低单消息开销、有状态:会话粘性更难负载均衡适用场景聊天、实时协作、多人游戏、动态流、在线状态、通知服务器必须在无请求时主动推送实时推送在事件发生时立即将更新推送给客户端。 (https://atlas-sysdes.vercel.app/docs/15-google-docs-collaborative-editing)
相似文章
展示HN:任何HuggingFace模型的交互式、动画化架构
一款用于可视化任何HuggingFace模型架构的交互式动画工具,对开发者和研究人员非常实用。
Show HN:Atlasphere – 实时基础设施架构图
Atlasphere 是一款 macOS 应用,它使用只读 IAM 角色自动从您的 AWS 账户生成实时基础设施架构图,并让图表与实际资源保持同步。
展示HN:Hacker Atlas - 一个展示Hacker News讨论主题的地图
Hacker Atlas 是一个可视化工具,用于映射Hacker News上讨论的主题,并正在寻求用户反馈以进行改进。
Show HN:VoiceDraw – 大声讨论系统设计,图表自动生成
VoiceDraw 是一款工具,在你说话时自动绘制系统设计图,并记录推理过程和权衡取舍。
ByteByteGoHq/system-design-101
一个GitHub仓库,提供复杂系统设计概念的视觉化和简单解释,涵盖API、负载均衡、HTTP和网络等主题。