我们发现,大多数开发者都是在面试准备变得不可避免时才开始学习系统设计。但只有在打开几篇教程或观看一些随机的架构视频之后,困惑才开始浮现,他们开始不知道从哪里入手,甚至不知道该学些什么。
系统设计之所以让人感到难以招架,是因为它并不是一个单一的主题。一个完整的系统设计大纲包括架构基础、数据库、缓存、API、分布式系统、可靠性、可扩展性、消息系统以及生产环境架构挑战。更重要的是,这些概念是循序渐进、环环相扣的,因此只有按照正确的顺序学习才能真正理解它们。有些人直接跳到系统设计面试题,结果反而更加困惑。
无论你是初学系统设计、正在准备 SDE-2 面试,还是想理解大规模应用,本指南都将一步一步地带你走完一份完整的系统设计学习路线。你将了解系统设计课程应包含哪些主题、高层系统设计与低层系统设计有何区别、应该练习哪些案例研究,以及结构化学习何时对面试准备和后端工程岗位有所帮助。
如果你想在深入高级架构主题之前先建立清晰的概念,可以查看这份系统设计教程,它能帮助你理解基础知识。
Transform Your Career
Choose from our industry-leading programs designed for career success
Modern Software and AI Engineering Program
Master full-stack development with AI integration

+1000 more
AI Forward Deployed Engineer with Specialisation in AI applications
Build and deploy AI solutions for real-world business problems

+1000 more
Modern Data Science and ML with specialisation in AI
Advanced data science techniques with AI specialization

+1000 more
Advanced AIML with Specialisation in Agentic AI
Deep dive into AIML with focus on Agentic systems

+1000 more
DevOps, Cloud & AI Platform Engineering
Build and manage AI-powered cloud infrastructure

+1000 more
AI Engineering Advanced Certification by IIT-Roorkee
Premier AI engineering certification from IIT-Roorkee
系统设计大纲速览
在查看各个模块的详细内容之前,你可以先看看这里的概览。
一份扎实的系统设计学习路线通常包括以下内容:
| 模块 | 涵盖主题 |
| 前置知识 | DSA、OOP、DBMS、操作系统、计算机网络、API、后端基础 |
| 模块 1:系统设计基础 | 需求收集、规模估算、约束条件、假设、权衡取舍 |
| 模块 2:高层系统设计(HLD) | 架构图、服务、API、数据库、负载均衡器和缓存 |
| 模块 3:可扩展性模式 | 水平扩展、分区、分片、复制、CDN、队列 |
| 模块 4:数据架构 | SQL 与 NoSQL 对比、索引、事务、一致性、可用性、CAP 定理 |
| 模块 5:可靠性与性能 | 容错、重试、限流、监控、灾难恢复 |
| 模块 6:低层系统设计(LLD) | 面向对象设计、类图、SOLID 原则、设计模式、接口 |
| 模块 7:分布式系统 | 消息系统、Kafka、事件驱动架构、微服务、最终一致性 |
| 模块 8:系统设计案例研究 | URL 短链接、聊天应用、社交信息流、网约车系统、流媒体系统和支付架构 |
| 模块 9:面试准备 | 结构化回答、架构图、瓶颈、API、权衡说明、模拟设计面试 |
完整系统设计大纲详解
你可以查看下表,它逐模块拆解了完整的系统设计大纲,包括每个阶段教授的内容、为什么重要,以及完成该阶段后你理想情况下应具备的实践能力。
| 模块 | 学习者的问题 | 需要覆盖的主题 | 实践成果 |
| 先修知识 | 我准备好学习系统设计了吗? | 数据结构与算法、面向对象编程、数据库管理系统、操作系统、网络、API、后端基础 | 能听懂架构讨论而不迷失方向 |
| 设计基础 | 我该如何处理开放式问题? | 需求、约束、规模估算、假设、权衡 | 将模糊的问题转化为结构化的设计 |
| HLD 基础 | 大型系统是如何组合在一起的? | 服务、API、数据库、缓存、负载均衡器、CDN、存储 | 绘制基本的高层系统设计图 |
| 可扩展性 | 系统如何应对增长? | 水平扩展、无状态服务、分片、复制、队列 | 将系统从小规模负载扩展到数百万用户 |
| 数据架构 | 数据应如何存储和访问? | SQL 与 NoSQL、索引、事务、CAP 定理、一致性 | 选择合适的数据库策略 |
| 缓存与性能 | 系统如何变得更快? | Redis、CDN、缓存失效、热点键、读写优化 | 在具备权衡意识的前提下设计缓存层 |
| 可靠性工程 | 系统如何在故障中存活? | 重试、故障转移、备份、超时、熔断器 | 解释容错架构决策 |
| LLD 基础 | 我该如何设计可维护的组件? | SOLID、设计模式、接口、UML、对象关系 | 设计更清晰的服务和模块结构 |
| 分布式系统 | 大规模场景下会有什么变化? | Kafka、队列、事件驱动系统、微服务 | 设计异步和分布式工作流 |
| 案例研究 | 我该如何解决真实的系统设计场景? | URL 短链接、聊天应用、YouTube、Uber、支付、信息流 | 建立面向面试的架构思维 |
| 面试准备 | 我该如何应对系统设计面试? | API、瓶颈、图表、扩展、权衡 | 自信地应对 HLD 和 LLD 面试环节 |
系统设计大纲包含哪些内容?
一份完整的系统设计课程大纲应包含所有核心主题以及相应的练习方法。学习通常从后端基础和系统设计基础开始,逐步进阶到可扩展架构、分布式系统、可靠性以及生产级案例研究。
大多数系统设计课程通常包括:
- 系统设计基础
- 高层设计(HLD)
- 低层设计(LLD)
- 数据库与数据建模
- 缓存与性能优化
- 队列与事件驱动系统
- 可扩展性模式
- 分布式系统
- 可靠性工程
- 架构案例研究
课程大纲还应明确区分以下概念:
- HLD,侧重于服务、API、数据库、流量流向和基础设施,
- LLD,侧重于类、接口、对象关系和可维护的代码设计。
随着课程大纲的学习推进,你应该能够理解各个架构组件,进而解决涉及可扩展性、挑战、分布式系统和生产架构的完整系统设计案例研究。
如果你正在寻找有指导的学习项目,不妨看看 Scaler 的 System Design Course。
谁应该学习系统设计?
如果你正在准备后端开发、全栈开发、SDE-2 面试,或涉及可扩展性、API、数据库、缓存和架构决策的工程岗位,你就需要学习系统设计。
如果你是应届生或 SDE-1 开发者,请先专注于后端基础、API、数据库和应用流程,再进入分布式系统的学习。你也可以先学习一门软件开发课程,这样之后理解系统设计会容易得多。
后端开发者和全栈开发者通常会更频繁地接触系统设计概念,因为随着系统规模扩大,应用性能、可扩展性、API、数据库和服务交互会变得更难管理。遵循一份后端学习路线图,或通过一门全栈课程提升端到端的工程理解,都能帮助你更自然地将这些概念融会贯通。
对于高级工程岗位和系统设计面试,公司通常期望你理解高层系统设计、低层系统设计、分布式系统、可靠性以及架构权衡,而不仅仅是解决编码问题。
开始学习系统设计前的先决条件
在开始学习可扩展系统设计或分布式系统之前,你应该先熟悉一些后端和计算机科学的基础知识。
如果不理解这些概念,学习系统设计可能会感到困惑,所以请务必掌握以下内容:
- 数据结构与算法(DSA)和问题求解基础
- 面向对象编程(OOP)概念和对象关系
- 数据库管理系统(DBMS)和 SQL 基础
- 操作系统概念,如进程和线程
- 计算机网络基础,如 HTTP、TCP/IP 和请求
- API 和后端应用流程
- 基本的云和部署意识
如果你还没有学习上面提到的一些主题,也不用担心!其中有 2-3 个主题不了解是很正常的。你可以查看这些免费资源开始学习——DBMS 教程、SQL 教程、操作系统概念和计算机网络基础。
Free Courses by top Scaler instructors
系统设计大纲:模块 1 – 模块 10
从这里开始,我们将提供详细的、按模块划分的系统设计大纲,让你清楚需要学习哪些内容,以及每个模块的教学目标。
模块 1 – 系统设计基础
顾名思义,你将在这里学习基础知识,这对后续要学习的高级概念非常重要。
本模块从需求分析开始。你将学习如何区分:
- 功能性需求,如身份验证、通知或 URL 生成
- 与非功能性需求,如延迟、可扩展性、可靠性和可用性
你需要理解这两者的区别,因为非功能性需求通常会决定后续的架构设计。例如,一个每天处理几千条警报的通知系统,与一个每分钟处理数百万条实时通知的系统,看起来会非常不同。
本模块的另一个重要部分是规模估算。你将学习如何估算:
- 每秒请求数
- 存储增长
- 流量峰值
- 读密集型与写密集型工作负载
- 以及带宽使用
这将帮助你理解为什么在小规模下运行良好的系统,随着流量增加,往往需要引入复制、分区、异步工作流或负载均衡。
本模块还会介绍瓶颈识别和架构权衡,包括一致性、延迟、基础设施成本、可用性和运维复杂性。
在这个阶段,你也会开始理解系统中某一部分的改动如何影响另一部分。例如,提高数据一致性可能会拖慢系统,而复制能让系统更可靠,但也更难管理。
在学习本模块的过程中,可以先练习一些较小的系统,如 URL 短链接服务或通知服务,这样更容易理解这些概念,之后再进入路线图后面更大型的架构问题。
模块 2 – 高层设计(HLD)与架构图
学完系统设计基础后,大纲的下一个阶段聚焦于高层系统设计(HLD)。
在本模块中,你将学习如何设计:
- 服务间通信
- API 流程
- 数据库交互
- 缓存层
- 负载均衡
- 文件存储系统
- CDN 的使用
- 基于队列的异步工作流
- 以及第三方集成
HLD 涵盖整体应用架构、服务流程、数据库和基础设施组件。例如,在一个视频流媒体平台中,HLD 会涉及决定哪些服务负责上传、流媒体播放、推荐、存储,以及应用中的流量分发。
HLD 的很大一部分工作是阅读和创建架构图。一张高层系统设计图应清晰地展示:
- 主要服务
- 请求流程
- 数据库
- 外部集成
- 扩展组件
- 以及系统之间的通信
与此同时,我们也看到初学者常犯的错误是过早地在图中加入过多的实现细节、低层类或不必要的基础设施组件,使图变得过于复杂。
在大多数系统设计面试题中,面试官通常会考察你是否对自己的项目和相关主题有足够的了解,以及你对自己所做的东西是否有充分的信心,这正是这里学习的关键。
此外,这类面试中经常会被问到 HLD 和 LLD,所以下面是两者更宽泛的区别。
系统设计中的 HLD 与 LLD
| 高层设计(HLD) | 低层设计(LLD) |
| 关注系统架构 | 关注代码级结构 |
| 涵盖服务、API、数据库和扩展 | 涵盖类、对象、接口和设计模式 |
| 解释系统通信和流程 | 解释内部组件设计 |
| 大量用于可扩展架构的讨论 | 大量用于可维护软件的设计 |
| 示例:设计 YouTube 架构 | 示例:设计视频处理类 |
请牢记这些区别,因为在整个系统设计学习路线中,HLD 和 LLD 分别对应设计应用的不同阶段。
完成本模块后,你将能够阅读和创建诸如 URL 短链接服务、聊天系统、通知服务或内容平台等应用的基础系统设计架构图。
模块 3 – 数据库、存储与数据建模
几乎所有大型应用都在很大程度上依赖于数据的存储和检索方式。本模块涵盖数据库设计、存储系统、索引、分区,以及应对不断增长的工作负载时所涉及的权衡。
你应该从关系型数据库与 NoSQL 数据库的对比开始学习本模块。你将了解 SQL 数据库在哪些场景下表现更好,例如支付系统、银行应用、订单管理系统、库存跟踪和事务性工作流。
这些应用通常需要准确的事务处理以及数据之间结构化的关系,因此 SQL 数据库在这里往往是首选。
与此同时,本模块还涵盖 NoSQL 数据库在哪些场景下表现更好,尤其是在处理以下情况的应用中:
- 非结构化数据
- 海量读写流量
- 灵活的模式
- 实时信息流
- 搜索系统
- 或快速增长的数据集
例如,社交媒体信息流系统通常需要同时管理海量的用户活动和内容更新,而支付系统则更加注重保证交易的准确性和一致性。
本模块还介绍模式(schema)设计和索引。你将学习到,结构不佳的模式或缺失的索引会如何随着流量和存储的增长而显著拖慢查询速度。
随着课程大纲的推进,你还将开始学习:
- 复制(replication)
- 分区(partitioning)
- 分片(sharding)
- 一致性模型
- 可用性
- 以及 CAP 定理
随着流量和数据不断增长,数据库也需要更好的方式来分担应用层面的负载。复制、分区和分片等概念可以帮助系统在不依赖单一数据库服务器的情况下处理更大的工作负载。
在这一阶段,数据库的选择也在很大程度上取决于所设计的应用类型。例如:
- 搜索系统可能优先考虑快速检索和索引
- 支付系统优先考虑强一致性。
- 推荐系统优先考虑可扩展性,而社交平台通常针对高读写吞吐量进行优化。
在本模块结束时,你应该能够将数据库选型与应用需求联系起来。
Scaler 就业报告与统计数据
Scaler 学员实现了 2.5 倍的薪资增长,从 Scaler 毕业后的平均 CTC 达到 ₹23L。
模块 4 - 缓存、CDN 与性能优化
处理大量流量的应用不能反复从数据库中获取相同的数据。本模块涵盖缓存、CDN 以及用于降低负载、提升整个应用响应时间的性能优化技术。
本模块从 Redis 和应用层缓存开始,将频繁访问的数据临时存储起来,使系统能够更快地响应,而无需反复查询数据库。你还将学习数据库缓存、缓存失效、CDN 分发,以及高用户流量应用中使用的缓存模式。
这些概念在新闻信息流、流媒体平台、电商商品目录和基于搜索的应用等系统中大量出现,用户期望即使在流量高峰期也能获得快速的加载时间。
本模块还涵盖数据库缓存、缓存失效、读密集型系统、热点键(hot keys),以及不同的缓存策略,例如:
- 直写缓存(write-through caching),
- 回写缓存(write-back caching),
- 和旁路缓存(cache-aside)模式。
系统设计有时也会开始出现权衡。更快的系统也会带来用户可能无法立即看到最新更新数据的情况。
例如:
- 激进的缓存可以提升响应时间,但会增加数据陈旧的风险
- 大型缓存层可以降低数据库负载,但会增加内存成本
- CDN 分发可以提升全球性能,但会使缓存失效处理更加困难
你看,以下是系统设计过程中会出现的一些权衡 -
| 优化目标 | 对系统的影响 |
| 响应时间更快 | 存在数据陈旧或过期的风险 |
| 减轻数据库负载 | 增加内存和基础设施成本 |
| 通过全球 CDN 分发 | 缓存失效和同步更困难 |
| 高度优化读取场景 | 缓存一致性复杂度更高 |
本模块还将涵盖内容分发网络(CDN),它有助于将视频、图片、脚本和前端文件等静态资源分发到地理位置上更接近用户的地方。这在视频流媒体平台、OTT 应用、电商产品页面和社交媒体信息流等系统中变得极其重要。
例如,如果没有 CDN,一个面向全球用户的视频平台如果所有请求都集中到一个中央服务器位置,将会面临巨大的延迟和带宽瓶颈。
在本模块结束时,你将理解缓存如何提升应用性能、它如何影响数据一致性,以及为什么性能优化往往伴随着额外的基础设施和维护复杂度。
模块 5 - 负载均衡、扩展与流量管理
本模块聚焦于当用户、请求和服务开始增加时,系统如何持续处理流量。大多数应用在初期使用单台服务器和单个数据库就能运行良好,但一旦流量增长,性能瓶颈、宕机风险和请求失败就会变得难以管理。
因此,系统设计课程的这一阶段会介绍可扩展系统设计中使用的扩展策略、负载均衡、流量分发和基础设施管理概念。
这里首先讲解的主题之一是垂直扩展与水平扩展。
| 垂直扩展 | 水平扩展 |
| 提升单台服务器的 CPU、内存或存储 | 增加多台服务器并在它们之间分发流量 |
| 硬件变得昂贵且最终会达到上限 | 需要在多台服务器之间进行流量分发和协调 |
你还将在这里学习无状态服务。当应用水平扩展后,请求不应严重依赖某台服务器的内存或本地会话状态。否则,在多台服务器之间分发流量将变得困难。
本模块还介绍负载均衡算法和流量分发策略。你将学习系统如何使用以下方法在多台服务器之间路由请求:
- 轮询(round robin)
- 最少连接(least connections)
- 加权均衡(weighted balancing)
- 地理路由(geographic routing)
这在流量激增时尤为重要,例如限时抢购、社交媒体上的病毒式传播流量、突发新闻事件或大型产品发布。
如果缺乏适当的流量管理,即使核心应用逻辑运行正常,系统也可能过载。
这里涵盖的另一个重要主题是自动扩缩容和流量控制。你将学习现代云系统如何根据流量模式自动增加或减少基础设施,而不是依赖固定的服务器容量。
本模块还将介绍:
- API 网关
- 限流
- 限流
- 背压
- 以及请求优先级排序
这些概念在分布式系统中变得至关重要,因为并非每个服务都应该同时处理无限量的请求。例如,速率限制可以保护 API 免受滥用,背压可以防止下游系统过载,而 API 网关则集中管理路由、身份验证和监控。
本模块最重要的学习成果之一是理解架构如何逐步演进:
- 单服务器系统
- 多服务器系统
- 负载均衡服务
- 分布式应用
- 以及最终的云原生可扩展架构
当你深入学习基础设施扩展和生产架构时,DevOps 课程或云计算课程可以帮助你理解这些扩展和流量管理概念在实际部署的系统中的运作方式。
模块 6 - 消息队列与事件驱动系统
应用中的每个任务并非都需要立即完成。当你在网上下单时,支付确认可能会立即显示,但邮件、通知、分析更新、发票生成和库存同步通常会在后台继续运行。
本模块涵盖处理这些后台工作流的系统。你将学习队列、Kafka、Pub/Sub 系统和异步处理如何帮助应用在不拖慢主请求流程的情况下管理大量任务。
本模块还介绍了重试、死信队列、事件排序、幂等性和最终一致性——一旦多个服务开始在应用中独立通信,这些概念就变得非常重要。
现在你可以运用从分布式系统概念中学到的知识。当服务开始异步通信后,系统会变得更具可扩展性和容错性,但也会带来新的挑战,例如:
- 重复事件,
- 处理延迟,
- 消息排序问题,
- 重试失败,
- 以及临时的数据不一致。
例如,支付服务可能已完成一笔交易,而通知服务在几秒后才发送确认消息。这种延迟在分布式系统中通常是可以接受的,因为可扩展性和可靠性比处处严格的实时同步更为重要。
这里引入的另一个重要概念是幂等性。在可扩展架构中,重试非常常见,尤其是在发生故障时。系统必须能够安全地处理重复事件,而不会产生重复的支付、重复的订单或重复的通知。
学完本模块后,你应该能够理解异步系统在哪些情况下比同步工作流扩展得更好,以及为什么队列在每天处理数百万后台事件的高流量应用中变得至关重要。
模块 7 - 可靠性、容错性与可观测性
本模块聚焦于许多初学者在系统设计中最初容易忽视的一点:大型系统并非偶尔才发生故障,故障是随时都在预期之中的。服务器会崩溃,API 会超时,数据库会变慢,队列会延迟,网络请求在大规模场景下也会频繁失败。
这就是为什么可扩展的系统设计不仅仅是应对更大的流量,还包括在故障发生时保持系统稳定。
在系统设计大纲的这一阶段,你将学习系统如何从故障中恢复,包括:
- 超时
- 重试
- 熔断器
- 故障转移系统
- 副本复制
- 以及灾难恢复策略
例如,如果支付服务暂时不可用,盲目重试请求可能会进一步加重系统负载。在这里,你将使用重试上限、退避策略和熔断器来解决这些问题。
你还将在这里学习可观测性和生产环境监控。一旦系统扩展到跨多个服务和基础设施层,如果没有对系统的充分可见性,调试就会变得非常困难。
这就是为什么大型应用通常依赖于:
- 集中式日志
- 监控仪表盘
- 分布式追踪
- 告警系统
- SLO(服务级别目标)
- 以及事件跟踪
这些工具帮助工程团队在以下问题严重影响用户之前识别出来:
- 延迟飙升
- 服务故障
- 流量瓶颈
- 不健康的部署
- 以及级联故障
本模块将帮助你在做决策时拥有另一个视角。系统设计路线图的前面阶段主要关注可扩展性和性能,而这里的重点将转向韧性与恢复。你将找到一些重要问题的答案,例如:
- 如果某个服务崩溃了会怎样?
- 如果数据库不可用了会怎样?
- 故障期间流量如何重新路由?
- 系统能多快恢复?
模块 8 - 低层次设计(LLD)、面向对象编程与设计模式
本模块将重点从大规模架构转向内部组件设计。高层次系统设计解释服务、数据库、API 和基础设施如何协同工作,而低层次系统设计(LLD)则关注应用内部各个模块、类、接口和对象的结构。
这就是为什么 LLD 面试通常考察代码结构、可维护性、可扩展性和面向对象思维,而不仅仅是可扩展性。
在系统设计大纲的这一阶段,你将学习:
- OOP 原则
- SOLID 原则
- 接口
- 对象关系
- UML 和类图
- 设计模式
- 以及可维护的代码结构
在这里,你将学习如何设计随着功能不断增长仍能保持可扩展且更易于扩展的系统。
当你处理停车场系统、Splitwise、电梯系统或网约车预订应用这类问题时,大量的设计工作都花在决定应用程序内部不同的类、对象和组件之间应如何连接上。正是在这个过程中,继承、抽象、对象交互和职责分离这些概念才开始在实践中变得更容易理解。
当你开始解决这类问题时,设计模式也会变得容易理解得多,因为你终于能看到它们在实际应用结构中的位置。你会开始理解为什么以下这些模式:
- 单例模式(Singleton)
- 工厂模式(Factory)
- 观察者模式(Observer)
- 策略模式(Strategy)
- 以及建造者模式(Builder)
会在可维护的软件系统中反复出现。
可扩展性是低级系统设计的另一个重要部分。随着新功能、新工作流和新需求不断加入,应用程序会持续变化,因此代码结构应当让这些更新变得更容易,而不需要迫使整个应用进行大规模重写。
如果你想进一步夯实这些软件工程基础,一门软件开发课程可以帮助你提升面向对象编程和设计思维。当你同时熟悉了 HLD 和 LLD 概念之后,一门结构化的系统设计课程可以帮助你在更大规模、可扩展的架构讨论和面试场景中将它们融会贯通。
Scaler 校友及其成功故事
模块 9 - 分布式系统与微服务
本模块涵盖大规模场景下的架构挑战。在较小规模下,单体架构通常更容易构建、测试和管理。但随着流量、团队和服务的增长,大型应用通常会拆分为分布式系统和微服务。
正因如此,系统设计大纲的这一阶段重点聚焦于服务通信、一致性、部署复杂性以及跨多个系统的故障处理。
这里首先讲解的概念之一是单体架构与微服务架构的对比。
| 单体架构 | 微服务架构 |
| 单一可部署应用 | 多个独立服务 |
| 初期开发更容易 | 更好的可扩展性和服务隔离 |
| 调试和部署更简单 | 运维复杂度更高 |
| 共享代码库和数据库 | 服务之间分布式通信 |
| 对小团队来说更快 | 更适合大型系统和团队 |
你还将学习服务发现和 API 网关。一旦系统被拆分为多个服务,集中管理身份验证、路由、监控和请求处理就变得重要得多。
随着学习的深入,你还会开始应对小型应用中不存在的分布式系统挑战:
- 网络分区
- 服务故障
- 分布式事务
- 最终一致性
- 部署协调
- 以及跨服务的可观测性
例如,在一个电商系统中,下单可能涉及:
- 支付服务
- 库存系统
- 通知服务
- 配送工作流
- 以及协同工作的分析流水线
如果某个服务在中途失败,要在所有系统之间保持一致性,比单体架构难得多。
这就是为什么本模块还会介绍以下概念:
- 分布式事务
- Saga 模式
- 异步协调
- 重试
- 以及补偿工作流
你还将开始理解可扩展系统设计中最大的挑战之一:微服务提升了可扩展性和团队独立性,但同时也显著增加了部署复杂性、调试难度、可观测性要求和运维开销。
模块 10 - 系统设计实战案例
本模块将完全专注于实践。到这个阶段,你将开始在完整的端到端系统设计案例中综合运用可扩展性、数据库、缓存、队列、可靠性、分布式系统和权衡取舍。
以下是一些你可以练习的案例:
初级案例
| 案例 | 通常考察的概念 |
| 短链接服务 | API、哈希、数据库设计、可扩展性基础、限流 |
| 通知系统 | 队列、重试、异步处理、投递工作流 |
| 文件存储系统 | 对象存储、元数据处理、CDN 基础、副本机制 |
| 限流器 | 缓存、计数器、分布式协调、流量控制 |
这些问题能帮助你把高层次的系统设计概念串联起来,而不会在早期引入过多的分布式系统复杂性。
中级案例
| 案例 | 通常考察的概念 |
| 聊天应用 | WebSocket、消息队列、消息顺序、在线状态系统 |
| 社交媒体信息流 | 扇出策略、缓存、排序、数据库扩展 |
| 网约车系统 | 实时位置追踪、地理空间查询、事件处理 |
| 搜索系统 | 索引、分布式搜索、排序、存储优化 |
在这个阶段,应用需要在不影响速度和响应时间的前提下承载高得多的流量。你会更频繁地接触实时系统、异步工作流、可扩展性瓶颈和分布式通信。
高级案例
| 案例 | 通常考察的概念 |
| 视频流媒体平台 | CDN、分布式存储、转码、带宽优化 |
| 支付系统 | 强一致性、幂等性、重试、容错 |
| 电商平台 | 库存一致性、分布式事务、缓存 |
| 大型分析流水线 | 事件驱动系统、Kafka、批处理与流处理 |
这些系统通常会将课程大纲中的多个高级主题结合在一起:
- 分布式系统
- 微服务
- 可靠性工程
- 可观测性
- 一致性权衡
- 以及大规模流量处理
在这个模块中,你会开始注意到的另一个重要点是:相同的架构概念会在不同的系统中反复出现。
例如:
- 队列出现在通知、支付和分析系统中
- 缓存出现在信息流、流媒体和搜索系统中
- 一致性权衡出现在分布式事务和订单处理中
- 可扩展性模式几乎出现在每一个大规模系统中
这正是为什么你应该全力以赴地完成案例研究——你不仅能理解所有概念如何汇聚和关联,还能在结束这段学习旅程时构建出一份有说服力的作品集!
按职业目标划分的系统设计大纲
如果你想按照特定岗位来学习系统设计,可以参考下表——
| 职业目标 | 优先学习内容 | 练习内容 | 推荐学习路径 |
| 应届生 / SDE-1 | API、DBMS、后端基础、HLD 基础 | 短链接系统、通知系统 | 软件开发课程 + 系统设计教程 |
| 后端开发者 | 数据库、缓存、队列、可扩展性 | 信息流系统、聊天应用、高流量系统 | 后端学习路线图 |
| 全栈开发者 | API、服务通信、可扩展性 | 身份认证、媒体系统、API | 全栈课程 |
| SDE-2 备考者 | HLD、分布式系统、权衡取舍 | 网约车、支付、流媒体系统 | 系统设计课程 |
| 高级工程师 | 可靠性、可观测性、微服务 | 容错的分布式系统 | DevOps 课程 + 云计算课程 |
| DevOps / 云计算学习者 | 基础设施、故障转移、可扩展性 | 以部署为主的架构 | 云计算课程 |
| 面试候选人 | 案例研究、架构讲解、权衡取舍 | HLD 和 LLD 模拟面试 | 系统设计课程 |
完成系统设计大纲需要多长时间?
以下是一个大致的时间线,但根据你的学习速度和坚持程度,实际时间可能有所不同。
| 时间线 | 通常可以覆盖的内容 |
| 4 周 | 基础知识、HLD 基础、数据库、简单案例研究 |
| 8 周 | 可扩展性、缓存、队列、中级架构 |
| 12 周 | 分布式系统、可靠性、高级案例研究 |
| 3–6 个月 | 面试级别的系统设计,通过反复练习和反馈提升 |
需要记住的重要一点是,系统设计面试的准备在很大程度上依赖于重复练习。只读一遍架构概念是行不通的,即使是最优秀的人也一样。大多数学习者只有在解决多个案例研究、解释权衡取舍,并针对自己的架构决策获得反馈之后,才会有所提高。
免费系统设计大纲 vs 结构化系统设计课程
通过免费的系统设计资源,你可以:
- 理解基础知识
- 学习架构基础
- 随性地探索各种概念
但一旦进入系统设计面试题、分布式系统和生产级架构讨论,结构化且有指导的学习路径就能为你提供所需的帮助。
如果你的目标只是了解可扩展系统设计的基础知识,免费资源在初期就完全足够了。
但如果你正在准备后端岗位、SDE-2 面试或生产规模架构讨论,结构化的系统设计课程能帮助你更持续地练习系统设计思维。
常见问题
1. What is included in a system design syllabus?
完整的系统设计大纲通常涵盖系统设计基础、HLD、LLD、数据库、缓存、可扩展性、分布式系统、可靠性工程、微服务、消息队列以及系统设计案例研究。大多数结构化的系统设计课程还包括面试准备和围绕真实系统的架构讨论。
2. What are the prerequisites for learning system design?
在开始学习系统设计之前,你应该了解后端基础知识,如 DBMS、SQL、API、操作系统、计算机网络和基本的后端开发。熟悉 OOP 和数据结构也有助于学习低层系统设计和分布式系统。
3. What is the difference between HLD and LLD?
高层系统设计(HLD)侧重于架构、可扩展性、服务、API、数据库、缓存和基础设施流程。低层系统设计(LLD)侧重于类、对象、接口、设计模式以及应用程序内部可维护的代码结构。
4. How long does it take to learn system design?
学习时间取决于你的经验水平和目标。初学者可能需要 2–3 个月来理解系统设计基础和基本案例研究,而面试级别的准备通常需要 3–6 个月的反复架构练习、模拟讨论和权衡分析。
5. What are the best system design case studies to practice?
一些最常见的系统设计案例研究包括:
- URL 短链接服务
- 通知系统
- 聊天应用
- 社交媒体信息流
- 网约车应用
- 视频流媒体平台
- 支付系统
- 搜索系统
6. Is a free system design course enough?
免费的系统设计资源通常足以理解基础知识和架构入门。但对于系统设计面试准备,许多学习者最终会受益于结构化的练习、有指导的案例研究、模拟面试以及通过更结构化的系统设计课程获得的架构决策反馈。