集群与分布式
今天看之前大牛写的代码,中间涉及了一些集群与分布式的概念,不是很理解,于是查了一些资料总结记录下。
我用自己比较简单的话来概括就是:
集群是指一组计算机,每个计算机上运行的都是相同的业务(姑且用业务来形容吧),当某个计算机Crash掉后,就会将其任务转交给其他计算机来进行;
分布式指一组计算机,每个计算机上运行的是不相同的业务,当某个计算机Crash掉后,如果这个计算机的业务在这组计算机中是唯一的,很明显,这组计算机就不能提供对应的业务能力(资源)了。
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
例如:
如果一个任务由10个子任务组成,每个子任务单独执行需1小时,则在一台服务器上执行改任务需10小时。
集群:同样提供10台服务器,每台服务器都能独立处理这个任务。假设有10个任务同时到达,10个服务器将同时工作,10小后,10个任务同时完成,这样,整身来看,还是1小时内完成一个任务。
分布式:提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。
集群(Cluster)
集群在用户看来,就是一个服务实体(提供某种资源或者能力),但实际上其是由多个相同的服务实体共同构成的。
集群与单一的服务实体相比较,具有以下两个特征:
1.可扩展性:可以动态地增加(或者删除)一个服务实体,以增强集群的性能;
2.高可用性:当集群中某个节点Crash了,其上承载的任务可以交由其他节点(服务实体)来处理(因为每个服务实体都具有相同的业务能力),这样可以提供较高的可用性;
集群应该有两个能力:
1.负载均衡;可以将任务比较均匀地分配到集群环境中的每个服务实体(节点)上进行处理;
2.错误恢复:由于某种原因,执行某个任务的节点出现故障,可以将此任务在另一服务实体中执行接着完成,在外部看来什么问题也没出现过,任务完成;
集群的两个关键:
1.集群地址:
集群由多个服务实体组成,客户端通过访问集群的集群地址获取集群内部各服务实体的功能。
集群具有单一的集群地址。
维护集群地址的设置被称为负载均衡器。负载均衡器内部负责管理各个服务实体的加入和退出,外部负责集群地址向内部服务实体地址的转换。
2.内部通信:
为了能协同工作、实现负载均衡和错误恢复,集群各实体间必须时常通信,比如负载均衡器对服务实体心跳测试信息、服务实体间任务执行上下文信息的通信。
集群主要分成三大类:
1.高可用集群( High Availability Cluster)–例如双机热备(或者叫双击互备)
HA三种工作方式
<1>主从方式(非对称方式)
主机工作,备机处于监控状况;当主机宕机时,备机接管主机的一切工作,待主机恢复正常后,按使用者的设定以自动或手动方式将服务切换到主机上运行,数据的一致性通过共享存储系统解决。
<2>双机双工方式(互备互援)
两台主机同时运行各自的服务工作且互相检测情况,当任一台主机宕机时,另一台主机立即接管它的一切工作,保证工作实时,应用服务系统的关键数据存放在共享存储系统中。
<3>集群工作方式(多服务器互备方式)
多台主机一起工作,各自运行一个或几个服务,各为服务定义一个或多个备用主机,当某个主机故障时,运行在其上的服务就可以被其它主机接管。
主要注意的一点是:当主用机恢复正常后,是否从备用机中自动切换过来?当然可以人工切换,也可以自动切换。
PS:
我在工作中使用的比较多的就是HA,也就是高可用集群,因为公司主要是通信行业,对可用性要求很高。
有时我在现网部署就部署的是双机热备,以提供较好的可用性。
2.负载均衡集群(Load Balance Cluster)
集群中所有的节点都处于活动状态,它们分摊系统的工作负载。
一般Web服务器集群、数据库集群和应用服务器集群都属于这种类型。
负载均衡集群一般用于相应网络请求的网页服务器,数据库服务器。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器上。
3.科学计算集群(High Performance Computing Cluster)
这类集群致力于提供单个计算机所不能提供的强大的计算能力。
其他:
1.集群还可以通过采用廉价的复合工业标准的硬件来构造高性能的系统;
分布式与集群
回归一开始说的,集群集群,是集群中每个节点都运行相同的业务,提供同样的能力,而分布式是指将一个业务分成多个小业务,然后由不同的节点去处理。
So:
分布式中每个节点,都可以做一个集群(这个集群统一对外实现某一个子业务);
集群并不一定是分布式的,如果集群中每个节点都是分布式的,那么从集群的角度来看,就会有很多个完全相同的分布式群;
比如新浪网,访问的人多了,他可以做一个集群,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。
分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务就不可访问了。
资料来源:
1.https://my.oschina.net/004/blog/170560
2.http://www.cnblogs.com/zhijianliutang/archive/2012/03/05/2381055.html
3.https://my.oschina.net/u/2489417/blog/807304