Skip to content

第8讲:架构设计练习题库

核心结论(5条必记)

  1. 刷题不是目的,理解原理才是 -- 每道题要能说出原理、方案、权衡,不要死记硬背
  2. 画架构图是基本功 -- 每道题都画架构图,标注核心组件和数据流向
  3. 准备3个完整案例 -- 从背景、复杂度、方案、效果完整讲述
  4. 模拟面试很重要 -- 找朋友模拟面试,练习表达和画图
  5. 持续学习新技术 -- 架构技术在演进,保持学习心态

一、架构思维练习

1. 架构 vs 框架 vs 设计模式

问题: 请解释架构、框架、设计模式的区别,并举例说明。

参考答案:

  • 架构:系统整体结构,如微服务架构
  • 框架:代码结构,如Spring MVC框架
  • 设计模式:类和对象关系,如单例模式

练习:

  • [ ] 画出三层架构图
  • [ ] 画出微服务架构图
  • [ ] 举例说明一个设计模式

2. 架构设计三原则

问题: 请解释架构设计的三个原则,并举例说明什么情况下违反了原则。

参考答案:

  • 合适原则:不要追求最牛的架构
  • 简单原则:简单 > 复杂
  • 演化原则:架构是演化出来的

练习:

  • [ ] 分析一个过度设计的案例
  • [ ] 分析一个欠设计的案例
  • [ ] 举例说明架构是如何演化的

二、高性能练习

3. Reactor模型

问题: 请解释Reactor模型的三种变体,并说明Netty使用哪种模型。

参考答案:

  • 单Reactor单线程:简单但会阻塞
  • 单Reactor多线程:监听和处理分离
  • 主从Reactor:最佳实践,Netty使用

练习:

  • [ ] 画出主从Reactor模型图
  • [ ] 解释为什么Netty性能好
  • [ ] 用Netty实现一个Echo服务器

4. 负载均衡算法

问题: 对比常见负载均衡算法的优缺点和适用场景。

参考答案:

  • 随机:简单,分布不均
  • 轮询:分布均匀,不考虑性能
  • 加权轮询:考虑性能差异
  • 最少连接:动态适应
  • 一致性哈希:保持会话

练习:

  • [ ] 实现加权轮询算法
  • [ ] 实现一致性哈希算法
  • [ ] 分析不同算法的请求分布

5. 分库分表

问题: 设计一个订单系统的分库分表方案。

参考答案:

分片键:user_id
分片数量:16个库,每个库16个表
路由算法:user_id % 16

为什么选user_id?
  -> 大多数查询是按用户查订单
  -> 避免跨片查询

练习:

  • [ ] 设计用户表分片方案
  • [ ] 设计订单表分片方案
  • [ ] 设计分片后的分页查询方案

6. 缓存架构

问题: 设计一个缓存架构,解决穿透、雪崩、热点问题。

参考答案:

缓存穿透:
  -> 布隆过滤器
  -> 缓存空值

缓存雪崩:
  -> 过期时间加随机值
  -> 多级缓存

缓存热点:
  -> 互斥锁
  -> 永不过期

练习:

  • [ ] 实现布隆过滤器
  • [ ] 实现互斥锁缓存更新
  • [ ] 设计多级缓存架构

三、高可用练习

7. CAP定理应用

问题: 分析以下系统应该选CP还是AP,为什么?

  • 注册中心
  • 配置中心
  • 数据库
  • 缓存

参考答案:

注册中心:AP(可用性优先)
配置中心:AP(可用性优先)
数据库:CP(一致性优先)
缓存:AP(可用性优先)

练习:

  • [ ] 分析10个系统的CAP选择
  • [ ] 分析为什么注册中心选AP
  • [ ] 分析为什么数据库选CP

8. 降级熔断限流

问题: 设计一个电商首页的降级、熔断、限流方案。

参考答案:

限流:全局限流10万QPS
熔断:推荐服务3s超时则熔断
降级:推荐服务挂了返回热门商品

练习:

  • [ ] 设计秒杀系统的限流方案
  • [ ] 设计服务熔断策略
  • [ ] 设计降级开关

四、可扩展练习

9. 微服务拆分

问题: 将一个电商单体应用拆分为微服务。

参考答案:

拆分服务:
  -> 用户服务
  -> 商品服务
  -> 订单服务
  -> 支付服务
  -> 营销服务

每个服务独立数据库
服务间通过RPC或HTTP通信

练习:

  • [ ] 设计微服务拆分方案
  • [ ] 定义服务间接口
  • [ ] 设计服务间通信方式

10. 架构演进

问题: 分析一个系统从单体到微服务的演进过程。

参考答案:

阶段1:单体应用
阶段2:垂直拆分(前后端分离)
阶段3:服务化(核心服务独立)
阶段4:微服务(全面拆分)
阶段5:Service Mesh

练习:

  • [ ] 分析淘宝架构演进
  • [ ] 分析Instagram架构演进
  • [ ] 设计一个系统的演进路线

五、实战案例练习

11. 秒杀系统设计

问题: 设计一个秒杀系统,支撑100万QPS。

核心复杂度:

1. 高并发:瞬间流量暴增
2. 数据一致性:不能超卖

设计方案:

1. 限流:拦截超出容量的请求
2. 缓存:商品信息、库存Redis缓存
3. 异步:下单后异步处理
4. 防超卖:Redis原子扣减
5. 降级:非核心功能降级

练习:

  • [ ] 画出秒杀系统架构图
  • [ ] 设计限流方案
  • [ ] 设计防超卖方案

12. Feed流系统设计

问题: 设计一个微博Feed流系统。

核心复杂度:

1. 高并发:大量读写
2. 数据量大:存储压力大
3. 排序:按时间、权重排序

设计方案:

1. 写扩散:用户发推时写入粉丝的收件箱
2. 读扩散:用户读取时拉取关注的人的推
3. 混合模式:大V写扩散,普通用户读扩散

练习:

  • [ ] 设计Feed流存储方案
  • [ ] 设计Feed流排序方案
  • [ ] 优化大V场景

13. 支付系统设计

问题: 设计一个支付系统。

核心要求:

1. 安全性:资金安全
2. 一致性:账务准确
3. 高可用:7x24稳定

设计方案:

1. 幂等性设计
2. 事务一致性(本地消息表)
3. 对账机制
4. 风控系统

练习:

  • [ ] 设计支付流程
  • [ ] 设计幂等性方案
  • [ ] 设计对账系统

六、综合练习

14. 架构设计四步法

问题: 用四步法设计一个电商系统。

参考答案:

第一步:识别复杂度
  -> 核心复杂度1:高并发
  -> 核心复杂度2:数据一致性

第二步:设计备选方案
  -> 方案A:单体 + 缓存
  -> 方案B:微服务 + MQ
  -> 方案C:折中方案

第三步:评估对比
  -> 选择方案C

第四步:细化落地
  -> 架构图
  -> 数据库设计
  -> 接口设计

练习:

  • [ ] 用四步法设计秒杀系统
  • [ ] 用四步法设计Feed流系统
  • [ ] 用四步法设计支付系统

15. 架构图绘制

练习内容:

  • [ ] 画出微服务架构图
  • [ ] 画出读写分离架构图
  • [ ] 画出分库分表架构图
  • [ ] 画出缓存架构图
  • [ ] 画出异地多活架构图

七、模拟面试

面试场景1

面试官: "请介绍一下你做过的系统架构"

回答要点:

  1. 背景:什么系统,解决什么问题
  2. 架构:技术选型、模块划分
  3. 挑战:遇到什么问题
  4. 方案:怎么解决的
  5. 效果:量化结果

面试场景2

面试官: "为什么选择微服务而不是单体?"

回答要点:

  1. 团队规模:需要并行开发
  2. 业务复杂度:单一服务无法应对
  3. 扩展性:需要独立扩容
  4. 技术选型:权衡

面试场景3

面试官: "如果让你重新设计,你会怎么改?"

回答要点:

  1. 回顾原设计的不足
  2. 提出改进方案
  3. 说明改进理由
  4. 体现成长和思考

八、持续学习

推荐资源

书籍:

  1. 《高性能MySQL》
  2. 《Designing Data-Intensive Applications》
  3. 《凤凰架构》

博客:

  1. 极客时间:从0开始学架构
  2. 美团技术团队博客
  3. 阿里云开发者社区

开源项目:

  1. 分布式事务:Seata
  2. RPC框架:Dubbo、gRPC
  3. 服务网格:Istio

实践建议

  1. 动手搭建

    • 搭建一个微服务系统
    • 搭建一个消息队列
    • 搭建一个缓存系统
  2. 分析开源

    • 阅读开源项目代码
    • 学习架构设计
    • 理解技术选型
  3. 写技术文章

    • 总结学习心得
    • 分享实战经验
    • 加深理解

全书总结

架构设计学习路线:

  1. 基础认知(L1-L2):架构定义、复杂度、三原则、四步法
  2. 高性能(L3):Reactor、负载均衡、数据库、缓存、MQ
  3. 高可用(L4):CAP、FMEA、存储高可用、计算高可用、异地多活
  4. 可扩展(L5):分层、SOA、微服务、微内核
  5. 架构实战(L6):四步法、案例分析、支付系统
  6. 面试准备(L7):高频问题、回答技巧
  7. 练习巩固(L8):题库、模拟面试

核心能力图谱:

  • ✅ 架构设计四步法
  • ✅ CAP定理理解与应用
  • ✅ FMEA分析方法
  • ✅ Reactor模型
  • ✅ 读写分离与分库分表
  • ✅ 缓存架构设计
  • ✅ 消息队列设计
  • ✅ 负载均衡
  • ✅ 限流熔断降级
  • ✅ 异地多活
  • ✅ 微服务拆分
  • ✅ 架构文档写作

继续加油,架构师之路!

基于 VitePress 构建