分布式系统学习(一):为什么要集群与分布式?

摘自:https://www.jianshu.com/p/8e510857e23f

分布式和集群的通俗理解

分布式和集群其实就好像权限或者表的水平切割和垂直切割,集群是一种水平切割来分担压力的形式,分布式就好像一个垂直切割来分担压力一样。分布式必定包含集群。

一、为什么要集群?

1.JavaEE项目,如果部署在一台Tomcat上,所有的请求,都由这一台服务器处理,存在很大风险:

A:并发处理能力有限

(一般单台服务器处理的并发量为250左右,超过250,可能会出现数据丢失,链接不稳定的情况)。因为单服务器的性能有限制。所以单台Tomcat的最大连接数有限制,

B:容错率低,一旦服务器故障,整个服务就无法访问了。

eBay于 1999年6月停机22小时的事故,中断了约230万的拍卖,使eBay的股票下降了9.2个百分点。

C:单台服务器计算能力低,无法完成复杂的海量数据计算。

提高CPU主频和总线带宽是最初提供计算机性能的主要手段。但是这一手段对系统性能的提供是有限的。接着人们通过增加CPU个数和内存容量来提高性能,于是出现了向量机,对称多处理机(SMP)等。但是当CPU的个数超过某一阈值,这些多处理机系统的可扩展性就变的极差。主要瓶颈在于CPU访问内存的带宽并不能随着CPU个数的增加而有效增长。与SMP相反,集群系统的性能随着CPU个数的增加几乎是线性变化的。

分布式系统学习(一):为什么要集群与分布式?

二、什么是集群

集群是是指将多台服务器集中在一起,每台服务器都实现相同的业务,做相同的事情。但是每台服务器并不是缺一不可,存在的作用主要是缓解并发压力和单点故障转移问题。可以利用一些廉价的符合工业标准的硬件构造高性能的系统。实现:高扩展、高性能、低成本、高可用!

2.1伸缩性(Scalability)

在一些大的系统中,预测最终用户的数量和行为是非常困难的,伸缩性是指系统适应不断增长的用户数的能力。提高这种并发会话能力的一种最直观的方式就增加资源(CPU,内存,硬盘等),集群是解决这个问题的另一种方式,它允许一组服务器组在一起,像单个服务器一样分担处理一个繁重的任务,我们只需要将新的服务器加入集群中即可,对于客户来看,服务无论从连续性还是性能上都几乎没有变化,好像系统在不知不觉中完成了升级

2.2高可用性(High availability)

单一服务器的解决方案并不是一个健壮方式,因为容易出现单点失效。像银行、账单处理这样一些关键的应用程序是不能容忍哪怕是几分钟的死机。它们需要这样一些服务在任何时间都可以访问并在可预期的合理的时间周期内有响应。高可用性集群的出现是为了使集群的整体服务尽可能可用,以便考虑计算硬件和软件的易错性。如果高可用性集群中的主节点发生了故障,那么这段时间内将由次节点代替它。次节点通常是主节点的镜像,所以当它代替主节点时,它可以完全接管其身份,并且因此使系统环境对于用户是一致的。

2.3负载均衡(Load balancing)

负载均衡集群为企业需求提供了更实用的系统。如名称所暗示的,该系统使负载可以在计算机集群中尽可能平均地分摊处理。该负载可能是需要均衡的应用程序处理负载或网络流量负载。这样的系统非常适合于运行同一组应用程序的大量用户。每个节点都可以处理一部分负载,并且可以在节点之间动态分配负载,以实现平衡。

2.4高性能 (High Performance )

通常,第一种涉及为集群开发并行编程应用程序,以解决复杂的科学问题。这是并行计算的基础,尽管它不使用专门的并行超级计算机,这种超级计算机内部由十至上万个独立处理器组成。但它却使用商业系统,如通过高速连接来链接的一组单处理器或双处理器 PC,并且在公共消息传递层上进行通信以运行并行应用程序。因此,您会常常听说又有一种便宜的 Linux 超级计算机问世了。但它实际是一个计算机集群,其处理能力与真的超级计算机相等

三、为什么要进行分布式

传统的项目中,我们将各个模块放在一个系统中,系统过于庞大,开发维护困难,各个功能模块之间的耦合度增高,无法针对单个模块进行优化,也无法进行水平扩展。

四、什么是分布式

分布式是指将多台服务器集中在一起,每台服务器都实现总体中的不同业务,做不同的事情。并且每台服务器都缺一不可,如果某台服务器故障,则网站部分功能缺失,或导致整体无法运行。存在的主要作用是大幅度的提高效率,缓解服务器的访问和存储压力。
分布式系统学习(一):为什么要集群与分布式?
注意:该图中最大特点是:每个Web服务器(Tomcat)程序都负责一个网站中不同的功能,缺一不可。如果某台服务器故障,则对应的网站功能缺失,也可以导致其依赖功能甚至全部功能都不能够使用。

五、分布式和集群的关系。

在开发中我们可以将分布式和集群分开吗?
针对这个问题,我们可以根据分布式的介绍看出,其主要的功能是用了将我们的系统模块化,将系统进行解耦的,方便我们的维护和开发的,但是其并不能解决我们的并发问题,也无法保证我们的系统在服务器宕机后的正常运转。
而集群呢?其恰好弥补了分布式的缺陷,集群,就是多个服务器处理相同的业务,这在一方面可以解决或者说改善我们系统的并发问题,一方面可以解决我们服务器如果出现一定数量的宕机后,系统仍然可以正常运转。
因此我说,分布式和集群式一堆好基友,谁也离不开谁。。。。
以上图片在上传的时候出现了点问题,你懂的。。。。。。。。