仓酷云

标题: PHP网页设计利用收集地址转换完成多办事器负载平衡... [打印本页]

作者: 山那边是海    时间: 2015-2-4 00:16
标题: PHP网页设计利用收集地址转换完成多办事器负载平衡...
看到好的帖子最好up一下,以使得更多的人得到分享。办事器|收集|转换   摘要:本文切磋了散布式收集办事器利用的负载平衡手艺及负载分派的战略,并基于收集地址转换在FreeBSD上完成了负载平衡网关,使用于咱们的Internet收集办事器上,将负载分给多个办事器分管,以处理Internet办事器面对的大批并发会见酿成的CPU或I/O的高负载成绩。为了到达最好的负载平衡后果,负载掌握器需求依据各个办事器确当前CPU和I/O形态来分派负载,这就需求静态监督办事器的负载,并使用优化的负载分派战略,到达均匀分派负载的目标。

关头字: 负载平衡,收集地址转换,FreeBSD


1. 引言

Internet的疾速增加使多媒体收集办事器面临的会见数目疾速增添,办事器需求具有供应大批并发会见办事的才能,办事器的处置和I/O才能成了供应办事的瓶颈。因为单台办事器的功能老是无限的,必需采取多办事器和负载平衡手艺才干知足大批并发会见的需求。

最早的负载平衡手艺是经由过程DNS来完成的,在DNS中为多个地址设置装备摆设统一个名字,因此查询这个名字的客户机将失掉个中一个地址,从而使得分歧的客户会见分歧的办事器,到达负载平衡的目标[1]。DNS负载平衡是一种复杂而无效的办法,然而它不克不及辨别办事器的差别,也不克不及反应办事器确当前运转形态。

反向代办署理办事器可以将恳求转发给外部Web办事器,假如代办署理办事器可以将恳求平均转发给多台外部办事器,就可以到达负载平衡的目标[2]。反向代办署理体例下能使用优化的负载平衡战略,每次会见最余暇的外部办事器来供应办事。然而跟着并发毗连数目的增添,代办署理办事器自己的负载也变得十分大,最初反向代办署理办事器自己会成为办事的瓶颈。

撑持负载平衡的地址转换网关中可以将一个内部IP地址映照为多个外部IP地址,对每次TCP毗连恳求静态利用个中一个外部地址,到达负载平衡的目标[3]。良多硬件厂商将这类手艺集成在他们的互换机中,作为他们第四层互换的一种功效来完成,普通采取随机选择、依据办事器的毗连数目或呼应工夫停止选择的负载平衡战略来分派负载。但是硬件完成的负载掌握器天真性不强,不克不及撑持更优化的负载平衡战略和更庞杂的使用协定。

除这三种负载平衡体例以外,有的协定外部撑持与负载平衡相干的功效,例如HTTP协定中的重定向才能等,但它依附于特定协定,因而利用局限无限。依据现有的这些负载平衡手艺,咱们选择了利用软件体例完成收集地址转换的负载平衡的体例,以填补硬件负载平衡器的不天真,并使用优化的平衡战略来完成后端办事器负载分管的最优形态。


2. 负载平衡战略

为了将负载平均的分派给外部的多个办事器上,就需求使用必定的负载平衡战略。传统的负载平衡战略并没有思索到办事恳求的分歧类型、后台办事器的分歧才能和随机选择酿成的负载分派不平均等成绩。为了使得负载分派非常平均,就要使用可以准确反应各个办事器CPU及I/O形态的负载平衡战略[4]。

客户倡议的办事恳求类型是多种多样的,依照对处置器、收集和I/O的资本请求,可以复杂的将它们分为两个分歧种别,以便使用分歧的处置战略:



静态文档恳求:例如通俗的文本、图像等静态多媒体数据,它们对处置器负载影响不大,酿成的磁盘I/O负载与文档的巨细成反比,次要对收集I/O形成压力。


静态文档恳求:更加罕见的恳求经常需求办事器事后停止处置,例如搜索数据库、紧缩解紧缩多媒体文件等,这些恳求需求相当大的处置器和磁盘I/O资本。


关于静态文档,每一个办事历程占用大致不异的体系资本,因而就能够利用历程数来暗示体系负载。而静态文档办事需求停止额定的处置,其占用的体系资本就超越处置静态恳求,因而需求利用一个权重来暗示。如许一个最复杂的办事器负载暗示公式就为:

个中L为办事器的负载,Ns为静态文档办事历程数,Nd为静态文档办事历程数,而a为每一个静态文档办事相对静态文档办事的权重,可以在10到100之间停止选择。

在这个公式中没有思索办事器硬件的限制,当到达硬件限制的时分,因为资本严重,办事器的负载就会分明增添。例如因为办事器内存巨细的限制,一些历程就要被互换到硬盘上,使得体系负载敏捷增添。思索了体系硬件限制,则办事器的负载可以暗示为:

新增添的参数 Ll暗示这个办事器通俗负荷的限制,它要依据每一个办事器自己的硬件才能来设置。而b暗示超越正常负载时用来限制分派给办事器义务的权重,应当设置为大于Ll的数值,以暗示硬件限制造用。凡是在一个办事器集群中,硬件设置越差的办事器这个权重越要设置的大,以免在一切的办事器都超负载运转时,硬件最差的办事器反而负载最高。因而b是和本办事器硬件限制Ll成正比的,则b可以设置为:

Llmax为办事器集群中最高硬件设置装备摆设的办事器的Ll值。当肯定了每一个办事器的负载以后,中间掌握负载分派的办事器就可以将负载准确的分发给最余暇的办事器,从而不会象其他的负载分派战略那样会招致负载分派不平均的情形。


3. 完成办法及实行了局

咱们的办事器体系由利用疾速以太网毗连起来的多台FreeBSD体系构成。每台后端办事器上运转一个守护历程来静态取得本人的负载形态,而利用FreeBSD完成的中间掌握网关就经由过程这些守护历程刷新各个办事器的负载,以停止准确的负载分派。

3.1撑持负载平衡的网关

在FreeBSD体系下,供应了divert接口以撑持收集地址转换才能。IP数据包经由过程体系内核的ipfw过滤功效被发送到divert接口中,以便内部守护历程natd能吸收原始数据包,处置以后再发还体系内核停止正常的IP分发[5]。

因而依据FreeBSD的地址转换布局,可以创立本人的收集地址转换守护历程,以撑持负载平衡功效,如许就可以将FreeBSD体系作为一个撑持负载平衡的网关。因为它是软件完成的体例,很轻易撑持非尺度的协定及使用优化的负载平衡战略,具有很大的天真性。

3.2实行及剖析

为测试这类完成的可用性,咱们针对最多见的HTTP协定停止咱们的测试实行。为了辨别分歧的恳求品种,设计了三个分歧类型的测试,以测试分歧方面的功能。



CGI法式发生的静态文档:用于测试在办事器的处置才能的负载平衡形态。


小型静态文档:利用尺寸较小的静态文档,用于测试频仍毗连下负载平衡的形态;


大型静态文档:利用较大的文档,测试磁盘及收集I/O的负载平衡形态;


测试了局以单台办事器每秒钟完成恳求的功能为基准,显示利用多台办事器停止负载平衡时每秒种完成的恳求数与基准恳求次数的比率。



图1:负载平衡功能



从上图中的第一条曲线a是处置静态文档恳求的,此时跟着办事器数目的增添,其功能是成倍增添的;而第二条曲线b为处置小尺寸静态文档恳求的,在利用三台办事器时功能改良就不分明了;而处置大尺寸静态文档恳求的第三条曲线c则几近没有产生功能变更。为了找到负载平衡体系达不到幻想形态的缘由,咱们考查了办事器资本的使用率:

表1.办事器资本的使用率


处置类型
负载平衡网关
办事器1
办事器2
办事器3

a
53%
97%
95%
98%

b
76%
43%
39%
41%

c
94%
32%
31%
35%




从这个表中可以看出,当处置静态文档a时三台办事器都处于全速运转形态,负载被平均分派,这是一种幻想的形态。当处置静态文档类型b和c时,负载固然被平均分派给三台办事器,但每台办事器都没有处于全速运转形态。特别在处置大尺寸文档时,负载平衡装备中的natd历程则占有了大局部处置资本。因为一切的收集流量都要经由它停止转换,因而在收集流量和并发毗连数目相当大时,natd历程的负载就增添上去了。实行中利用分歧数目的后端办事器时,流经负载平衡网关的实践收集带宽为:

表2:供应大尺寸文档时办事器集群的带宽


办事器数目
1台
2台
3台

收集速度(Kb/s)
10042.14
11015.10
11442.67




可以看出带宽限制在10MB/s摆布,明显这是这个测试利用的负载平衡历程的带宽限制,现实上该法式利用了链表来保护收集地址转换的形态,这就大大限制了它的收集功能,经由过程进步硬件功能和改良算法,完整可以进一步进步其功能。


4.会商

从下面的实行中可以看出,基于收集地址转换的负载平衡器可以无效的处理办事器真个CPU和磁盘I/O负载,但是负载平衡器自己的功能受收集I/O的限制,在必定硬件前提下具有必定的带宽限制,但可以经由过程改良算法和进步运转负载平衡法式的硬件功能,来进步这个带宽限制。同时也能够看出,分歧的办事类型对分歧的办事器资本停止占用,咱们利用的负载权衡战略是利用统一个负载停止评价,这关于大多半前提是合适的,但是最好的举措是针对分歧的资本,如CPU、磁盘I/O或收集I/O等,分离监督办事器负载,由中间掌握器选择最适合的办事器分发客户恳求。咱们今后的任务将从这两个方面动手,完美这个负载平衡掌握器。


参考文献:


[1] E.Kata,M.Butler, and R. McGrath. A scalable HTTP server: the ncsa prototype. Computer Networks and ISDN systems. 1994. Vol 27, P155-164

[2] Ralf S.Engelschall. Load Balancing Your Web Site. Web Techniques Magazine (http://www.WebTechniques.com), May 1998. vol.3, iss.5

[3] CICSO. LocalDirector Documents. http://www.cisco.com, 1997

[4] H.Zhu. T.Yang, Q.Zheng, D.Watson, O.H.Ibarra, andT.Smith, Adaptive load sharing for clustered digital library servers. Technical Report, CS, UCSB, 1998.

[5] FreeBSD core team. natd and divert manual pages. http://www.freebsd.org. 1995



Implement a load balancing gateway by NAT


Wang, Bo

NongYe Road 70, ZhengZhou, 450002, P.R.China

wb@email.online.ha.cn


Abstract: This paper investigates load balancing techniques and strategies, and implements a load balancing gateway based NAT for our Internet servers. The Internet servers involve the high load of CPU and I/O by simultaneous access requests, the symmetrical clustered servers can distribute the server load to solve the problem. To balance the load in the best way, the gateway distributes the load according to the status of server's CPU and I/O. The gateway must monitor every server's load and apply the best scheme to delivery every request, so it can provide the high performance for Internet services.

Keywords: load balancing, NAT, FreeBSD
  把例子全部敲进去试验,完成一遍以后就会有心得了,因为你会发现为啥我的程序和书上的一模一样就是结果不正确。新手学习的时候必须承认,不容易,因为我也是过来人,你会发现原来有那么多常用的语句,函数都要记。
作者: 活着的死人    时间: 2015-2-4 10:26
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
作者: 蒙在股里    时间: 2015-2-6 14:49
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
作者: 深爱那片海    时间: 2015-2-7 18:11
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
作者: 乐观    时间: 2015-2-11 16:14
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 莫相离    时间: 2015-2-26 20:31
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
作者: 兰色精灵    时间: 2015-3-2 21:44
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
作者: 第二个灵魂    时间: 2015-3-11 03:47
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 只想知道    时间: 2015-3-17 19:40
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
作者: 再见西城    时间: 2015-3-20 17:09
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
作者: 金色的骷髅    时间: 2015-3-22 02:39
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
作者: 再现理想    时间: 2015-3-31 13:23
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
作者: 若相依    时间: 2015-4-2 21:36
实践是检验自己会不会的真理。
作者: 老尸    时间: 2015-4-4 07:02
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
作者: 变相怪杰    时间: 2015-4-4 15:50
兴趣是最好的老师,百度是最好的词典。
作者: 谁可相欹    时间: 2015-4-6 09:24
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者: 爱飞    时间: 2015-4-20 15:12
实践是检验自己会不会的真理。
作者: admin    时间: 2015-4-22 02:32
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者: 因胸联盟    时间: 2015-4-25 10:11
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
作者: 灵魂腐蚀    时间: 2015-6-6 07:41
写的比较杂,因为我也是个新手,不当至于大家多多指正。
作者: 精灵巫婆    时间: 2015-6-7 21:41
兴趣是最好的老师,百度是最好的词典。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2