持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
Service服务
将大系统拆分为小服务 Split/Application/Module
面试要做的事情是:将大系统拆分为小服务。
什么是服务呢?
对逻辑处理的整合,把同一类的逻辑处理整合在同一个服务中,把整个系统拆分为若干个小的服务。因此,在这一过程中,需要:
- 第一步 - Replay:重新过一下所有需求,为每个需求添加一个或多个服务
- 第二步 - Merge:将相同的服务进行归并
这一步是应该很快就能够完成的。
Storage存储(最重要)
数据如何存储与访问。注意是先知道怎么取,再设计如何去存Schema、Data 、SQL、NoSQL、File System。
设计系统中的数据是如何进行存储和访问。就是什么是 数据?用什么存?怎么存?
一般涉及如下存储数据的系统:
数据库系统
关系型数据库
一般用于存储结构化数据,例如用户信息(User Table)、各种业务表单数据等
NoSQL 数据库
一般用于存储非结构化数据,文章、社交图谱等
文件系统
系统设计中,作为一种对数据进行存放、读写的容器,也是常常会出现在系统设计的相关问题中的。文件系统可以存放图片(非常推荐小图片可以用 fastDFS 这类分布式存储)、视频。AWS 的 S3 也属于一种文件系统。
缓存系统
无需支持数据持久化的,效率高,内存级访问速度。
文件系统 V.S 数据库系统
数据库系统是文件系统的一层包装,他们不是独立关系,而是依赖关系。数据库系统依赖于文件系统。
- 数据库系统提供更丰富的数据操作,很细粒度
- 文件系统只提供了简单的文件操作接口,很粗粒度
以关系型数据库(Relational Database)为例,提供了SQL语句这样的丰富的查询语言,可以一些复杂的 filter,如快速找出学生信息表中,所有20-24岁的学生信息。如果直接在文件系统上,则需要扫描完所 有的学生数据后才能找到。 数据库系统中读取的数据,大部分情况下(除了被cache的),都还是会到文件系统上去读取。因 此两个系统的读写效率(不考虑复杂查询)可认为差不多。
在系统设计的存储设计中,通常可以分为以下两步:
- 第一步 - Select:为每个服务选择合适的存储结构
- 第二步 - Schema:细化数据库的表结构
●程序=算法+数据结构 ●系统=服务+数据存储