今天看了篇文章,讲的是分布式和集群的区别,觉得挺有趣的,决定自己再写一篇,权当是加深印象了。
分布式(distributed):是指在多台不同的服务器中部署不同的服务模块,通过远程调用协同工作,对外提供服务。
集群(cluster):是指在多台不同的服务器中部署相同应用或服务模块,构成一个集群,通过负载均衡设备对外提供服务。
打个比方:
好比在一个餐馆里点菜吃饭,我们直接照着菜单点了很多菜,我们不用关心这些菜是怎么完成的,只需要它能在吃饭时间内把饭菜做好就行了,这里顾客的需求可以和计算机系统映射:
上菜时间短--》性能
干净卫生--》安全性
菜品多放辣椒--》扩展性
菜品美味--》可用性,
这个菜馆目前的状态,一个厨师负责炒菜、切菜、洗菜等全部工序,就相当于一个单机集中式系统,一台部署了数据库、Web服务等全部系统。
集群部署
当菜馆来吃饭的顾客越来越多了,生意越来越好的时候,一个厨师明显无法满足多个顾客的需求了,既要保证菜品、味道,还要保证时间、卫生,如果厨师请假或生病,那么菜馆就没法经营了。这和计算机系统也是一样的,随着业务量的增长,所有业务集中在一个节点,容易宕机,网站的高可用、易伸缩、可扩展、安全等目标的要求就会很高了。
为了提高待客能力,扩展菜馆生意,老板决定多请几个厨师,顾客的点菜可以分配给后厨的不同厨师来做。具体如何分配,可以按照先后顺序进行。
映射到计算机系统当中,就是多台计算机提供同样的服务,也就是所谓的集群。用户不用关心是哪台计算机提供的服务,只需要能够得到自己需要的服务即可。通过负载均衡将任务分配到不同的计算机当中,达到系统资源的充分利用,缓解服务器在高流量情况下的压力。
分布式部署:
菜馆雇佣了多个厨师后,菜馆的服务能力确实得到了很大提升。但是,一个厨师既要负责洗菜、切菜、炒菜,还要负责上菜、刷碗,这样厨师无法专心完成炒菜的主要工作,会被其它很多琐事打扰,影响炒菜这个工序的质量,菜品在中间任何一个环节出了问题,也无法判断问题原因,到底是菜品本身不好导致,还是厨师炒菜有问题,还是在上菜过程中出的拆错,都无法追溯。而且随着店内顾客的增多,几个厨师还是会忙不过来。
于是老板又请了几个洗菜工、墩子、服务员、采购员等员工,每个员工都只负责自己职责划分内的事情,术业有专攻,采购员可以识别菜品本身质量,洗菜工能把菜洗的很干净,厨师能够专心炒出美味的佳肴,这样菜馆的服务能力又大大提升了,发生问题,也能够及时查找原因和出处。
映射到计算机系统中也是一样,把一个大的业务系统拆分成多个子业务系统,每个子业务系统负责自己专注的事情,然后通过网络进行通信和协调,对用户来说,就像访问的是同一台机器一样。这就是分布式部署。