本系列文章都已首发腾讯云 社区。
一、系统设计考察第一项:背景精简阐明
当你在面对系统设计无论是面试官考察,亦或者是自己设计系统的时候,需要考虑如下几点内容:
● 现状痛点描述清楚
● 核心模块(抽象模块以及核心指标是为了解决痛点,并且平衡取舍后的最合适方案)
● 系统设计规模粗略估算(系统规模、多少存储空间、网络带宽使用情况)
● 定义数据模型(抽象建模-实体、属性、联系)以及选择合适的数据库
● 高级设计(端到端的核心系统模块设计)
● 详细设计(如何做的负载,哪一层加的缓存,热数据、数据库表如何设计存储)
● 识别和解决技术难点(单点故障、容灾、副本备份、多活、监控等)
● 归纳总结(可扩展点以及更深的思考)
二、系统设计考察第二项:经典案例项目
2.1、系统设计概览
《系统设计考虑要点》
2.2、系统设计系统实践篇
2.2.1、设计短链服务
《系统设计:URL短链设计·案例参考分享邀请链接或者加密链接邀请》
2.2.2、设计粘贴复制技术
《系统设计:粘贴复制设计》
2.2.3、设计照片共享服务
《系统设计:照片共享设计·案例参考微博或者小红书等内容共享》
2.2.4、设计文件托管服务
《系统设计:文件托管服务设计·案例参考Github或者码云》
2.2.5、设计即时消息服务
《系统设计:即时消息服务设计·案例参考QQ或者微信通讯服务》
2.2.6、设计社交网络服务
《系统设计:社交网络服务设计·案例参考Twitter或者微博》
2.2.7、设计视频共享服务
《系统设计:视频共享服务设计·案例参考YouTube或者B站等》
2.2.8、设计实时预测服务
《系统设计:实时预测服务设计·案例参考搜狗输入法预测或者百度搜索预测》
2.2.9、设计API限流服务
《系统设计:API限流器设计·案例参考各个公司的网关限流系统》
2.2.10、设计搜索服务
《系统设计:搜索服务设计·案例参考谷歌百度必应搜狗等》
2.2.11、设计网络爬虫服务
《系统设计:网络爬虫服务设计》
2.2.12、设计Feed流服务
《系统设计:Feed流服务设计·案例参考Facebook新闻流》
2.2.13、设计附近人搜索服务
《系统设计:附近人和地点服务设计·案例参考Yelp或者大众点评》
2.2.14、设计人物匹配后端服务
《系统设计:附近人和物匹配服务设计·案例参考Uber或者滴滴》
2.2.15、设计在线售票服务
《系统设计:在线售票服务设计·案例参考携程或者飞猪》
2.3、大型系统设计模块组件
当我们设计一个大型系统时,我们需要考虑以下几点:
1.可以使用哪些不同的建筑构件?
2.这些部件如何相互配合?
3.我们如何最好地利用这些部分:什么是正确的权衡?
在需要之前投资于扩展性,通常不是明智的商业主张;然而,对设计进行一些前瞻性的思考可以在将来节省宝贵的时间和资源。在接下来的章节中,我们将尝试定义可伸缩系统的一些核心构建块。熟悉这些概念将大大有助于理解分布式系统的概念。在下一节中,我们将介绍一致性哈希、CAP定理、负载平衡、缓存、数据分区、索引、代理、队列、复制,以及在SQL和NoSQL之间进行选择。
2.3.1、分布式系统的关键特性
《系统设计面试:分布式系统的关键特性》
2.3.2、负载均衡
《系统设计面试:负载均衡》
2.3.3、缓存
《系统设计面试:缓存》
2.3.4、数据分区
《系统设计面试:分片或者数据分区》
2.3.5、索引
《系统设计面试:索引》
2.3.6、代理&冗余&复制
《系统设计面试:代理&冗余&复制》
2.3.7、SQL VS NoSQL
《系统设计面试:SQL VS NoSQL》
三、系统设计考察第三项:系统设计面试
3.1、系统设计过程
3.1.1、约束和用例
与面试官谈特定场景,明确范围约束,以及我们应该如何制定用例验证
3.1.2、抽象本质
通过范围约束,以及用例验证,需要看清抽象的背后本质是什么?并进行建模画图
3.1.3、系统瓶颈
明确系统的扩展性,对于业务复杂性来说,更多场景我们要考虑的是其服务定位是什么?然后再以业务和技术作为底层驱动来判断我们的系统高可用、高性能、高扩展、高安全如何构建高并发系统,还需要考虑的是基于当前业务复杂度和技术复杂度前提下,如何权衡效率-成本-质量。
3.1.4、可扩展性设计
● 垂直缩放
● 水平缩放
● 缓存
● 负载均衡
● 数据库复制
● 数据库分区
系统设计系列到此先告一段落、后面会开启架构师系列、和业务中台建设系列。如果你也对这些感兴趣,可以加我(VX:lxc354555)一起成长。