CodeRoadMap
路线图学习路径文章题库资源社区

浏览

首页路线图学习路径知识库题库文章资源社区我的学习
CodeRoadMap

中文编程学习导航:路线图、讲义与题库,进度可同步。

路线图学习路径文章题库社区

© 2026 CodeRoadMap

津ICP备2026012044号-1|coderoadmap@126.com
首页/面试冲刺/系统设计入门

课程目录

  1. 0114 种经典模式
  2. 02系统设计入门
  3. 03行为面试
第 02 课

系统设计入门

负载均衡、缓存、数据库选型与 API 设计。

课程内容

系统设计入门

系统设计面试考察的是"在约束下做权衡"的能力。本课覆盖面试中最常考的基础设施概念,以及回答系统设计题的通用框架。

学习目标

  • 掌握负载均衡、缓存、数据库选型的核心概念
  • 会画一个典型 Web 系统的架构图
  • 掌握系统设计面试的答题框架

核心概念

负载均衡(Load Balancer)

把流量分发到多台服务器,避免单点压力:

  • 轮询 / 加权轮询:依次分发,简单常用
  • 最少连接:发给当前连接数最少的机器
  • 一致性哈希:同一用户的请求落到同一台机器(会话亲和)
  • 常见实现:Nginx、云厂商的 LB 服务

缓存(Cache)

用内存换速度,挡在数据库前面:

读请求 → 查缓存 → 命中?返回 : 查数据库 → 写入缓存 → 返回
  • Redis:最常用的内存缓存,支持字符串、哈希、列表、有序集合
  • 缓存穿透:查询不存在的数据 → 缓存空值或布隆过滤器
  • 缓存雪崩:大量 key 同时过期 → 过期时间加随机抖动
  • 缓存击穿:热点 key 过期瞬间被打爆 → 互斥锁重建

数据库选型

类型代表适用场景
关系型MySQL、PostgreSQL强一致、事务、复杂关联查询(订单、支付)
文档型MongoDB结构灵活、快速迭代(内容、日志)
键值型Redis缓存、会话、排行榜
列式ClickHouse分析查询、大数据量聚合

读写扩展手段:索引 → 读写分离(主从复制)→ 分库分表(水平拆分)。

API 设计

  • REST 风格:资源用名词,动作用 HTTP 方法
  • 幂等性:重试不会产生副作用(GET/PUT/DELETE 天然幂等,POST 需要唯一请求 ID)
  • 限流:令牌桶 / 滑动窗口,保护系统不被突发流量打垮

面试答题框架(4 步法)

  1. 澄清需求(5 分钟):用户量?QPS?读多还是写多?一致性要求?

    "设计 Twitter" → 先问:日活多少?要不要支持媒体?timeline 实时性要求?

  2. 估算量级:1 亿日活 ≈ 平均 1200 QPS,峰值 ×3;存储按每条数据大小 × 条数估算
  3. 高层设计:画出 客户端 → LB → 应用服务器 → 缓存 → 数据库 的主链路
  4. 深入细节:挑 1~2 个难点展开(如 timeline 用推模式还是拉模式),主动讲权衡

经典例题(由浅入深)

  1. 设计短链接服务(TinyURL)——哈希、301/302、KV 存储
  2. 设计限流器——令牌桶、分布式限流
  3. 设计新闻 Feed——推/拉模式、分页、缓存

参考资源

  • System Design Primer(中文翻译版)
  • ByteByteGo 系统设计频道
  • 《系统设计面试:内幕指南》(Alex Xu 著,有中文版)
← 上一课14 种经典模式下一课 →行为面试