平时开发或者面试中进场听到集群、分布式、负载均衡等系列的名词,他们之间有什么联系呢,本文就简要的抛砖引玉一下。
集群
1.什么是集群
集群一般指的是服务器集群。集群其实就是一组相互独立的计算机,通过高速的网络组成一个计算机系统。而很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器,对用户来说无感知。
2.集群的优势
1、高性能
例如有1千台服务器同时计算运行,其运行效率肯定远大于单机的运行效率。
2、高性价比
通过使用普通的服务器,使用集群组合其性能也能达到昂贵的小型机服务器的性能,但是价格缺很低,能够节约大量资金可谓性价比满满,这也是后来国内大型电商等逐步去除IOE的目的。
3、可伸缩性
例如平时业务最多需要10台服务器,但是考虑到大促(比如618、双11)这些促销抢购节点,需要瞬时的强大并发承载。这就可以提前预估服务器,在极端的情况下,可以实现动态的服务器扩容。
3.集群的分类
集群一般分为以下三种类型:
- 负载均衡集群(Load balancing clusters)简称LBC
- 高可用性集群(High-availability clusters)简称HAC
- 高性能计算集群(High-perfomance clusters)简称HPC
一般我们平时接触最多的就是负载均衡集群,通过前端 Nginx 把请求分发给后端的不同后端web服务器,通过随机算法或者权重算法等对流量的分摊保证系统的正常运行。
高可用性集群和负载均衡有点类似,但是它一般都是按照主从模式来进行的,比如一主一从,一主多从等模式。其侧重点在于主节点有异常,从节点能够快速切换保证系统的正常运行。
高性能计算集群一般都是运用在大量计算型的业务上,比如挖矿都是用的高性能集群来进行密集的操作。
负载均衡
在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首先由它接收,调度者再根据每台服务器的负载情况将请求分配给其中的一台后端服务器去处理。
在这个过程中,调度者如何合理分配任务,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡。
分布式
分布式是指将不同的业务分布在不同的地方,而集群则是将几台服务器集中在一起,实现同一业务。
分布式中的每一个节点,都可以做集群,而集群并不一定就是分布式的。
分布式数据一致性
分布式系统中,解决了负载均衡的问题后,另外一个问题就是数据的一致性了。
在分布式集群中,很难保障数据的一致性,在以往的单节点服务中,通常使用锁来实现,当发生并发冲突时 通过对锁的持有获得对象的操作权,从而保证数据在同一时刻只允许被一个请求操作。
如果在集群中,若同样采用锁的机制,那么需要一台节点用来管理分配锁,当其他节点进行请求前,首先去获取锁从而获得执行权。不过这样会产生单节点问题,即管理锁的节点挂掉了,那么整个集群将无法工作。同时,由于锁的机制会使整个集群变成串行化单节点的形式,也失去了集群的意义。
所以,在集群中需要一种高容错的分布式一致性算法,因此提出了Paxos算法。在Paxos算法的基础上后续有出现了:ZAB、Raflt等算法。Raft算法也是解决分布式系统一致性问题的,与 Paxos 实现的功能相同,相对来说更容易实现和理解。