某天,下班较早,我正在玩吃鸡,已经到决赛圈了,这时候,女朋友满脸求知欲的朝我走过来。
上次他们都说你给我讲的面向对象太简单了。
那你想怎样?为什么我一玩游戏你就过来问我问题呢?
我不管,你给我说说分布式和集群是啥东东?
我头也不抬,直接抛出一句:
分布式(distributed)是指在多台不同的服务器中部署不同的服务模块,通过远程调用协同工作,对外提供服务。
集群(cluster)是指在多台不同的服务器中部署相同应用或服务模块,构成一个集群,通过负载均衡设备对外提供服务。
说人话,这东西我听不懂。
好吧。走,我们先出去吃饭。边吃边聊。
集中式系统
我和女朋友来到一家小饭店,开始点菜:红烧鱼、糖醋排骨、酸辣土豆丝,好了就这么多了。
现在,我们和这家饭店之间的就是用户和系统的关系。我们要求他给我们做出一顿丰盛的晚餐。我们不关心他后厨的一切事情。只要它能在短时间内提供美味的菜品就好了。
上面,我们对这个饭店提出来两个要求:上菜时间短、菜品美味。除了这些,顾客可能还有其他要求,比如菜品要干净卫生、酸辣土豆丝可以多放些辣椒等。
映射到计算机系统中,用户提出的要求就是:
上菜时间短 -> 性能
干净卫生 -> 安全性
菜品多放辣椒 -> 扩展性
菜品美味 -> 可用性
上面说的这家小饭店,只有一个厨师。就是一个集中式系统。
一个集中式部署的电子商务应用
如果饭店内只有我们一个顾客的话,以上几条基本都可以满足的。但是,如果到了晚饭时间,突然顾客变多了,这些顾客的要求可能就没办法全都满足了。
饭店内人满为患,这家小饭店只有一个厨师的情况下,他需要保证所有菜品美味、卫生,又要保证所有菜品可以准时准备好,又要给不同用户满足定制化要求。这种挑战是及其大的。
以上,映射到计算机软件中,也是一样的。随着业务量的增长,网站的高可用、易伸缩、可扩展、安全等目标就会受到极大的挑战。
集群部署
随着饭店的生意越来越好,老板意识到只有一个厨师会存在很大问题。
首先,在客流量高峰期,一个厨师无法满足所有顾客的要求。
其次,厨师变成了一个单点,就是他不能生病,一旦他生病了,整个饭店就无法营业了。
这可愁坏了老板,一时之间不知道该如何是好了。但是,老板有个聪明的老婆,他提了一个建议。
这有什么好发愁的?再雇佣几个厨师就行了呀。
诶,你这个注意很不错啊。
然后,为了提高饭店的待客能力。老板决定多雇佣几个厨师。
有了多个厨师了之后。店内顾客的点菜,就可以分配给后厨的多个厨师来做。
具体如何分配,这就是需要一定的策略了。可以选择分配给空闲的厨师、也可以按顺序轮流分配。
虽然,饭店有多个厨师,但是用户并不知道这些事情,他只知道自己的点菜需求,可以得到满足就可以了。他也不需要关心到底是哪位厨师给自己做的菜。除非菜品出现了质量问题时,就需要找到指定的厨师来问责了。
以上,映射到计算机软件中,也是一样的。集中式系统只有一台计算机提供服务,集群就是有多台计算机提供同样的服务。
一个集群部署的电子商务应用
用户的请求通过负载均衡分配给集群中的各个机器。整个系统对于用户来说就像是一台机器在提供服务一样。
分布式部署
在饭店雇佣了多个厨师之后,饭店的服务能力确实提升了很多。顾客也越来越多。
但是,最近店内经常会有顾客投诉某个菜品的味道和自己之前吃到过的不一样了。
经过店长的仔细调查,发现是由于这家店的厨师除了要负责炒菜以外,还需要负责洗菜、切菜、备菜,甚至是刷碗。
这就使得厨师没办法专注于炒菜了,他会被很多其他的琐事而牵绊,导致无法专心炒菜,影响了菜品的质量。
而且,由于最近店内的顾客也越来越多,几个厨师还是忙不过来。
这时候,老板就要想办法继续提升饭店的服务能力。他想着要继续雇佣几个厨师。
还是饭店老板那个聪明的老婆,又给他出了一个更好的主意。
雇佣一个厨师多费钱啊,你用雇佣一个厨师的钱,雇佣几个洗菜工、配菜师不就行了么。
诶,你这个注意很不错啊
这就是一种分布式的思想。
通过把一件大的事情,拆分成多个小事情,分别交给不同的人来做。
这样术业有专攻,洗菜的可以把菜洗的更干净、厨师也可以专注炒菜,把菜炒的更加美味。
饭店从多个厨师的配置,变成了多个洗菜工+配菜师+厨师的配置。这家饭店的服务能力大大提升。再也没有顾客投诉菜品问题了。
对于顾客来说,他们还是不知道后厨的这些变化的,他甚至不知道自己点的菜是多个人配合的结果。
以上,映射到计算机软件中,也是一样的。除了通过集群部署的方式提升系统能理外,还可以通过分布式部署的方式。
一个分布式部署的电子商务应用
把一个大的系统拆分成多个子系统,每个子系统负责自己专注的事情,然后通过网络进行通信和协调,对用户来说,就像访问的是同一台机器一样。
哇,太棒了。
你听懂了对吧,什么都难不住我的。
什么啊,我想说,这红烧鱼太好吃了。
额、、、
随着饭店的发展,慢慢的从只有一个厨师演变成有多个厨师,进而演变成有洗菜工、配菜师、厨师等多个职位。
这个网站架构发展也类似。网站初期,只需要搭建一个集中式的单体应用就可以了,如果业务量有很大增长,先考虑增加机器,通过集群部署提升能力。接着,就可以考虑分布式了。
公众号:javafirst
网友评论