上一篇文章写到了架构的演变过程,其中出现了 分布式
和 集群
两个名词,有些人可能会对这两个词造成误解,那么我们这里就对这两个名词做一些解释
首先, 分布式
和 集群
都是使用多台服务器来进行工作的,都可以提高系统的高并发
简单一点来说,可以这样理解:
分布式
- 一个业务分拆多个子业务,分别部署在不同的服务器上(可以是在不同的物理位置)
- 使每个服务器的职责更加专一,缩短单个任务的执行时间来提升效率
- 可以用来解决系统的高性能
- 分布式的每一个节点,都可以做集群
集群
- 同一个业务,部署在多个服务器上(集中统一管理)
- 主要是通过提高单位时间内处理的任务数来提高效率
- 用来解决系统的高可用性
分布式
用来业务拆分,不同的业务部署在不同地方(几个人分工合作)
集群
将几台服务器部署在一起,实现同一个业务(一群人做一件事)
接下来,我们在来分别详细的说一下
集群
集群
是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但事实上集群由一组服务实体组成
与单一服务实体相比较,集群提供了以下特性:
- 可扩展性——集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能
- 高可用性——集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出 错的服务实体恢复到另一个服务实体的功能增强了应用的可用性
为了具有可扩展性和高可用性特点,集群还必须具备以下能力:
- 负载均衡——负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源
- 错误恢复——由于某种原因,执行某个任务的资源出现故障,另一服务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复
负载均衡
和 错误恢复
都要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图(信息上下文)必须是一样的
实现集群还要有以下技术:
- 集群地址——集群由多个服务实体组成,集群客户端通过访问集群的集群地址获取集群内部各服务实体的功能。具有单一集群地址(也叫单一影像)是集群的一个基 本特征。维护集群地址的设置被称为负载均衡器。负载均衡器内部负责管理各个服务实体的加入和退出,外部负责集群地址向内部服务实体地址的转换。有的负载均衡器实现真正的负载均衡算法,有的只支持任务的转换。只实现任务转换的负载均衡器适用于支持ACTIVE-STANDBY的集群环境,在那里,集群中只有 一个服务实体工作,当正在工作的服务实体发生故障时,负载均衡器把后来的任务转向另外一个服务实体
- 内部通信——为了能协同工作、实现负载均衡和错误恢复,集群各实体间必须时常通信
具有同一个集群地址使得客户端能访问集群提供的计算服务,一个集群地址下隐藏了各个服务实体的内部地址,使得客户要求的计算服务能在各个服务实体之间分布。内部通信是集群能正常运转的基础,它使得集群具有均衡负载和错误恢复的能力
集群类型
最常见的三种集群类型包括 高性能集群
、负载均衡集群
和 高可用性集群
- 高性能集群:
通常,高性能集群涉及为集群开发并性编程应用程序,以解决复杂的科学问题。这是并行计算的基础,尽管它不使用专门的并行超级计算机,这种超级计算机内部由十至上万个独立处理器组成。但它却使用商业系统,如通过高速连接来链接的一组单处理器或双处理器 PC,并且在公共消息传递层上进行通信以运行并行应用程序。因此,会常常听说又有一种便宜的 Linux 超级计算机问世了。但它实际是一个计算机集群,其处理能力与真的超级计算机相等
- 负载均衡集群:
负载均衡集群为企业需求提供了更实用的系统。如名称所暗示的,该系统使负载可以在计算机集群中尽可能平均地分摊处理。该负载可能是需要均衡的应用程序处理负载或网络流量负载。这样的系统非常适合于运行同一组应用程序的大量用户。每个节点都可以处理一部分负载,并且可以在节点之间动态分配负载,以实现平衡。对于网络流量也是如此。通常,网络服务器应用程序接受了太多入网流量,以致无法迅速处理,这就需要将流量发送给在其它节点上运行的网络服务器应用。还可以根据每个节点上不同的可用资源或网络的特殊环境来进行优化
- 高可用性集群:
高可用性集群的出现是为了使集群的整体服务尽可能可用,以便考虑计算硬件和软件的易错性。如果高可用性集群中的主节点发生了故障,那么这段时间内将由次节点代替它。次节点通常是主节点的镜像,所以当它代替主节点时,它可以完全接管其身份,并且因此使系统环境对于用户是一致的
在集群的这三种基本类型之间,经常会发生混合与交杂。于是,可以发现高可用性集群也可以在其节点之间均衡用户负载,同时仍试图维持高可用性程度。同样,可以从要编入应用程序的集群中找到一个并行集群,它可以在节点之间执行负载均衡
分布式
分布式就没有集群那么难理解了,就是把一个任务划分为多个任务,分别交给多个计算机来解决,然后共同完成这项工作
因为我是做web开发的,所以我们以网站为例
比如说我们现在有一个大型的网站,根据业务我们可以把整个网站划分为多个业务模块,每个业务模块交给一个单独的团队来完成,然后每个团队分别把他们负责的业务模块部署在单独的服务器(物理位置没有限制)上面,这就可以理解为分布式部署。如果某个业务模块的用户访问量很大,这时候我们可以把这个节点做成集群,保证该模块的高并发性、架构的可伸缩性
如下图所示:
这个里面,我们对不同的业务进行了分布式的架构,然后对于相同的业务模块,我们将其配置为集群,以此来保证架构的可用性、伸缩性和可扩展性