系统设计第一次课听课笔记
网站分为前端和后端
前端就是大家看到的网站界面,类似美女的外表;
后端就是网站的架构设计,类似美女的内心,肚子里有多少东西,无法直接看出来。
后端工程师很苦逼,网站有问题,随时上马,修复问题,比如微博因为明星结婚,访问量过大,微博挂了,后端需要24小时待命。
前端只是修改网站界面,比如公司出了新产品,让用户看到新产品,属于前端,前端出问题不用立刻去修复,因为完全不影响客户访问网站,只是不漂亮罢了。后端出问题就容易出现404,无法访问的情况。
想生活工作平衡的就搞前端,搞后端容易没时间陪女朋友,或者哪有时间找女友,24小时陪着电脑,电脑就是女朋友。
面向web后端,
实习生不会考到系统设计。
tradeoff
soa
pull model
push model
数据存储系统
异步任务,消息队列
6
面试形式:
设计某系统,设计微博,设计Facebook,看看你能够撩到多深,多好,面向非常后端的工程师,
设计某个系统中的某某功能。比如,登录密码不能错误多少次,删除一个微博功能。标记邮件为已读功能,某个小功能。
说清楚的话还是要求对系统设计有基本概念和认知。
7
系统设计SD和面向对象设计OOD区别
哪种面试需要写代码?
系统设计属于吹牛扯淡的话题,一般不考代码。面向对象需要写代码,写出各种继承关系。
知识点:
OOD考class,object, method,interface,inheritance,考察电梯设计,游戏设计。角色,操作
SD考察:数据库,网址系统设计,新鲜事系统设计。
9
课程有配套阶梯训练的。刷题消化课程内容。
10
面试问题:请设计Twitter。
第一句给面试官的话是?单向关注限制的博客系统,限制140个单词。微信是双向朋友关系,微博是单向关系,你关心别人,别人不一定关注你。
什么功能,场景,用户规模,
系统设计没有提到任何语言,需要数据库SQL语句。刷题用什么语言随意。没有和编程语言相关的东西。算法也和编程语言没关系。
系统设计评分标准:
有没有可行解。
特定问题,小功能设计能够答出来。
分析能力,根据设定的难点,解决掉
权衡能力,多种选择怎么选择最好的路线。没有标准答案。
知识储备。如何。
问题4S分析法:scenario,service, storage, scale
scenario设计场景,哪些功能,设计多牛逼
service服务把大系统拆分小问题
storage存储,数据如何存储与访问。
最重要,最难的部分。
Scale升级:解决缺陷,数据非常大,处理特殊问题。
对于Twitter,场景是:用户量,需要承担多大访问量,日活跃用户,月活量。这两个指标看看网站,APP的活跃量,Facebook日活:14亿。还要问有哪些功能需要设计。面试官肯定会告诉你。
用户量的影响主要是并发用户数。日活次数*每个用户平均请求次数/一天多少秒 = 150M * 60/ 86400 平均每秒10万次
一般每天60次网络请求。峰值和平均值的比例,合理值,2-9之间都可以。
30万次并发的读请求,写请求。重要的是计算过程,不是结果。
QPS用处,=100,用笔记本做web服务器就行。
1k,用好的web服务器就行。
QPS = 1万,需要建设1000台web服务器集群。如何维护,每一台挂了怎么办。
qps和服务器,数据库的关系。
一台服务器承受1000很牛了。一台SQL Database承受1千
nosql数据库cassandra承受1万的QPS,设计时候就是这样设计的。
300 I/O per second,每秒只有30次
service服务把大任务分解为小任务。只是设计某个功能,可以跳过这步。用户服务,注册,登录。tweet service: post a tweet news feed timeline. ; media service: upload image upload video; friendship service:follow unfollow
按照存储方式表单分类。
router:
flask:Python的web framwork,最快速搭建一个网站,里面最基本的概念都懂了。
存储方式:数据库,文件,缓存系统。
数据库:关系,非关系数据库
文件系统和数据库系统之间的关系:数据库构建在文件系统之上的。数据库无法脱离文件系统独立存在。如果学过操作系统,里面分为文件系统和内存系统,缓存系统就是内存系统了。
最开始肯定没有数据库,如果直接最文件系统操作,会非常痛苦,因为需求非常丰富。因为需求可以是查询年龄区间的男人,如果在文件系统中做,需要在所有用户信息中查找,太慢了,不太好查找,增删查改太难。
什么样的数据适合数据库和文件系统中?
结构化数据例如姓名,性别,年龄等就适合数据库中。图片视频非结构化数据适合文件系统。
缓存系统cache不支持持久化。持久化:断电就消失了。通常用来运算结果(花很长时间计算出来的),频繁访问的适合放在缓存中。
Redis是个非关系数据库。
27
非关系数据库:tweet service
关系数据库:user service
media service:file system
friendship service: sql/ nosql
系统= 服务+数据存储
程序=算法+数据结构
28
考察表单内容,存储什么东西?
休息5分钟
news feed新鲜事系统。
新鲜事:登录朋友圈,看到的信息流,朋友发布信息的集合。
典型新鲜事情系统:Facebook,Twitter,朋友圈,RSS Reader(绝迹了,属于博客和微博之间的过度产品)。
系统核心因素:
关注,被关注。每个人看到的新鲜事不同。
C++写网站找抽。Java都比较少了。更多用PHP,Python,C++更适合底层开发。
新鲜事是伟大的发明。以前的博客是必须看看别人是否更新了,后来Facebook这种新鲜事情,这个就很轻松了,只要关注了,自动就推送给自己,不需要每天去刷他的博客。
信息流怎么存取,就是核心点。让大家回复,根据学生反馈,有针对性回复。从文件系统读数据库,
32
存储pull model,算法
在用户查看朋友圈时候,获取每个好友前100条tweets,合并前100条news feed。k路归并算法。
不关心时间复杂度,关心数据库读取次数和读取方式。
存储原理:
pull模型缺陷:非常慢
异步执行:创建记录,然后不管了,其他进行得到这个任务,慢慢执行。发帖后告诉用户,发帖成功,但是粉丝收到新帖子还要一段时间。
storage ;pull vs push模型朋友圈用push模型,因为大V问题。当我是大V,pull很慢,所以不可以用pull。所以会限制朋友圈人数最多5000,以前最多2000.
facebook为啥用pull模型,太复杂了,有群信息,也可以单向关注,如果用push,太麻烦了。
scale扩展,解决pull缺陷,最慢的部分发生在用户读请求时候。在DB访问前加入cache,cache每个用户的timeline,cache每个用户的news feed。
浪费更多存储空间disk:
push结合pull模型:普通用户仍然push。明星不用push到用户的新闻里,
没有很大流量,push最好。资源少,偷懒,用户发帖少,实时性要求不高用push。
用pull:资源充足,实时性要求高,用户发帖多,单向好友关系,有明星问题。
54页结束。
总结:4S是一个套路:问清楚再动手。
分析比答案重要,关注这个过程是否和谐,有道理。系统设计没有标准答案,通过分析过程展现自己的知识储备。最后一期系统设计课程。
63页PPT结束
认识你是我们的缘分,同学,等等,记得关注我。
微信扫一扫
关注该公众号
更多推荐
网站前端,后端设计,系统设计常识
发布评论