系统设计(首章)

1,130 阅读3分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路

写的很棒的文章 转-架构设计文章 #转 平时的工作如何体现一个人的技术深度?

系统设计 vs 面向对象设计

形式上: 面向对象设计手把手的 Coding 系统设计高屋建瓴的“扯淡”

考察的知识点上: 面向对象设计:Class, Object, Method, Inheritance, Interface

系统设计考的是:Database, Schema, SQL, NoSQL, Memcached, File System, Distributed System, Latency,Scalbility, Master Slave, Load Balancer, Web Server, Message Queue, Sharding, Consistent Hashing, QPS …

典型题: 面向对象设计:电梯设计,游戏设计 系统设计:短网址系统设计,新鲜事系统设计

常见的系统设计问题 设计某某系统 Design XXX System • 设计微博 Design Twitter • 设计人人 Design Facebook • 设计滴滴 Design Uber • 设计微信 Design Whatsapp • 设计点评 Design Yelp • 设计短网址系统 Design Tiny URL • 设计NoSQL数据库 Design NoSQL

设计某某系统中的某某功能 • 设计一个功能实现对用户访问频率的限制 • 设计一个功能实现统计某个具体事件的历史发生次数 • 设计删除一个 Tweet 的功能 • 设计邮件系统中将所有邮件标记为已读的功能

常见误区

误区1:关键词大师:罗列一大堆技术名词,显摆?

 Load Balancer, Memcache, NodeJS, MongoDB, MySQL, Sharding, Consistent Hashing, Master Slave, HDFS,

缺乏实际场景: 思考:1.你想过没有:或许现在只有2个用户呢??

系统设计的评分标准

  1. 可行解 Work Solution 25%
  2. 特定问题 Special Case 20%
  3. 分析能力 Analysis 25%
  4. 权衡 Tradeoff 15%
  5. 知识储备 Knowledge Base 15%

我们需要的是一种可行性方案,而不是完美的方案。

Work Solution NOT Perfect Solution

很多时候,产品经理想要的也只是一个简单的技术方案。往往,我们开发容易幻想一个perfect的方案。完全没必要。完美方案一般在技术团队内部讨论,不必要与产品讨论详细技术方案。

系统设计的一些基本概念

  • 系统设计中常说的 Tradeoff 是什么 ? 权衡
  • 什么叫做 SOA (Service Oriented Architecture)
  • 什么是 Pull Model & 什么是 Push Model
  • 数据存储系统有哪些,什么样的数据适合存在什么样的数据存储系统中
  • 什么是异步任务和消息队列 (Message Queue)
  • 什么是数据的可持久化 (Persistent)
  • 什么是去标准化 (Denormalize)
  • 什么是惊群效应 (Thundering Herd)

惊群效应 惊群效应(thundering herd)是指多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态), 如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程), 但是最终却只能有一个进程(线程)获得这个时间的“控制权”, 对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群效应

系统设计问题的 4S 分析法

Scenario, Service, Storage, Scale 场景-》服务-》存储-》升级

  1. Scenario 场景 • 说人话:需要设计哪些功能,设计得多牛 • Ask / Features / QPS / DAU / Interfaces •
  2. Service 服务 • 说人话:将大系统拆分为小服务 • Split / Application / Module •
  3. Storage 存储 • 说人话:数据如何存储与访问 • Schema / Data / SQL / NoSQL / File System •
  4. Scale 升级 • 说人话:解决缺陷,处理可能遇到的问题 • Sharding / Optimize / Special Case

下篇文章,通过真实案例来,解剖系统设计。敬请期待。

该分析方法:适合粗略的技术方案设计。更细粒度的设计的话,还是需要多画图,技术选型。