增强网站吞吐量,高迸发,负载均衡。

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014559227/article/details/70284854
        第一次写文章,有很多不好的地方请多多谅解。

        出来工作几年了,再次将一些工作经验分享给大家。

        当网站访问量增大的时候提升服务器的吞吐量,以及迸发性能是很有必要的。不然会出现各种稀奇古怪的错误。可能有些小伙伴已经遇到过了吧。

        解决方案:

        一、新增一台服务器(姑且就叫文件服务器吧)

       这台服务器专门存放外部文件,如css、js、图片等外部文件,这样做的好处是当服务器响应了一个html文件给浏览器解析的时候,浏览器解析到外部文件就不会去请求服务器(也就是域名解析绑定的IP地址对应的服务器)上下载文件而是转到文件服务器上去下载文件,这样做的好处就是减少了对请求服务器的压力(每个http请求请求都会在服务器上生成一个线程去解析运行,当服务器http服务进程中线程过多,cpu调整不过来,就会崩溃出现各种错误)并且减少了请求服务器的带宽量。

        二、新增一台服务器(姑且就叫数据库服务器吧)

        一般情况下网站首先崩溃,首先出毛病的问题就在于数据库,因为对数据库的增、删、改、查等操作是需要占用机器的 I/O(读写),当 I/O  数达到一定的量,机器反应不过来,就会抛出错误,一般情况下都是数据库抛出 连接数占满  出错 或者是 I/O数占满出错。这种情况一般可以去更改数据库的最大连接数,以及将sql封装到存储过程减少数据库对sql语句的解析,以及优化sql 语句,达到提升性能的目的。但是在这里的后面我会提到负载均衡技术,所以我在这里才提出将数据库离出请求服务器单独享用一台服务器,因为请求服务器在运行的时候也是会占用I/O的,比如新增日志、读取http请求(request)、响应给服务器的response等等都会占用I/O,数据库离出去后就自己独占一台机器的I/O。

        三、新增多台服务器(负载均衡) : 多台请求服务器、多台文件服务器、多台数据库服务器

        什么意思呢?就是如果说我们的网站访问量够大,根据我们前面的解决方案依然不能解决问题,那么我们就需要去查找出问题的地方。

        (1)请求服务器出了问题

          在我们的检查当中,我发送一个http请求(request)给请求服务器,而服务器响应给了我一个空白response,而检查数据库运行情况的时候发现数据库能正常工作。并且在cmd 命令中 ping 了我们的域名也是能正常响应的,在检查我们的请求服务器上CPU、I/O的运行情况发现CPU或I/O很高,基本就能确定是请求服务器出了问题。那么我们就新增请求服务器,分摊用户请求到服务器上的压力。从一台请求服务器接受所有来自浏览器的请求,到从多台请求服务器接受来自浏览器的请求。怎么做?  很简单。

         第一,得保证多台请求服务器具有相同的业务逻辑(你就认为是多台请求服务器必须拥有相同的代码吧,最好什么都一样,也便于理解)。

         第二,多台请求服务器公用一个地址数据库(因为有的数据库Host 不是ip地址了,类似于域名解析地址xxxxxxx,当然在这里多台请求服务器也可以公用一个数据库,这就得需要你将数据库的内容转移了,不懂的数据库转移的可以搜搜度娘)保证在业务处理的时候数据的通用性,不会出现脏数据的情况。

         第三,多台请求服务器响应给浏览器的html文件,解析的外部资源最后都指向同一个地址(也就是我前面说的文件服务器)。这样做的好处在于,你不用每次更改某个css、js、图片的时候都去请求服务器上更改,直接传过去就行。

         第四,这点就很重要了,假如说我们已经准备好了多台服务器了怎么办?我的域名下面只对应了一个IP地址,怎么让用用户请求的时候对应不同的机器?并且我的网站是有session 的怎么办?来,一一为你们解答。

如果我们准备好了多台服务器怎么办?

很简单,直接在你的域名下新增解析记录,将新增的请求服务器的IP地址添加到你的解析记录下面。我举个简单的例子。

如 域名 http://www.qwe.com  对应的ip地址是

www.qwe.com     =>    192.168.0.1

现在我加了负载均衡 对应的ip地址是

www.qwe.com     =>    192.168.0.1

www.qwe.com     =>    192.168.0.2

www.qwe.com     =>    192.168.0.3

www.qwe.com     =>    192.168.0.4

........

明白了吗?做完这一步,还没完。你看下你的平台是否支持负载均衡服务,如果支持,你可以直接打开负载均衡服务器,分配每个IP的解析权重,这个权重你可以理解为解析到这个IP地址的概率,当然实际情况下不是这样的,你可以去度娘下找找相应的资料,这里我不做解释(让我偷个懒吧,有点累)。当然如果不支持也没关系的,默认就是每个IP地址的权重是一样的。


怎么让用用户请求的时候对应不同的机器?

上面就已经很清楚啦,当你请求的时候会解析到不同的IP地址。这时候可能你又会想,如果我用户每次打开网页的时候都解析到了不同的IP地址怎么办。这个你完全不用担心的,因为浏览器访问一个域名的时候会首先在他自己的缓存里去找该域名的对应IP,如果找到了就直接使用这个IP,如果没找到,就去操作系统的缓存里去寻找,找到了就使用,还没找到就去路由的缓存里面去寻找,找到了就使用,如果还没找到,就广播给DNS解析服务器由DNS响应出来,然后路由、操作系统、浏览器分别将该域名的IP地址缓存到自己的缓存区里。所以这个问题你不同担心的。


并且我的网站是有session 的怎么办?

这个问题不叫问题,上面的道理如果你懂了,就知道这不是问题。

如果你的后台处理语言是php  你大可以将session存储到数据库。我们都知道浏览器每次请求的时候都是会带着session对应的cookie过来的。这时候你又问如果两次请求同一个域名,域名所解析的ip地址不一样,那么cookie还会一样吗?告诉你是一样的。浏览器不管你域名对应的ip地址是啥,只要域名不变,cookie还在有效期内,就会将cookie传过来。当然如果你后台处理语言是Java也不怕,上面说了域名解析的ip是会缓存在本地的,你的浏览器只要请求了一个域名,那么在未来的一段时间内都会采用这个ip,如果你不放心,也可以采用memcached实现多台请求服务器共享session。


       第五、一般情况下,域名提供商针对一个域名下面解析的ip地址是有限制的。比如我现在使用的阿里云解析,他做多允许我在同一个域名下面添加10个解析,那么我想添加10台,20台,那台服务器去接收来自浏览器的请求怎么办呢?嘻嘻,可以用反向代理。就是域名解析到反向代理服务器,再由反向代理服务器将请求分发到业务服务器(就是前面我说的请求服务器)去处理响应相应的html代码给反向代理服务器,再由反向代理服务器将html代码响应给浏览器,你可能会问,那么反向道理服务器虽然不做任何处理,而是将请求转发给业务服务器,而前面说浏览器每个请求都会在服务器上生成一个线程去运行,那么反向代理服务器是否能够承受这么高的迸发呢?其实,反向代理服务器处理一个请求所消耗的资源是很小的,因为它不做任何处理,只是将请求分发给他设置的业务服务器,所以消耗不了多少资源的,如果还不行,你可以租用阿里云的反向代理器,那个能承受的迸发高,还能动态设置。


到了这里,我们多台请求服务器的运行逻辑就告一段落了,现在我们来讲解多台文件服务器。

使用多台文件服务器你最后多准备一个域名,采用上面我讲解的方法,让这个域名负载到多台文件服务器,多台文件服务器一样的文件,一样的css、一样的js、一样的图片等等等........... 可以参考上面哦!


如果现在项目准备好了,上线运行了发现,哎呀!其它什么都好,就是数据库撑不住啊。数据库老是死机怎么办呀?

这时候就做数据库集群吧,也就是多台数据库。   

名词解析:写数据库(就是专门进行增(insert)、删(delete)、改(update)的数据库) 读数据库(专门进行查(query)的数据库)

当然这得分析你的逻辑是做主(master)从(slave)数据库,还是主主数据库,还是主从数据库集群

主从数据库就是读写分离:  一台数据库主写、一台数据库主读。  由读数据库在一定时间内主动去写数据库中下载二进制文件然后同步到自己身上。一般用于新闻发布系统。

主主数据库:就是两台数据库互相读取二进制文件保存到自己身上。

主从集群:就是主主数据库集群(写数据库集群)互相读取二进制文件,读数据库集群去读取主数据库集群的二进制文件保存到自己身上。当然,读数据库  读取哪个主数据库  就得根据你自己去定义了。  这里不讲解具体的配置方案,实在是手没力气了。

最后说一下在网站配置中的小技巧。

现在绝大多数浏览器都是基于http1.1协议的   所以每次请求在request 中都有Connection:keep-alive 这个东西  它是说这个浏览器希望和服务器保持长连接,就是服务器响应给浏览器(client)后,在未来的一段时间内不会关闭这个连接,当用户下次请求的时候就不再建立新的连接,而是复用上次建立的连接,并且重新计算时间等待用户的下一次请求,当用户在配置时间内没有再次请求,就释放这个连接。

这时候会出现一个问题当我们网站配置文件中设置的keep-alive等待时间设置的过大,网站访问量又高,那么就会出现服务器连接数过多CPU维护不过来,出现网站卡死的情况。所以针对keep-alive 的等待时间得根据你的实际情况去配置一个适中的值。从而提高网站访问效率。



展开阅读全文

没有更多推荐了,返回首页