系统设计的典型分层和涉及的知识点

标签: System Design 分层 系统设计 面试 | 发表时间:2015-08-09 19:56 | 作者:四火
分享到:
出处:http://www.raychase.net

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

系统设计的典型分层和涉及的知识点

对于其中的内容,稍微补充几句:

  • 系统设计需要经验的积累,但也确确实实有章可循。问的问题考察的类型很集中,比如同步、异步,消息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就会成为问题。
  • 读写模型的问题往往是和存储数据结构的设计放在一起的,这样的问题很容易从算法问题衍伸过来,我在 这篇文章中总结过。
  • 最后,我在 《资源链接》的“零散资源”部分,列出了系统设计很多我认为有价值的参考材料。

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》

分享到:

相关 [系统 设计 知识] 推荐:

秒杀系统设计的知识点

- - 互联网 - ITeye博客
A, 高并发,cache,锁机制 . B, 基于缓存架构redis,Memcached的先进先出队列. C, 稍微大一点的秒杀,肯定是分布式的集群的,并发来自于多个节点的JVM,synchronized所有在JVM上加锁是不行了. F, 如何防止用户来刷, 黑名单. G, 利用memcached的带原子性特性的操作做并发控制. .

系统设计的典型分层和涉及的知识点

- - 四火的唠叨
作为系统设计学习的一部分,不久前在梳理面试中典型的系统设计问题,发现大部分都可谓有套路可寻. 我把思路梳理了一下,简单整理到下面这张图表里面:. 对于其中的内容,稍微补充几句:. 系统设计需要经验的积累,但也确确实实有章可循. 问的问题考察的类型很集中,比如同步、异步,消息push和pull,根据实际问题设计存储的数据结构,对于scalability、availability的认识等等.

设计师需要的知识体系

- - 博客 - 伯乐在线
产品设计师面对复杂、庞大的制造业系统以及多元化的市场,其知识体系要同时具备广度和深度. 设计是循序渐进、不断深入的过程,因此我们面对的是交错的学科体系,以及深入的技术探究. 当国内工业设计教育界还在热烈地争论设计是艺术还是技术时,不妨退一步思考,设计本身既融合又独立,既有依附性又具有本身不可替代的意义.

设计师的知识管理

- - 百度MUX
人们每谈到设计很自然的就会联想到创意、想法. 作为设计师,好像我们的大脑里就理所应当地充满了各种创意,然而这些创意是本来就存在于大脑里的吗. 有人说创意来自冥想,我不否认有些天赋超人的设计神人可以通过冥想产生内容,但是对于非神设计师来说,冥想只是一个将脑海中的旧有内容进行重新组合并且呈现出来的一个方法.

评价系统设计篇

- - 互联网 - ITeye博客
评论系统大家都见得非常多了,大到京东、淘宝、亚马逊,小到个人网站、博客都有评论系统,小型网站采用传统PHP+Mysql方式就能很快将系统搭建起来,同时采用单库单表方式就能轻松解决数据存储、数据查询等问题,但是对于上述中大型网站而言,已经远远不能支撑系统正常运行了. 接下来将从系统架构、数据存储、高性能服务等方面来揭示京东的评价系统在面对海量数据、海量请求的情况是如何处理的.

如何把学到的知识系统化?

- - 战隼的学习探索
总能在知乎上发现一些眼前一亮的回答, 俞海鸥 的答案不错,很真实的个人经验. 知乎地址: http://www.zhihu.com/question/20737761. 这个问题跟: 六个步骤把资料转换成知识 这里的答案类似,实际上不外乎:. 流程化、系统化,形成节奏感. 通过知识管理来完成以下几项:.

软件公司如何免费搭建知识管理系统

- - 研发管理 - ITeye博客
知识管理对于一个公司来说非常重要,目前市面上有很多用于知识管理的软件,但是费用都比较高. 而使用几个开源网站代码,就可以在公司搭建起有效的知识管理系统了. 以下以Mantis+Testlink+SVN+Dokuwiki+Twitter 为例,简单说明如何搭建公司级的知识管理系统. 百度经验:jingyan.baidu.com.

关于个人知识管理系统 2014-03-08

- - CSDN博客综合推荐文章
美国教育家布鲁纳曾说过:“获得的知识,如果没有完满的结构把它联系在一起,那是一种多半会被遗忘的知识.   个人通过工具(即软件)建立知识体系(是一个知识网络)并不断跟踪完善优化,进行知识的收集、消化吸收和创新的过程,并且随时据情况进行结构调整或内容更新,它还提供某种将散乱的信息片段转化为可以系统性应用的东西的(个人)战略,并以此扩展我们的个人知识.

思考系统API设计的问题

- edware_love - C++博客-首页原创精华区
最近正好在思考系统API设计中考量的一些问题,. 我现在的理解是这样的,假设有巨大的真实内存. windows首先将高2G的内存自己占了,用作各种内核对象. 这2G内存共享给每个进程,但进程不能直接访问,只能通过windows给定的函数访问. : 然后每个进程都给他2G内存,进程如果创建自己的对象就放到自己那2G内存里面,如果要建立内核对象就放到共享的那高2G里面去.

系统设计中的简单法则

- - 酷勤网-挖经验 [expanded by feedex.net]
最近,包云岗在自己的 博客中总结了系统设计中的基本法则——简单之美,列举了不少经典观点和案例. 他首先总结了麻省理工方法(MIT Approach)和新泽西方法(New Jersey Approach)的异同:. 简单性:两种方法都强调设计必须简单,这既是对实现的要求,也是对接口的要求. 但是,MIT方法认为接口的简单要比实现的简单更加重要,而NJ方法认为实现的简单要比接口的简单更加重要.