本文仅为本人总结之用,高手略过。
我们屁颠颠地从老板(产品)那边拿到一个需求,公司马上要搞促销,所以要为这次活动新建一个秒杀系统。拿到这样的需求,你会怎么入手?接下来我不会告诉你怎么做一个秒杀系统,只会介绍系统设计的一般性步骤,不知道是哪位高人总结的叫着SNAKE分析法。
Scenario 场景
这是每个系统设计的第一步,搞清楚我们的系统场景,为什么服务。我们的业务场景是什么样子的,都有哪些角色,怎么个流程?其实在这一阶段就是列出系统需要实现的功能有哪些。
接着我们把功能根据优先级和核心功能进行排序。比较互联网很快,我们先搞一个Version1.0上去,再来优化。
Needs 需求
很多人被这个中文翻译搞懵逼了,你不是在第一阶段就讲过需求吗?这里的needs是说咱们系统设计出来要满足什么样的用户量,需要咱们设计一个多么吊&牛X的系统。最好这个时候能拿出纸和笔来计算一下,咱们的DAU、并发量、QPS、TPS、峰值。Pls,remember:我们需要的是一个合适的系统,绝对不是一个可以满足100年都可用的巨牛逼的系统。
Application 应用
这一阶段,我们要做的是将我们的功能进行划分,分组成不同的模块。这样后边我们就可以团队分工开发,团队协作。
接着我们需要考虑的是关键的一些算法。比如缓存算法、分库算法等。
Service + Algorithm
Kilobyte 数据
- 关系型数据库SQL Database
- 小调查:Twitter的哪些信息适合放在关系型数据库中?
- 用户信息 User Table
- 非关系型数据库 NoSQL Database
- 小调查:Twitter的哪些信息适合放在非关系型数据库中?
- 推文 Tweets
- 社交图谱Social Graph(followers)
- 文件系统File System
- 小调查:Twitter的哪些信息适合放在文件系统中?
- 图片、视频Media Files
讲到这个地方其实我想总结一句:
- 程序 = 算法 + 数据结构
- 系统 = 服务 + 数据存储
Evolve 改进
这个阶段就是做优化和维护工作了,我们最好根据实际的需要去优化系统,满足系统不远将来的增长。选择一个最合适的方案而不是一个最好的方案。