设计之禅
有一天一个新手跟一个牛人相遇,新手就向那个牛人倾诉自己的困惑。
新手说:
最近接触到两个新概念scale up 和scale out。这两个概念是什么意思?
牛人说:
从个人的角度来说,scale up 好比个人努力提升自己的能力。scale out 好比一个团队扩充自己成员。
新手困惑地说:
那这跟我们的系统设计有什么关系?
牛人笑着说:
一个系统的中的组件,或者模块就好比一个团队中的个人。团队的整体成绩离不开个人的努力。 一个团队完成的任务,是靠每个人来完成的,因此个人的能力影响到团队任务 的进度、质量。
新手继续问:
那么一个系统如果超负荷,就好比一个团队任务太重,需要提升个人的能力。
牛人赞许道:
是的,如果一个团队任务延迟、完成质量比较不好,是要提升团队的个人能力,从而提升团队的能力。但是,个人能力scale up是有限的,是有瓶颈的。这时,团队就要开始
去招人,也就是说需要团队进行一定的scale out。
新手若有所思:
也就是说我们做系统设计的时候,既要做好单点设计,提升单点能力,还要考虑系统的scale out。
牛人赞许道:
嗯,scale up 和 scale out 是辩证的,要有一定的平衡。正如一个团队不能都招应届生,没有熟手,然后无限的scale out 。这样的scale out 仍然无法解决问题。
新手恍然大悟地说:
scale up 和 scale out 不能走极端。
牛人笑着说:
对,而且在一个分布式系统中,也要处理类似团队中木桶问题。一个木桶最短的板决定了木桶能够装多少水。一个集群系统也类似,假如你把任务分割成小任务给集群中的每
个节点执行,那么这个任务的完成时间是 由最慢的节点完成时间决定的。
新手终于解决了自己的困惑,向牛人说了声谢谢。
牛人谦虚地说:
你太客气了,不过要记住其实做系统设计遇到的问题,都可以通过生活中的问题来解释。道是相通的!!!!