分布式和集群

分布式和集群


分布式:

公司有3个系统: A系统、B系统、C系统,这三个系统所做的业务不同,被部署在3个独立的机器上运行,他们之间的互相合作调用(当然是跨域网络的),通力合作完成公司的业务流程。


将不同的业务分布在不同的地方,这就构成了一个分布式系统。

现在问题来了,系统A是整个分布式系统的“脸面“,用户直接访问,用户量访问大的时候要么是速度巨慢,要么直接挂掉,怎么办?

由于系统A只有一份,所以会引起单点失败。

集群:

由于公司不差钱,就多买了几台机器,把系统a一下部署了好几份,每一份都是系统A的一个实例,对外提供相同的服务,这样就不怕一个坏掉了,我还有另外2个。


这3个服务器上的系统就组成了一个集群,

可对于用户来说,一下子出现这么多个系统A,每个系统的IP地址不一,到底访问那个?

如果所有人都访问服务器1.1,那服务器1.1会被累死,剩下的2个闲死,成了浪费钱的摆设。


负载均衡:

为了让3个机器的系统A工作均衡一些,比如有3万个请求,那让3个服务器各处理1万个,这就是负载均衡。

很明显,这个负载均衡的工作最好独立出来,放到独立的服务器上(例如ngnix)

 


到后来发现,这个负载均衡的服务器虽然工作内容简单,就是拿到请求,分发请求,但是它还是有可能挂掉,单点失败还是会出现。

没办法只好把负载均衡也搞个集群,不过和系统A的集群有两点不同

1)这个新的集群中虽然有两个机器,但我们可以用某种办法,让这个集群对外只提供一个ip地址,也就是说用户看到的好像是一个机器,

2)同一时刻,我们只让一个负载均衡的机器工作,另一个原地待命,如果那个挂掉,才将待命的负载均衡服务器顶上去。



弹性:

如果这3个系统A的实例还是满足不了大量的请求,那就再加服务器,

 

 

Eg:双十一又来了,用户量时平时的10倍,小明向领导申请费用又要买几十台服务器,一下子把系统A部署了几十份,可是双十一过后,流量一下降了下来,那几十台服务器用不上了,也就成了摆设,

被领导批评以后,小明决定试一下云计算,在云端创建,删除虚拟的服务器,那样可以轻松的随着用户的请求动态的增加服务器了,双十一来了就创建虚拟服务器,等到双十一过去了,就把不用的关掉,省的浪费钱,于是系统具有了弹性。

 

 

 

 

 

失效转移:

 

上面的系统看似已经够完美了,但是做了一个不切实际的假设,所有的服务都是无状态的,换句话说,假设用户的两次请求直接是没有关联的,但现实是,大部分的服务都是有状态的,例如购物车,

用户访问系统,在服务器1.1上创建一个购物车,并向其中加了几个商品,然后服务器1.1挂掉了,用户的后续访问就找不到服务器1.1了,这时候就要做失效转移,让另外的几个服务器去接管,去处理用户的请求。

可是问题来了,假设用户是在服务器1.1上登录的,用户登录过的信息保存到了该服务器session中,现在这个服务器挂掉了,用户的session当然不存在了,当用户被失效转移到其他的服务器上时候,其他服务器发现用户没有登录,就把用户踢到了登录页面,让用户再次登录。

状态,状态,状态! 用户的登录信息,购物车等都是状态信息,处理不好的问题,集群的威力就大打折扣了,无法完成真正的失效转移,甚至无法使用。

一种方法是把状态信息在集群的各个服务器之间复制,让集群的各个服务器达成一致,谁来干这个事情?只能是像websphere,weblogic这样的应用服务器了,

还有一种办法是,就是把状态信息集中存储在一个地方,让集群的各个服务器都能访问到


分享(share )是快乐的,也是见证个人的成长历程,文章主要为平时学习积累,基于自身认知不足之处在所难免,也恳请大家指正共同进步

 







猜你喜欢

转载自blog.csdn.net/weixin_37770023/article/details/78264643