




已阅读5页,还剩61页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络服务的高并发请求处理的实现和优化摘要在互联网飞速发展的今天,互联网公司在如何处理海量用户的访问时都会考虑分布式系统。但是要如何去公平分配分布式系统中的服务器资源呢,一直以来都是一个问题?负载均衡技术则是如何分配服务器资源的关键方法。负载均衡可以将高并发的请求分流到我们的服务器集群之中,使每台服务器都可以在自己的负载范围之内快速的处理请求并且响应。其中,如何进行请求的分配则是一个非常重要的问题。在现实中采用的负载均衡算法,不但可以保证请求顺利的被服务器执行,而且往往可以充分的利用集群中服务器的资源,使得请求的响应时间最短,从而提升用户体验。在过去的负载均衡算法中,往往多多少少存在一些性能问题。本文在分析与总结过去常见的负载均衡算法的优缺点之后,并结合现有的一些预测模型,提出一种基于反向传播模型的负载均衡算法。本文的主要贡献:1.提出了基于反向模型的负载均衡算法。首先从现在常见的基于预测的负载均衡算法开始研究,讨论他们的优点与缺点。然后,针对缺点,结合现有模型,提出解决方法。更重要的是,最后根据仿真,从请求响应时间、请求失败数目等关键变量验证基于反向传播模型的负载均衡算法的优势。2.利用session集中存储来验证性的解决session不一致的问题。总结业界较为常见的解决方案,并且会采用session集中存储的方式来验证方案的有效性。关键字:高并发 负载均衡 反向传播 Session共享 THE IMPLEMENTATION AND OPTIMIZATION OF HIGH CONCURRENT REQUEST PROCESSING IN NETWORK SERVICEABSTRACTIn the rapid development of the Internet today,The Internet company will use distributed systems to deal with the massive amounts of user access.But it is a problem that how to distribute the server resources fairly in the distributed system.Load balancing technology is the key method to allocate server resources.Load balancing can split high concurrent requests into our server cluster so that each server can handle requests and respond quickly.Among them, how to allocate the request is a very important problem.Using load balancing algorithm, not only can ensure the smooth implementation of the server, but also can make full use of the resources of the server in the cluster, so that the response time is the shortest, so as to enhance the user experience.There are more or less problems in the load balancing algorithm of past.After analyzing and summarizing the advantages and disadvantages of the those load balancing algorithms, this paper proposes a load balancing algorithm based on the back propagation model.The main contribution of this paper:1.The author proposed a load balancing algorithm based on the back propagation model.First of all,we will take a study on the present load balancing algorithm based on some prediction model and discuss their advantages and disadvantages. Then, according to the shortcomings of the existing model, wo will propose a method to solve.Even more importantly, we will verify the advantages of load balancing algorithm based on the back propagation model from the key variables such as the response time and the number of requests failed.2.We use session to concentrate storage to verify the session problem and summarize the industrys common solutions, and will use the session to concentrate storage to verify the effectiveness of the program.KEY WORDS: High concurrency Load Balancing Backward Propagation Session sharing第一章 绪论 目录第一章 绪论41.1选题背景及意义41.2工作内容及成果51.3论文组织结构6第二章 网络服务的高并发请求的实现72.1 网络服务的高并发请求的相关技术概述72.1.1 负载均衡技术的研究现状422.1.2 集群中Session的处理策略502.2 网络服务的高并发的请求处理的实现522.2.1 网络服务的高并发的请求处理的系统设计522.2.2 网络服务的高并发的请求处理的系统实现532.3本章小结56第三章 网络服务的高并发请求的优化573.1网络服务的高并发请求的相关技术优化573.1.1 反向传播模型573.1.2 基于反向传播模型的负载均衡算法设计603.1.3 基于Redis对Session共享的处理方案633.2 网络服务的高并发请求的系统优化的实现653.2.1 Linux环境下服务器负载信息的获取653.2.2 负载信息的传递683.2.3 利用url拼接的方式传递时间戳693.3 基于Nginx实现基于预测的负载均衡器实现703.3.1 Nginx介绍703.3.2 Nginx中对于基本反向传播模型的负载均衡模块的实现723.5本章小结80第四章 优化结果测试与分析814.1 测试环境814.2性能测试824.2.1 并发数与系统负载之间的关系824.2.2 基于反向传播模型的负载均衡算法与常见的负载均衡算法之间性能比较86第五章 总结与展望895.1 本文总结895.2下一步研究89参考文献91第一章 绪论1.1选题背景及意义随着移动互联网内容的不断丰富,上网门槛越来越低,越来越多的人开始享用移动互联网为他们带来的便捷。根据中国互联网信息中心CNNIC在2014年7月发布的34次调查报告显示,我国网民规模达6.32亿,其中手机网民达5.27亿。面对如此多人数的移动互联网用户,移动互联网内容提供商如何做到在某一时间段同时处理大量用户请求而不宕机,一直以来都是一个热点问题。事实上,移动互联网在处理高并发请求的问题与传统互联网处理高并发请求的问题本质上都是一样的。因此,在处理移动互联网的高并发采用的方法就是传统互联网所采用的方法。但是这并不代表现阶段就有一种通用且成熟的技术完美的解决高并发请求带来的问题,因为在传统的互联网中处理高并发的请求的解决方法也是在不断的发展和完善的。在国内外对解决高并发问题目前研究的最好的,暂时应该是阿里巴巴了,为了改善其旗下网站淘宝网的高并发处理能力,他们通过在Nginx的基础上,针对大访问量网站的需求,添加了许多高级功能和特色,并且还有自主研发的分布式文件系统TFS等。这些成果已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。然而,很少有公司在规模和需求上达到淘宝的数量。并且,对于中小型公司而言,重新实现某种框架或者新的算法,不论是从水平和效益上看都是不现实的。但是我们可以在前人所提出的框架或者算法上进行优化,提高其并发的数量。其中Nginx是一款开源的,高性能的HTTP和反向代理服务器,其出色的高并发性能处理能力在默认的情况下可以处理高达4000050000的并发数等等,远远高于Apache等传统的web服务器。因此,在中小型的企业中往往利用Nginx作为其web服务器。然而,其默认的配置的上限也是一种限制,为了解决更多的并发数目,不断优化Nginx从而调高其并发的上限,也是中小型企业需要不断研究的目标。本课题依托于一种开源的Web服务器Nginx来处理高并发请求。本课题会对Nginx的配置进行调优并深入到Nginx源码的内部,对Nginx已经相关系统进行优化,最后以实际的压力测试数据来证实优化的可行性。 1.2工作内容及成果本文研究了网络请求在分发时的负载均衡调度策略以及在在实际开发中因为集群和动态网页产生的session不一致的问题。探究了网络请求在分发时的静态负载均衡算法、动态负载均衡算法等,介绍了反向传播模型,并且在此基础上提出了基于反向传播模型的负载均衡算法。通过搭建一个小型的集群系统完成了对基于反向传播模型的负载均衡算法的验证,并且探讨了现在业界对于session不一致问题的解决方案,验证性的用session几种存储的方式解决session不一致的问题。本文的主要工作有:1. 调研了现阶段关于网络请求分发时负载均衡技术的研究现状。首先介绍了负载均衡的概念,总结了当前关于负载均衡的研究现状,对比分析了它们之间的优缺点。并且总结了在使用集群时出现的session不一致的的解决方法,比较分析了他们之间的优缺点。实现了基于iphash方法的负载均衡策略。2. 介绍了反向传播模型的概念,并且针对此模型,提出了一种基于反向传播模型的负载均衡算法。并且根据此算法修改了Nginx的负载均衡模块,完成了此算法的实现,并且针对于集群中的session一致性问题,验证性的采用redis实现了session集中存储来解决。设计出系统并完成搭建,为后续测试打下基础。3. 采用业界常用的压力测试工具LoadRunner对基于iphash的负载均衡算法和基于反向传播模型的负载均衡算法进行压力测试。并且根据测试的结果绘制出表格,进行分析。1.3论文组织结构本论文主要提出了基于生态模型的虚拟网络资源分配算法,并进行了仿真及对比分析。具体章节安排如下:第1章 绪论:阐述课题研究背景,包括研究负载均衡算法的必要性以及意义。同时验证性的利用缓存数据库解决集群中session不一致的问题。第2章 网络服务高并发的请求实现:介绍负载均衡的定义和研究现状,描述了目前较为常用的负载均衡技术,并且阐述了他们之间的优缺点;对于常见的session一致性问题,列举出业界常见的解决方案。针对上述的两个主要问题,采用Nginx对请求进行负载均衡调度,采用Redis对session进行存储。实现一种解决高并发问题的系统架构。第三章 网络服务高并发的请求优化:提出一种基于反向传播模型的负载均衡算法。利用反向传播模型来不断的修改当前函数中负载因子的数据,使得负载均衡器对下一次请求的响应时间的预测值尽可能的准确。并且针对session一致性的问题使用hash的方法来解决单个缓存数据库的容量上限问题。第四章 优化结果与分析,针对第二章的实现方案和第三章的优化方案,我们将分别获取他们在高并发情况下的处理请求数目的能力。并且对比分析数据,得出客观的结果。第五章 总结与展望:总结论文成果和创新点,同时指出下一步工作方向。3总结与展望络服务的高并发请求的实现第2章 网络服务的高并发请求的实现随着国内互联网技术越来越普及,互联网用户数目越来越庞大,越来越多的站点或者app都开始面临在大规模用户下,如何通过不断的优化网络、服务器等,来提高公司服务器的响应能力,同时这也是现在国内外各个互联网公司的一直以来都在研究的问题。2.1 网络服务的高并发请求的相关技术概述在互联网发展的初期,由于计算机的不普及以及网站的稀少,从而使计算机的主要功能仅限与简单的文件传送与一些复杂的计算。少部分网站的建设,其主要也是用于发布消息的静态html页面,它的整个系统搭建也是最为传统和简单的单台服务器情况,其系统搭建如下: 图2.1 传统的单服务器处理方式如图2.1所示,传统的服务器架构只有一台服务器,所有用户的请求也都只发到此服务器上,该服务器接收到用户的请求之后在进行处理,然后将处理的结果返还给用户。这样做的好处十分明显,系统搭建简单,方便。虽然在我们平常开发的时候,我们自己的开发机通常都是此种架构,但是在真正的商业网站中,这种原始的架构早已经被淘汰。因为当大量的用户同时访问此服务器时,会造成服务器宕机,无法处理任何请求。通常情况下,我们会上网会遇到500错误,其实有时候就是因为服务器宕机无法处理请求导致的。服务器产生的500错误如下图所示:图2.2 内部500错误在互联网的世界里面,业务的增长与技术的更新从来都是互相促进的。当互联网中的业务量逐渐的由几十、几百到现在几百万、几千万,人们发现传统的互联网系统架构早已不能支持如此高的并发,于是处理请求的服务器的规模就从单台变成了多台。比如下面的系统架构方式图2.3 采用DNS分配处理服务器ip图2.3是一种针对单台服务器处理能力不足而提出的一种解决方法10。它的工作流程是当用户需要向服务器发送请求时,首先需要从DNS服务器获取处理此请求的ip地址,随后请求的按照DNS服务器来送过来的服务器的ip地址,用户在将请求转发到实际的服务器上。这样的请求方式,优点和缺点都是十分明显的。优点就是这样的架构方式使系统有了一定的扩展性,使整个系统从过去的单台服务器变为现在经常使用的集群系统,使得系统的并发能力大幅度上升。但是,用户的每一次请求实际上都演化为了两次请求,一次请求DNS获取服务器ip,一次处理实际的请求。并且由于DNS服务器与集群分开,导致在问题排查、系统管理方面都带来了一定的难度。随着集群的规模越来越大,人们发现遇到的问题愈来愈多,比如说:互联网业务已经不仅仅之前的消息发布等功能。针对于视频、音乐、个人中心等新业务的诉求,用来暂时的页面也从之前的静态页面(诸如html)逐步的向动态页面(诸如jsp等)演进,期间也出现许多以往静态页面不会出现的问题,比如说分布式锁、分布式事务、session、cookie等问题,除此之外当集群的服务器太多,如何将请求分配到负载最轻的服务器上,此时就需要引进一些新的技术与思想来保证整个系统的稳定性与可靠性。其中被人们研究的较多的是负载均衡技术与session共享技术。2.1.1 负载均衡技术的研究现状负载均衡25,英文名称为Load Balance, 根据维基百科中的解释,它是建立在现有网络结构之上,将多个请求分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务,提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。从集群的概念提出之时,就已经提出了负载均衡的概念。经过若干年的发展,负载均衡技术在不断的发展,由开始静态负载均衡策略,到动态负载均衡策略,再到现在基于预测的负载均衡,负载均衡技术一直在不断的发展着。下来我们就看看现在负载均衡技术研究的现状。1.静态负载均衡算法静态负载均衡方法是最原始的方法,它的优点很明显,简单易配置,下面以几种常用的静态负载均衡为例,进行分析负载方式时间参考文献作者轮询200410、11Igor Sysoev加权200410、11Igor SysoevIp_hash200410、11Igor Sysoevurl_hash200410、11Igor Sysoev1)轮询1011所谓的轮询是指,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。轮询调度最大的优点是简单易行,当所有的服务器处理拥有相同的任务处理能力而且他们可处理任务的能力相似时,其效率很高。但是这种轮训算法的缺点也十分明显,服务器之间处理任务的能力不可能完全相同,在某时间点每个服务器实时处理的任务数、请求响应返回时间也不相等,资源不能得到充分的利用。鉴于此,下面的加权轮询做了相应的改进。2)加权轮询1011根据服务器性能的不同,为每台服务器为指定轮询权值,服务器的性能越好,权值越大,分配到的访问几率越高。此算法主要用于后台服务器性能不均的情况下。服务器的性能我们提前是知道的,对于此我们可以提前给每一个服务器都赋予一个正整数权值。在负载均衡器遇到请求时,会将请求优先分配给权值大的服务器,让每台服务器处理请求的的数目趋向于他们权值的比例。伪代码:假设有一组服务器S = S0, S1, , ,W(Si)则表示第i台服务器的权值,而变量i的含义是上一次选择的服务器的下标,cw变量的意思是指本次调度的权值,max(S)表示整个服务器中的最大权值,gcd(S)代表了所有服务器权值的最大公约数。其中变量i和cw的初始值都是0;while (true) if (i = 0) cw = cw - gcd(S);if (cw = cw)return Si;这种算法虽然很好的解决轮询调度中没有考虑不同服务器的处理能力的差异,但是它仍然存在缺点:不能实时的根据服务器的状态来分发请求。比如,当某个服务器正在处理一个复杂的请求而一直没有响应的时候,Nginx会将一个新的请求配该节点,造成资源分配不均匀。 3)ip_hash1011我们知道,我们每个人在上网时候都会被分配一个ip地址,服务器在处理请求的时候,都能获取到用户的ip地址,基于此有人提出了基于ip地址的负载均衡算法。在此算法中,我们使用IPV4的前3个八进制位或者所有的IPV6地址被用作一个hash key,通过某些哈希算法将ip映射为某个确定的数值。这个方法确保了相同客户端的请求一直发送到相同的服务器上(除非这个服务器被认为是停机)。伪代码:假设有一组服务器S = S0, S1, ., Sn-1,W(Si)还是一样代表第i个服务器的权值。C(Si)用来表示第i个服务器Si的连接数。ServerNode是一个哈希表。算法的执行顺序是:1.将服务器按照顺序循环的放到servernode中,如果连接此服务器的数目比其权值的两倍还要大,那么就意味这服务器已经超载了。n = ServerNodehashkey(dest_ip);if (n is dead) OR(W(n) = 0) OR (C(n) 2*W(n) thenreturn NULL;return n;通常情况下,采用iphash还方便的解决了一个集群系统经常出现的session一致性问题(关于session一致性问题下文会有具体讲述)。总的来讲,iphash是一种简单的、扩展性良好的负载均衡算法。因此,很多公司在刚开始的时候都采用此方式来对系统进行扩展。4)url_hash1011除了上面所提到的iphash,此外还有一种urlhash的方式来对请求进行转发。用户的每次请求其实就是对一个url进行请求,在这里无论是动态网页还是静态网页,都会有固定的url,负载均衡器会对每次的url进行hash,将相同的请求映射到相同的服务器上。这种做法在平常的使用中时,是不推荐使用的。因为,采用url_hash时,会造成处理某个常用的url的服务器负载一直过高,而处理某个不常用的url的服务器负载一直过低。造成大量的浪费。根据上面介绍的几种静态负载均衡算法来看,大多数静态负载均衡算法无法有效的充分的去利用后台服务器的资源,导致服务器资源的大量浪费。即使是现在仍被使用的iphash,也无法有效的解决掉这个问题。但是iphash可以解决其余静态负载均衡无法处理session一致性的问题,这也是他能现在还能被使用的主要原因。针对于静态负载均衡无法有效使用服务器资源,人们开始提出一些动态的负载均衡算法。2.动态负载均衡算法根据上面对于常见的静态负载均衡算法的分析,我们可以清楚的知道静态负载均衡算法的弊病是无法实时的了解到集群中每台服务器当前的负载情况,从而无法将请求转发的负载最低的服务器上。针对此问题,许多人提出了动态负载均衡的概念。希望可以在负载均衡器在做决策的时候,通过掌握当前各个服务器的实时状态,从而正确的转发请求。负载方式时间参考文献作者最小连接调度200011章文嵩加权最小连接调度2000,,201311、12章文嵩,Jrg Zinke,Bettina Schnor基于任务类型划分2013、20148、9王红斌、皇甫宁基于响应时间2013、1、7Xianhua Xu1) 最小连接调度算法(Least-Connection Scheduling)11最小连接调度算法是一种动态的调度算法。它的核心思想是将新接受到的请求转发给当前服务器连接数目最小的服务器上。这样做的就是将当前服务器的连接数当作服务器的负载状况。连接数越多,说明服务器负载越重,反之,说明服务器的负载越轻。为了实现这种算法,我们需要在负载均衡器端记录每台服务器的连接数。当负载均衡器为某台服务器分发一个请求时,那么该服务器对应的连接数就要加一,如果此服务器处理完请求,那么该服务器的连接数要减去一。最小连接调度算法的伪代码如下: 伪代码:假设有一组服务器S = S0, S1, ., Sn-1,W(Si)表示服务器Si的权值,C(Si)表示服务器Si的当前连接数。for (m = 0; m 0) for (i = m+1; i n; i+) if (W(Si) = 0)continue;if (C(Si) C(Sm)m = i;return Sm;最小连接调度算法的优点是当各个服务器结点的处理能力基本相同时,该算法可以将负载变化很大的请求相对平均地分发到各个服务器结点上,同一类型的需要较长的处理时间的请求不会被转发同一台后端服务器上。当然,最小连接调度算法也存在一些问题。最小连接调度在缺点就是对于不同系统的差异化的负载没有深入的考虑。首先我们知道,不同的电脑的cpu、内存、硬盘等等都是不一样的。这也意味着每台服务器的性能是有所不同的。在最小连接调度中如果出现下面这种情况,就会出现很大的问题:假设某台服务器的连接数很小,但是此服务器的硬件配置不好,在连接数很小的情况下服务器就已经到达的他能处理的上限,如果此时依旧把新的任务分发给此服务器,那么就会使服务器宕机,出现问题。2) 加权最小连接调度(Weighted Least-Connection Scheduling)1112为了改进加权轮询算法中的出现的问题,加权轮询算法加入考虑实际服务器处理能力的因素,也给每台服务器赋予一个整型权值作为衡量标准。在分配用户请求时,负载均衡器根据当前实际服务器的连接数目与其权值的比值,将用户请求分配给连接数与权值比值最少的服务器。算法伪代码如下所示:伪代码:假设有一组服务器S = S0, S1, ., Sn-1,W(Si)表示服务器Si的权值,C(Si)表示服务器Si的当前连接数。所有服务器当前连接数的总和为CSUM = C(Si) (i=0, 1, . , n-1)。当前的新连接请求会被发送服务器Sm,当且仅当服务器Sm满足以下条件 (C(Sm) / CSUM)/ W(Sm) = min (C(Si) / CSUM) / W(Si) (i=0, 1, . , n-1)其中W(Si)不为零。因为CSUM在这一轮查找中是个常数,所以判断条件可以简化为 C(Sm) / W(Sm) = min C(Si) / W(Si) (i=0, 1, . , n-1) 其中W(Si)不为零for (m = 0; m 0) for (i = m+1; i C(Si)*W(Sm)m = i;return Sm;return NULL;加权最小连接调度算法既考虑了系统各个实际服务器处理能力的不同,又考虑了各个实际服务器的实时状态信息,因此该算法的复杂度大于前面所述的几种算法。虽然加权最小连接调度算法改善了的负载均衡算法,并且在一定程度上提高了整个服务器的性能,并且减少了服务器出现宕机的概率,使得系统地稳定性进一步提高, 但是有一个值得考虑的是,加权最小连接调度算法中权值设置合理性的问题。我们知道实际计算机性能很难用一个数据来表示,这是因为影响到服务器性能的因素实在太多。因此在实际开发中,权值的设置主要通过经验来进行设置的。但是根据经验预先设定的权值是否真正与各服务器实际处理能力匹配呢?同时,该算法以连接数为粒度来衡量服务器的实际负载状况也显得不够全面。3)基于内容类型划分的负载均衡算法(Locality aware request distribution)89基于内容类型划分的负载均衡算法是只对于请求的内容进行分类。我们知道,不同的请求对所需要的负载资源有所不同。有些请求仅仅需要对数据库进行增删改插需要io资源,有的请求需要进行大规模的计算需要cpu资源等。基于内容的负载均衡算法的调度过程是在前端负载均衡器内保存了请求内容到服务器的对映信息,请求内容是局部性相关的,同一类型的请求会尽量被分配到同一台服务器,并且会根据负载周期性的更新对映关系来解决服务器倾斜的问题。同时基于内容类型划分的负载均衡算法也考虑了运行过程中的服务器状态,当后端服务器的连接数超过阈值时,负载均衡器将重新调正更新对映关系,虽然基于内容类型划分的负载均衡算法进行了服务分区,但是后端服务器还是需要有全部的程序内容,因为这个分区是逻辑的,当超过设定的阈值后,负载均衡器还是会将请求分发给服务器群中的其他任意一台当前负载较轻的服务器。事实上局部性在目前的负载均衡调度策略已不是一个重点需要考虑的问题,因为通常静态文件都会使用CDN(内容分发)技术,这种技术根据用户的IP地址让用户去连接当前网络运营商最近最快的节点去获得内容,这项技术不仅仅用于静态文件,包括视频直播加速等技术中都有广泛应用。另一方面LARD调度策略还是使用了后端服务器的当前处理的连接数作为Web服务器性能评价的指标,这同样存在请求内容的差异性问题,某些请求只需要较小的资源,而某些需要较复杂的运算,因此请求还是会向某些服务器进行倾斜,导致负载不均衡。4)基于响应时间的负载均衡算法17近年来有不少学者开始将响应时间作为评价服务器性能的唯一标准。基于响应时间的负载均衡算法就是将服务器处理请求的时间返还给负载均衡器,负载均衡器接受到时间后,根据平均响应时间来评价后端服务器处理该类请求的能力。选取响应时间最短的服务器作为下一次分发请求的服务器。伪代码:假设有一组服务器S=S0,S1,.,Sn-1,T(si)表示第i台服务器Si在处理上一次请求时所花费的时间。 Int result = T(s0); For ( m = 0;m n; m+ ) If(result R (其中T是时域空间,S是抽样空间,R是集)作时间序列分析,并且对该随机过程所产生的有限时间序列 t = 1,.,T进行统计,通过模型化分析得到条件密度(2-2)来评估当前变量值。 (2-3),其中是历史过程已知情况下可以预测的部分,是指不能正确预测的部分,也是我们经常说的误差。在观察过服务器负载的变化图之后,我们发现其实我们可以将服务器的负载的变化视为一种时间序列过程,因为负载的变化是与时间有极大的关联性。因此我们觉得采用时间序列法去预测服务器的负载是十分合适的。而在现实中,在负载预测领域之内,时间序列法也的的确确的广泛被使用。在时间序列法中最典型的就是时间序列预测模型。在这里我们首先要提到一个平稳时间序列的概念。所谓的平稳时间序列是指,在一个有限的时间序列中,如果此序列的均值都是常数,并且协方差函数不会随着时间的变化而变法的话,我们称它为平稳时间序列。即:,否则称为非平稳序列。在实际的负载均衡算法中,很少采用此模型,因为请求的产生是完全随机,所以相对于负载均衡来说,此预测算法并不是十分合适。3回归分析法57假如变量Y与另外P个变量x1,x2,.,xp的内在联系是线性的,它的第a次试验数据是 (2-4)那么这一组数据可以假设有如下的结构式: (2-5) 其中是p+1个待估计的参数,是p个可以控制的一般变量,是n个相互独立且服从同一正态分布N(0,a)的随机变量,这就是多元线性回归的数学模型。这么一来,多元线性回归的数学模型可以写成如下表达式:(2-6)其中X是N维随机向量,要求的是的值。为了估计的数值,在这里采用最小二乘法,设分别是参数的最小二乘估计,那么它与之对应的回归方程为:(2-7)但是这种方法必须提前知道所有服务器在任意并发量下请求的响应时间,否则就无法正确的计算出回归方程。整个过程过于繁杂。上面介绍了一些常见的基于预测模型的负载均衡算法,各有利弊。我们发现越是好的算法的模型在操作步骤上就越是复杂。我们在采用某种算法之前,必须根据实际的环境进行分析然后进行使用。2.1.2 集群中Session的处理策略在集群系统中,除了负载均衡的问题之外,还有一个session一致性的问题。下来,我们来系统的讲解关于session的问题。 Session的概念Session的在计算机中被称为回话控制。它的出现是为了满足人们对互联网日益增长的需要的。我们知道,现在当我们登录某些网页时候,在一段时间内无须再次登录就可以直接进行登录之后的操作。这其实就是session的功劳。Session在运行时需要包括如下的部分:特定的客户端、特定的服务器和不中断的操作时间。假设我们有两个服务器和两个客户端,客户端A与服务器A之间建立起来色session与客户端A与服务器B之间建立起来的session就是不同的session;同时,客户端A与服务器A建立起来的session与客户端B与服务器A建立起来的session也是不同的session。Session 通常用于存储需要在整个用户会话过程中保持其状态的信息,例如登录信息或用户浏览 Web应用程序时需要的其它信息。存储只需要在页重新加载过程中或按功能分组的一组页之间保持其状态的对象。通常情况下,session的信息保存在具体的服务器上,当我们的应用服务器从一台变到两台后,我们就会遇到Session的问题了。具体是指什么问题呢?当一个带有会话标识http清求到了web服务器后,需要在http请求的处理过程中找到对应的回话回话数据Session,假设第一次请求被转发到服务器A并且将session保存在服务器A上,第二次请求如果被转发到服务器B上,那么系统就无法获知之前保存的用户的状态,此时就需要用户重新登录,然后将session信息保存到服务器B上。加入两次session信息之间保存的某些信息不同,那么就会导致数据不同步等错误。那么,应该如何解决这个问题呢? 常见的处理Session的方式1. Session复制2024Session复制是指将session的信息复制到所有的服务器之中。具体做法是指当客户端A与服务器A之间建立了session,那么其余服务器会通过复制的手段将此session保存到自己的服务器上。那么此时客户端A与所有服务器就可以进程正常的交互了。此时就不要求负载均衡器把同一个用户的的多次请求转发到同一个后台服务器上了。一般的应用容器都支持(包括了商业的和开源的)Session 复制方式,不过这个方案本身也有问题,而且在一些场景下,问题非常严重。我们来看一下这些问题。首先,在同步Session 数据时势必会造成了网络带宽的开销,而已如果某台服务器的Session 数据有变化,那么就必须将数据更新同步到其余的服务器上。服务器的数目越多,那么同步起来就越加繁杂,网络带宽开销就越大。其次,每台服务器都要保存所有的Session 数据,如果整个集群的Session 数目很多(很多人在同时访问网站)的话,每台服务器就会花掉大量的内存空间来存储session,造成内存资源的严重浪费。不过,这个方案不适合集群机器数多的场景。如果只有几台机器,用这个方案是可以的。2.Session数据集中存储2024Session数据的集中存储方案是指:单独的拿出一台服务器用来存储所有的session信息,当不同的后台再处理请求时,都会先去存储session的服务器中取出需要的session,然后在进行处理。可以知道,当请求经过负载均衡器转发之后,不会被固定到同一台后台服务器之上,这一点与session复制的方式相同。但是,不同的是,session的数据不再直接保存到处理请求的服务器之上,而是需要传送到单独出来保存session信息的服务器上。这样一来,比起session复制就少了服务器之间同步、服务器内存不足等等许多复杂的操作。因此此方案也在业界广泛的被使用。然而,这个方案也并不是完美的,它也存在一些问题,比如说: 首先,在读写Session数据引入了网络操作,与之前的读取保存在本机的方式来比,就一定会出现时延、以及一些不稳定性。并且在系统的健壮性方面,也存在问题。如果存储session的服务器出现宕机,那么整个系统就宕机了。如果集中存储Session的机器或者集群有问题,就会影响我们的应用。其次,我们知道,服务器的内存容量是有限的,当Session数比较多的时候,就会引起内存不足等问题。如何完美的扩展容量也是需要考虑的一个问题。3.Cookie Based2024 Cookie Based方案是也是一个方案,并且与之前提到的两个方案有一些区别。和Session复制以及Session数据集中管理的方案不同,这个方案是通过Cookie来传递Session数据的。那么什么是Cookie呢?与Session一样,Cookie常被用于保存用户的一些信息。但是不同点是Cookie将一些用户的信息存储在客户端,而session却常用于存在服务器。因此session中的信息要比cookie安全很多。我们可以考虑将Session数据放在Cookie中,然后在后台服务器正式处理请求时,将session信息从cookie中取出。相对于前面的集中存储、这个方案没有依赖外部的一个存储系统,也就不会出现从外部系统获取、写入Session数据的网络时延以及不稳定性了。不过此方案依然存在不足:首先是Cookie长度的限制。Cookie的整个长度是有限制的,而这也会限制Session数据的长度,然而在实际的开发中session的长度或者会很长。其次安全性。我们之前提到过,session常被用于存储在服务器端,用户是接触不到的。但是,cookie却将信息存储在客户端,从而导致这些数据对于所有人都可见,这是很不安全的。虽然有人提出过,对cookie中的数据进行加密,但是还是有可能被破解,物理上不能接触,这才是最安全的。还有带宽消耗的问题。这里指的不是内部Web服务器之间的带宽消耗,而是当我们把session数据保存到cookie中后,当用户量很低时,效果获取比较好,但是用户量很高时,每次http请求和响应都带有Session数据,这些网络开销往往变成很大的负担。2.2 网络服务的高并发的请求处理的实现在业界设计系统时,往往有各种各样的处理方法,在这里笔者以实习期间公司所架构的系统为例,进行实现。2.2.1 网络服务的高并发的请求处理的系统设计根据上面对处理网络服务的高并发的请求的实现中两个关键技术的描述,我们大体上知道在高并发的情况下,我们主要的问题是按照一定的策略,将请求转发到后台服务器的集群之上,并且还要合理的处理集群带来的session问题。对于一般的公司来讲,可以采取iphash的方式,其优点十分明显:由于采取iphash,所以不担心session的问题,因为相同的ip都会被hash到同一台服务器,只需要针对ip的hash值做好转发,便可实现负载均衡。整个系统的架构框图:图2.6 一种基于iphash负载均衡算法的系统架构整个系统的架构图2.6如上所示,所有用户的请求首先进过防火墙,当用户的ip为白名单用户时,请求将会到达负载均衡器,否则,请求将会被拒绝处理。当负载均衡器接受到用户发来的请求时,始终按照一定的方式进行hash,并按照hash后的结果发到对应的服务器上,这样一来可以确保同一个用户的请求始终可以发往同一台服务器上。只要此服务器保存了用户的session,那么在以后的处理中,直接取出之前保存的session信息即可。此后,服务器直接与数据库进行交互,进行相应的逻辑操作, 将结果返回给用户。2.2.2 网络服务的高并发的请求处理的系统实现在实际的开发中,许多开源社区已经有很多的关于负载均衡的开源框架,比如LVS(Linux Virtual Server)、Nginx等。再此我们选用Nginx作为负载均衡层。Nginx 2526(engine x) 是一个高性能的 HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP 代理服务器。他处理高并发的能力远远高于传统的Apache等web 服务器,因此收到了业界的好评和广泛的使用。 Nginx的大多数功能已经按照模块化的形式被实现(包括负载均衡模块),它可配置性很强,可以按预先定义的方式进行做负载均衡,默认对后端有健康检查的能力。后端机器少的情况下负载均衡能力表现好。其优点主要有:(1)性能优秀,配置简单,支持高并发并且内存消耗很少。根绝官方文档给出的测试报告,Nginx可以支撑5万左右的并发连接。在实际开发使用中,经过的调优的Nginx甚至可以达到8万左右的并发。(2)使用Nginx的成本很低,因为它是一款优秀的开源软件,因此我们可以免费的使用它。并且可以根据自己的需要修改其中的源代码来本地化定制。在使用Nginx之前我们首先需要下载并且配置Nginx.conf文件。首先去Nginx的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年慢性疼痛患者阿片类药物管理护理查房
- 部队个人防护课件
- 基于摩擦学-热传导多物理场耦合的针齿销热变形补偿控制策略探索
- 唇系带附丽矫正中的伦理争议与行业规范冲突
- 可降解涂层技术对海洋环境螺栓防腐性能的颠覆性创新
- 双碳目标下废旧金属切割回收工艺路线创新
- 医疗大数据平台与设备数据接口的标准化兼容性困境
- 2025年度贵州省凯里市专业技术人员继续教育公需科目试卷及答案
- 基于微课的在线教育问题集开发与学习效果分析-洞察及研究
- 2024年高导磁、高功率软磁铁氧体项目投资申请报告代可行性研究报告
- 2025年人社局编外考试题库及答案
- 木制品厂安全生产培训课件
- 世纪英才教程课件
- 感恩教师节幼儿园教师节
- 小学科学新教科版三年级上册全册教案(2025秋新版)
- 病人出入院的护理课件
- 电缆安全小知识培训内容课件
- 婴幼儿发展引导员技能竞赛考试题库(含答案)
- (2025年标准)员工住房安全协议书
- 小学生航空航天知识题库及答案
- 青海省尖扎县2025年上半年公开招聘辅警试题含答案分析
评论
0/150
提交评论