系统设计的典型分层和涉及的知识点
作为系统设计学习的一部分,不久前在梳理面试中典型的系统设计问题,发现大部分都可谓有套路可寻。我把思路梳理了一下,简单整理到下面这张图表里面:

对于其中的内容,稍微补充几句:
系统设计需要经验的积累,但也确确实实有章可循。问的问题考察的类型很集中,比如同步、异步,消息push和pull,根据实际问题设计存储的数据结构,对于scalability、availability的认识等等。最喜欢被问到的问题,我在《系统设计典型问题的思考》这里列了几个。
pull on demand 和 push on change 是消息系统里两种极其典型的消息传播方式,基本上设计twitter、weibo,xx聊天系统等等,都要涉及到这个问题。这二者各有优劣,需要结合具体问题分析。
复杂的系统的cache的设计和storage的设计一样,往往需要考虑分层。比如说,存储分成hot/warm/cold storage,读写性能和查询的灵活性依次降低,但是成本也依次降低。cache的设计有时还需要引入centralized cache来帮助提高hit ratio。
服务端的设计最典型的就是分成三层(上图右):presentation layer,比如website的页面部分和service的request/response处理的部分;business logic layer,放置业务逻辑的地方;data access layer,也可以说infrastructure layer,数据访问层,花头最多,涉及的问题最多。
DB partition 和 sharding 的问题又是一个非常常见的典型。
如果是性能问题,基本上都是围绕着throughput和latency展开的。
一致性模型可以说是大数据系统问题的核心。比如说考虑到availability,对于有状态的节点需要有backup,那么这几个节点状态之间的同步就会成为问题,这就是consistency的问题;再比如说由于考虑到reliability,必然需要引入replication,而这时多个数据备份的consistency就会成为问题。
读写模型的问题往往是和存储数据结构的设计放在一起的,这样的问题很容易从算法问题衍伸过来,我在这篇文章中总结过。
最后,我在《资源链接》的“零散资源”部分,列出了系统设计很多我认为有价值的参考材料。
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:四火 来源: 四火的唠叨
- 标签: 分层 系统设计
- 发布时间:2016-02-11 22:54:42
-
[884] WordPress插件开发 -- 在插件使用 -
[136] 解决 nginx 反向代理网页首尾出现神秘字 -
[57] 整理了一份招PHP高级工程师的面试题 -
[54] Innodb分表太多或者表分区太多,会导致内 -
[54] 如何保证一个程序在单台服务器上只有唯一实例( -
[54] 分享一个JQUERY颜色选择插件 -
[53] jQuery性能优化指南 -
[52] 用 Jquery 模拟 select -
[52] CloudSMS:免费匿名的云短信 -
[51] 全站换域名时利用nginx和javascri
