分担服务器负载的方法:分布式架构、缓存服务器

服务器

一提到服务器,我们就会想到在一个巨大的房间中堆满了各类电子元件的庞然大物,其实服务器也是计算机的一种,它只不过比普通计算机运行更快、负载更高、价格自然也就更贵。
在这里插入图片描述

服务器的作用

服务器在网络中为其它客户机(如PC机、智能手机、ATM等终端甚至是火车系统等大型设备)提供计算或者应用服务。具有高速的CPU运算能力、长时间的可靠运行、强大的I/O外部数据吞吐能力以及更好的扩展性。根据服务器所提供的服务,一般来说服务器都具备承担响应服务请求、承担服务、保障服务的能力。

服务器的组成

服务器作为电子设备,其内部的结构十分的复杂,但与普通的计算机内部结构相差不大,如:cpu、硬盘、内存,系统、系统总线等。
总的来说可以分为四类:机架式、刀片式、塔式、机柜式。其中由于塔式服务器的机箱比较大,服务器的配置也可以很高,冗余扩展更可以很齐备,所以它的应用范围非常广,应该说是使用率最高的一种服务器。
在这里插入图片描述

服务器的性能相比于我们个人使用的计算机来说其性能肯定是非常优越的,然而当服务器的访问量上升的一定规模时,其无论多么优秀的性能都会出现问题。人们首先想到的解决方法是增加服务器线路的带宽,但并不是网络变快了就能彻底解决这个问题。高速线路会传输大量的网络包,这会导致服务器的性能跟不上,尤其通过CGI等应用程序动态生成数据的情况下,对服务器的CPU的负担更重。所以人们想到通过使用多台服务器来分担负载,这种架构也就是分布式架构。

分布式架构

分布式架构对于负载的分担方法有很多种,最简单的一种方法就是采用多台服务器,减少每台服务器的访问量。假设有五台服务器,那每台服务器的访问量就会减少到五分之一,负载也就减轻了,毕竟
在这里插入图片描述

DNS服务器

要采用这样的方法,必须有一个机制将客户端发送的请求分配到每台服务器上,最简单的方法就是通过DNS服务器来分配。当访问DNS服务器时,客户端需要先向DNS服务器查询服务器的IP地址,如果在DNS服务器中填写多个名称相同的记录,则每次查询时DNS服务器都会按顺序返回不同的地址。

假如有3台服务器,则这三个IP地址按顺序循环。这种方式称为轮询(round-robin),通过这种方式可以将访问平均分配给所有的服务器。当然也有缺点,假如多台Web服务器中有一台出现了故障,这时我们希望在返回IP地址时能够跳过故障的服务器,然而普通的DNS服务器并不能确认Web服务器是否正常工作,因此即便Web服务器宕机了,它依然可能会返回这台服务器的IP地址。(现今的浏览器已经可以在访问DNS服务器返回的第一个地址失败时,能够继续尝试第二个IP地址)。

负载均衡器

为了避免出现前面的问题,可以使用一种叫做负载均衡器的设备。
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。——百度百科

首先用负载均衡器的IP地址代替Web服务器的实际地址注册到DNS服务器上。于是,客户端会认为负载均衡器就是一台Web服务器,并向其发送请求,然后由负载均衡器来判断将请求转发给哪台服务器。(转发请求消息使用的是“代理机制”,缓存服务器也使用这种机制。此外,有些负载均衡器中也内置缓存功能。负载均衡器和缓存服务器很相似,或者可以说它是由缓存服务器进一步发展而来的。)
在这里插入图片描述

如何判断将请求发送给哪台Web服务器
判断条件有很多种,根据操作是否跨多个页面,判断条件也会有所不同。

如果操作没有跨多个页面,则可以根据Web服务器的负载状况来进行判断。负载均衡器可以定期采集Web服务器的CPU、内存使用率,并根据这些数据判断服务器的负载状况,也可以向Web服务器发送测试包,根据响应所需的时间来判断负载状况。还有一种方案是不去查询服务器的负载,而是根据事先设置的服务器性能指数,按比例来分配请求。

当操作跨多个页面时,则不考虑Web服务器的负载,而是必须将请求发送到同一台Web服务器上。要实现这一点,我们必须能判断一个操作是否跨了多个页面。一种方式是可以在发送表单数据时在里面加上用来表示关联的信息,或者是对HTTP规格进行扩展,在HTTP头部字段中加上用来判断相关性的信息。这样,负载均衡器就可以通过这些信息来判断,将一系列相关的请求发送到同一台Web服务器,对于不相关的请求则发送到负载较低的服务器了。

缓存服务器

除了使用多台功能相同的Web服务器分担负载之外,也可以将整个系统按功能分成不同的服务器,如Web服务器、数据库服务器(也可以将两者结合起来使用)。缓存服务器就是一种按功能来分担负载的方法。

缓存指的是将需要频繁访问的网络内容存放在离用户较近、访问速度更快的系统中,以提高内容访问速度的一种技术。缓存服务器就是存放频繁访问内容的服务器。

缓存服务器是一台通过代理机制对数据进行缓存的服务器。代理介于Web服务器和客户端之间,具有对Web服务器访问进行中转的功能。当进行中转时,它可以将Web服务器返回的数据保存在磁盘中,并可以代替Web服务器将磁盘中的数据返回给客户端,这种保存的数据就是缓存。不过,如果在缓存了数据之后,Web服务器更新了数据,那么缓存的数据就不能使用了,因此缓存并不是永久可用的。

缓存服务器的工作原理

缓存服务器和负载均衡器一样,需要代替Web服务器被注册到DNS服务器中。然后客户端会向缓存服务器发送HTTP请求消息,从客户端来看,缓存服务器就相当于所要访问的web服务器。之后缓存服务器会检查请求消息的内容,查看请求的数据是否已经被保存在缓存中。

如果没有,缓存服务器会在HTTP头部字段中添加一个Via字段,表示这个消息经过缓存服务器转发,然后根据请求消息的URL转发给Web服务器。这个过程中,从Web服务器的角度来看,缓存服务器就相当于客户端了,接收消息的过程也是以客户端的身份来完成的。然后缓存服务器会将Web服务器发过来的消息转发给客户端,并将响应消息保存到缓存中,并记录保存的时间。这种在客户端和Web服务器之间充当中间人的方式就是代理的基本原理。
在这里插入图片描述

如果有,缓存服务器会添加另一个头部字段If-Modified-Since将请求转发给Web服务器,询问用户请求的数据是否发生了变化,Web服务器会根据If-Modified-Since的值与服务器上的页面数据的最后更新时间进行比较,如果在指定时间内没有变化,就会返回没有变化的响应消息,缓存服务器会将缓存中的数据返回给客户端。
在这里插入图片描述
也许有人会觉得这不还是要跟服务器进行交互么,认为对分担服务器的负载并没有效果。其实相比于返回数据,服务器只需要查询一下数据的最后更新时间,返回的消息也比较短,已经可以一定程度上减少负担了,这就好比压死骆驼身上的最后一根稻草,这样处理的话,至少这根稻草是被我们拿掉了。

猜你喜欢

转载自blog.csdn.net/weixin_45797022/article/details/105760598