ITPub博客

首页 > > > 系统设计方法论

系统设计方法论

作者:编程小梦 时间:2016-04-25 00:00:00 0 删除 编辑

<!-- toc --> <!-- toc stop -->

什么是系统设计

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

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

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

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

算法面试

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

系统面试

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

系统设计面试考察点

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

系统设计面试的俩种形式

设计某某系统

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

找问题

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

什么是好的设计

  • 健壮的
  • 简洁的

系统设计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!

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


原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-06-29

  • 博文量
    74
  • 访问量
    0