系统设计方法论


作者: 康凯森

日期: 2016-04-25

分类: 笔记


什么是系统设计

为满足特定需求而设计系统的架构,组件, 模块, 接口, 数据。

  • 概念设计
  • 逻辑设计
  • 物理设计

系统设计 = 逻辑设计 + 架构设计

算法面试和系统设计面试的区别

算法面试

  • 注重程序的实现
  • 注重解决问题的能力

系统面试

  • 注重思考的过程
  • 注重发现问题的能力

系统设计面试考察点

  • 可行解
  • 特定问题
  • 分析能力
  • 权衡能力
  • 知识储备

系统设计面试的俩种形式

设计某某系统

微博,人人,微信,滴滴等等

找问题

  • 网站挂了怎么办
  • 网站太慢怎么办
  • 流量增长怎么办

什么是好的设计

  • 健壮的
  • 简洁的

系统设计5步 SNAKE分析法:

1 Scenario 场景

即需要设计哪些功能 1 枚举所有功能 2 按照重要性进行排序,选择核心功能

2 Needs 需求

即需要设计多牛的系统 1 询问 2 预测

确定日活跃用户数

根据日活跃用户数估算

  • 估算 平均并发用户数
  • 估算 峰值用户数 = 平均并发用户数 * 6
  • 估算 3个月后 峰值用户数 = 峰值用户数 *2
  • 估算 每个用户流量
  • 估算 峰值流量
  • 估算 读的QPS
  • 估算 写的QPS
  • 估算 每个用户内存
  • 估算 每日最大内存
  • 估算 磁盘存储量

3 Application 应用

即分析系统的主要组成模块 1 重放需求,为每个需求添加一个服务 2 归并相同的服务

4 Kilobyte 数据

即 数据如何存储和访问 1 为每个服务选择数据存储结构 2 细化表结构

程序 = 算法 + 数据结构 系统 = 服务 + 数据存储

前4步可以产生一个解决方案,但肯定不是完美的解决方案

5 Evolve 进化

即 解决缺陷,处理可能遇到的问题

1 优化

  • 解决设计缺陷
  • 更多功能设计
  • 一些特殊用例

2 维护

  • 鲁棒性 如果一台服务器、数据库挂了怎么办
  • 扩展性 如果流量暴增,如何扩展

总结

系统设计不是设计一个最好的方案,而是设计一个最合适的方案

在设计之前问清楚再动手设计

不要做关键词大师

不要一开始就冲着很牛逼的方案去

不要总想着做最牛的系统,要设计够用的系统

Done is better than perfect!

先设计一个基本能工作的系统,然后再逐步优化


评论