零基础都能懂的【系统设计学习指南】,这个北大学霸的方法太牛了!

本文介绍了面对系统设计面试时的4S分析法,包括Scenario(场景)、Service(服务)、Storage(存储)、Scale(扩展),并通过设计推特系统为例进行详细讲解。强调在面试中应先理解场景,确定核心功能,选择合适的服务和存储结构,最后考虑扩展性和优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不少人反馈,面试中遇到系统设计题难以招架。

其实,想要答好系统设计,首先要了解系统设计面试的评分标准

系统设计面试主要考察以下几个方面:

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

在面试中,常见的错误是面试官给出问题后,候选人就开始怼各种关键词,什么Load Balancer,Memcache,NodeJS,MongoDB,MySQL……

实际上,针对系统设计问题,九章算法有一套4S分析法,即使完全不知道的问题也可以按照这个方法一步步去回答。

所谓4S分析法中的4S是指Scenario(场景),Service(服务),Storage(存储),Scale(扩展)。

v2-e600df238dbc0ff6dd0aa8394da2f6ca_b.jpg

国内面试常考的秒杀系统可以来看北大学霸令狐冲的讲座直播分享:《2小时详解秒杀系统》

接下来,我们结合4S分析法来具体回答一道常见系统设计题:如何设计一个推特?


第一步:Scenario 场景

在这一步,你需要询问面试官:需要设计哪些功能(也可以自己想),需要承受多大的访问量?

首先可以把Twitter的功能一个个罗列出来,很显然你无法在45分钟的面试中完成所有功能的设计,所以需要筛选出核心功能(Post a Tweet,Timeline,News Feed,Follow/Unfollow a user,Register/Login)。

然后有的面试官可能会问你系统承受的QPS大概是多少?需要考虑并发用户,读频率(Read QPS)以及写频率(Write QPS)。记住重要的是你的思考和计算过程而不是计算结果。

分析QPS有什么用?

  • 如果QPS = 100,那么用你的笔记本作Web服务器就好了;
  • QPS = 1K,一台好点的Web 服务器也能应付,需要考虑Single Point Failure;
  • QPS = 1m,则需要建设一个1000台Web服务器的集群,并且要考虑如何Maintainance(某一台挂了怎么办)。

QPS 和 服务器/数据库之间的关系

  • 一台Web Server承受量约为 1K的QPS(考虑到逻辑处理时间以及数据库查询的瓶颈);
  • 一台SQL Database承受量约为 1K的QPS(如果JOIN和INDEX query比较多的话,这个值会更小);
  • 一台 NoSQL Database (Cassandra) 约承受量是 10k 的 QPS;
  • 一台 NoSQL Database (Memcached) 约承受量是 1M 的 QPS。

第二步,Service服务

所谓服务可以认为是逻辑处理的整合,对于同一类问题的逻辑处理可以归并到一个服务中。这一步实际上就是将整个系统细分为若干个小的服务。

根据第一步选出的核心功能,我们可以将推特拆分成如下的几个服务:

v2-df46c5238f7d29200503ec7d2f8662ef_b.jpg

第三步,Storage 存储

接下来就是4S分析法中最重要的一部分,存储。根据每个服务的数据特性选择合适的存储结构,然后细化数据表结构。

系统设计中可以选择的存储结构一般有三大类:数据库系统,文件系统,缓存系统。其中数据库系统又分为关系型数据库(SQL Database)和非关系型数据库(NoSQL Database)。

v2-13cab4d5f56e3ecb682c351c0eb4a24b_b.jpg

确定存储结构后,我们需要细化数据表结构,面试中可以通过画图展示数据存储和读取的流程。

v2-5f046613fa08a6c387207fe57cb19998_b.jpg

用过前3个步骤的分析,我们已经得到了一个可行方案,注意是Work Solution而不是Perfect Solution,这个方案可以存在很多待解决的缺陷。

所以需要4S分析法的最后一步,Scale 扩展

这一步主要分两部分,一个是优化,包括解决设计缺陷,更多功能设计以及一些特殊情况如何处理;另一个是维护,包括系统的鲁棒性和扩展性,比如有一台服务器/数据库挂了怎么办?如果有流量暴增,如何扩展?

关于这一步更多的解题思路内容,可以来看我主讲的系统架构设计,现在前两节限免开放,感兴趣的同学可以免费试听下。

最后总结一下系统设计面试中需要注意的点:

  • Ask before design. 问清楚再动手设计,不要一上来就冲着一个巨牛的方案去设计;
  • No more no less. 不要总想着设计最牛的系统,要设计够用的系统;
  • Work solution first. 先设计一个基本能工作的系统,然后再逐步优化;
  • Analysis is important than solution. 系统设计没有标准答案,记住答案是没用的,通过分析过程展示知识储备,权衡各种设计方式的利弊。

如果文章对你有帮助,不妨点个赞再走~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值