欢迎来到 论文网(www.lunww.net),我们为您提供专业的论文发表咨询和论文发表辅导!
【登陆】
【注册】
【加入收藏】

你的位置:论文网 >> 论文阅读 >> 计算机论文 >> 计算机理论 >> 详细内容 在线投稿

计算机集群性能瓶颈的研究与改进

浏览27次 时间:2018年7月21日 10:44
  摘要:文章主要针对 Linux 的 LVS(Linux Virtual Server)集群的工作机制进行了研究,找到了计算机集群性能瓶颈,在最影响集群性能的调度算法和传输机制开销这两方面都进行了优化,并通过实验测试证明了对 LVS 集群的这两方面的优化确实提高了 LVS 集群的性能。
  关键词:Linux;LVS;集群;调度算法;传输机制;负载均衡中图分类号:TP393.02 文献标识码:A 文章编号:1673-1131(2015)10-0105-03.
  0 引言
  随着计算机与网络技术的迅猛发展,互联网用户数量与网络访问流量大幅增加,大规模的计算任务明显增多,这要求服务器的性能也要随之获得提升。大型机虽然可以解决这些问题,但其高昂的价格显然不适合大多数网站和服务提供商。
  在此需求下,集群系统越来越成为大量网络访问与大数据计算解决方案中的首选方案。本文针对集群系统中常见的 LVS负载均衡集群进行深入研究,找到其主要性能瓶颈并对其提出改进策略,这对企业或个人希望改善负载均衡集群的性能具有借鉴意义。
  1 LVS 集群的通信机制的选取及优化
  LVS 集群釆用的是 Linux 标准内核提供的 TCP/IP 协议 栈作为其通信机制。TCP/IP 协议栈诞生之初主要是美国军队为了实现多台电脑通过互联网进行稳定通信而研发出来的,设计之初就大量考虑了远程通信的稳定性及正确率,起初ISO 制定的 OSI 七层参考模型已经精简为现在的应用层,传输层,网络层,链路层的四层参考模型,TCP/IP协议栈的linux实现正是采用这种四层模型[1]。由协议栈的原理可知,每一层都有自己的协议,根据自身的协议对传递过来的消息进行封装或者去封装。这样就会导致大量内存进行重新分配和拷贝,重复操作导致实现协议栈花费的开销大大增加,严重影响集群系统的性能。
  Linux 系统自从 2.0 内核开始在 TCP/IP 协议栈的实现中已经加入了缓冲机制来降低各协议层报文复制所带来的巨大开销。但是 Linux 内核中的协议栈中的缓冲机制的实现太过 庞大,没有专门对集群系统进行精简优化[2]。Linux 的标准内核中缓冲机制的核心是用 sk_buff {}这一数据结构存放数据,sk_buff{ }在Socket和它之后的层次中是用来存放网络接收到的以及需要发送的数据,它拥有足够的扩展性能,从而可以支持不同层次、相同层次不同类型的网络协议[3]。现在我们把庞大繁琐的 sk_buff 精简为:
  struct sk_buff_new {
  struct sk_buff_new *next; //指向下一结构体,用作构造双向链表struct sk_buff_new *prev; //指向上一结构体,用作构造双向链表void *efdata; //指向实际数据区void *head; //指向报文头void *tail //指向报文的尾部__u32 ef_lengs; //链表结构体内实际数据长度__u32 lengs; //该 sk_buff_new 的总长度__u32 flags //该 sk_buff_new 类型,复合用标志位} 使用精简后的sk_buff_new 的缓冲区管理方式(图 1),只需要 efdata 与 head 之间留出每层协议对上一层报文所加的头部空间的大小,就可以避免数据区反复拷贝,tail 指向 malloc ()在内存堆中动态分配的内存空间也就是缓冲区也是实际数据区的尾部。ef_lengs 成员存储(用户层提供的)数据区的长度,lengs 成员确定 sk_buff 数据结构的总长度,flags 成员指示 sk_buff 的使用类型,这就是精简后的缓冲机制的实现方式。
  图 1 精简后的 sk_buff_new 的缓冲区管理方式2 LVS 集群的负载均衡模式的选择负载均衡模式主要有以下三种:基于 NAT 实现负载均衡(VS/NAT)、基于 IP 隧道实现负载均衡(VS/TUN)以及基于直接路由实现负载均衡(VS/DR)。VS/NAT 模式因为响应消息必须通过负载均衡器,在客户并发连接数很大时,负载平衡器将成为瓶颈;VS/TUR 方式可以缓解负载均衡器的压力,但是同时它也带来了 IP 隧道的开销;VS/DR 中只有请求报文会经过负载均衡器,响应报文直接发送给客户端,负载均衡没有压力,并且本论文所要搭建的服务器集群处于一个局域网内,并且没有 IP 隧道的开销,搭建 VS/DR 模式简单。
  3 LVS 集群的负载均衡算法的选择
  负载均衡常用的调度算法有以下几种,轮转调度、加权轮转调度、最小连接调度和加权最小连接调度。其中加权最小连接算法对真实服务器中各机器的性能差别及其实时连接数 进行了重点考虑,是几种算法中性能较好的,更重要的是Linux支持的 LVS 的默认的调度算法[4]。因此,在我们搭建的集群系统中选择了加权最小链接调度算法。但是,这种算法也有不足之初,就是它只考虑了负载的连接数以及权值仅由经验估计取得的不严谨性。之后我们会对此算法做出分析并提出改进策略。
  4 加权最小链接(WLC)算法的不足及优化
  WLC 算法中真实服务器的权值是服务器管理员根据硬件配置信息以及自己经验估计得到的,缺少足够的科学依据。管理员在手动设定真实服务器的权值后,在集群系统的运行中是不会改变的。对于当前连接数与权值比值最小的真实服务器而言,即使已经处于负载过重的情况,但由于其权值不能动态调整,新的请求仍然会发送到该服务器上,加重其负担,而此时其他服务器可能正处于空闲状态,因此,固定不变的权值,容导致 LVS 集群在长时间运行后,出现负载倾斜的现象[5]。
  针对 WLC 算法的不足,本文在此基础上予以改进,提出了一种动态 WLC 算法。该算法根据真实服务器的当前负载情况,对其权值动态调整。其算法原理可以简单概括为:
  根据真实服务器当前负载的大小及时改变其权值,负载量大,就减小权值,以使真实服务器可以响应更多请求;负载量小,就增大权值,以使真实服务器可以响应更少甚至不响应请求[6]。
  真实服务器实时负载量可以用内存利用率、CPU利用率、网络带宽利用率来量化,但是这些信息频繁快速的采集过程又会加重真实服务器的负载量。所以本文选取的实时负载用服务器响应时间 T 来量化,因为服务器的响应速度从整体上反映了服务器的负载量,而且不消耗真实服务器本身的资源。
  借助负载量 T 定义了动态权值计算公式(1):
  (1)
  其中 700 是根据客户请求到服务器响应的参照延迟时间,若服务器响应用时超过 700ms,则认为服务器负载饱和,就将它的权值归零,不再接受新的请求;若响应用时小于 700ms,则将它的权值设为 700-T。
  5 LVS 集群性能优化方法的 Linux 内核级实现5.1 TCP/IP 协议栈缓冲区的内核实现方法为了使用套接字缓冲区,内核创建了两个后备高速缓存(lookaside cache)它们分别是 skbuff_head_cache 和 skbuff_fclone_cache,协议栈中所使用到的所有的sk_buff结构都是从这两个后备高速缓存中分配出来的。两者的区别在于 skbuff_head_cache 在创建时指定的单位内存区域的大小是 sizeof(struct sk_buff),可以容纳任意数目的 struct sk_buff,而 skbuff_fclone_cache 在创建时指定的单位内存区域大小是 2*sizeof(struct sk_buff)+sizeof (atomic_t),它的最小区域单位是一对strcut sk_buff 和一个引用计数,这一对 sk_buff 是克隆的,即它们指向同一个数据缓冲区,引用计数值是 0,1 或 2,表示这一对中有几个 sk_buff 已被使用。创建一个套接字缓冲区,最常用的操作是 alloc_skb,它在 skbuff_head_cache 中创建一个struct sk_buff,如果要在 skbuff_fclone_cache 中创建,可以调用__alloc_skb,通过特定参数进行[7]。
  5.2 动态权值更新 Linux 内核模块的实现
  动态权值更新模块由 3 个自定义函数实现,分别是主函数、动态负载值计算函数、动态权值计算函数。这三个函数的实现流程图见图 2 所示。
  图 2 函数实现流程图
  6 简单 LVS 集群系统下的性能测试结果对比与分析6.1 测试环境的搭建与配置在现有实验室资源下搭建简易的LVS集群系统来测试改进后的集群的性能。本试验系统由两台电脑组成服务器池,一台电脑作为负载均衡器,一台电脑作为客户机,由于采用VS-DR 直接路由调度模式,因此以上所有电脑连入同一交换机上。
  客户机的配置:由于设备数量限制只用了一台电脑作为客户机,因此客户机电脑上运行win7 系统上能够安装的WAS软件来模拟用户大量并发访问网站,以方便得出性能测试结果。集群调度器的配置:集群的调度器运行的是 Linux 内核版本为 2.6.30 的 ubuntu 9.04,在该系统之上安装 LVS 集群的核心软件ipvs和集群的配置管理软件ipvsadm,之后进行如下配置:
  (1)配置 VIP 地址,在控制台输入:
  # ifconfig eth0:5 152.125.77.1 broadeast 152.125.77.1 netmask 255.255.255.255 up;# route add – host 152.125.77.1 dev eth0:5(2)配制虚拟服务器与真实服务器的连接表,在控制台输入:
  # ipvsadm – C
  # ipvsadm – A – t 152.125.77.1:80 – s wlc# ipvsadm – a – t 152.125.77.1:80 – r 152.125.77.45:80– g – w 3# ipvsadm – a – t 152.125.77.1:80 – r 152.125.77.46:80– g – w 40(3)配置文件/etc/sysctl.conf 中修改一行:
  net.ipv4.ip_forward = 1
  修改后执行# sysctl – p 使更改后的配置立刻生效。
  通过以上三步,LVS 集群系统最核心的调度器的配置过程已经配置完毕,再将服务器与客户机设在同一网段,把两台真实服务器设为同一个虚拟 ip 并且关闭 arp 功能。至此,LVS集群系统的配置过程全部配置完毕[9]。
  6.2 测试结果对比
  在调度器运行ubuntu9.04 的原始 2.6.30Linux内核时和对 原始内核精简协议栈的缓冲机制及加入动态权值更改的修改再编译后分别测试得到如下结果,记录为下表(表 1)。
  表 1 测试结果对比
  TTLB 是客户机发出请求算起,到 WAS 接收到响应的最后一个字节作为结束所花费的平均时间。分析上表记录的结果可知,在对LVS集群进行上述优化后,在并发请求较少时平均响应时间减少的不明显,甚至有的高于改进前的,原因在于并发请求少,服务器负载不高,而改进后的动态算法需要不停获取服务器信息来判断是否更新,这会给服务器造成额外负担,造成平均响应时间甚至高于改进之前[10]。然而,在并发响应大大增加之后,平均响应时间减小越来越明显,改进后的性能提升就越显著,因为当并发请求达到一定数量后,服务器所能承受的负载量越来越接近饱和,协议栈精简以及动态权值不停改动对集群性能的影响越来越强,性能改善就越显著。
  7 结语
  本文通过分析 LVS 集群的传输机制以及调度算法,发现了影响 LVS 集群性能的两大要素,即 Linux 协议栈的各层之间数据重复复制、庞大缓冲机制带来的巨大开销和服务器权值凭管理员经验固定分配不可动态更改。与此同时本文对这两点问题提出了精简协议栈缓冲机制和动态权值更新这两种方法来优化集群性能。并通过搭建简单集群系统进行测试,在平均响应时间这个用户最直观的集群性能指标上证明了改进策略的有效性。
  参考文献:
  [1] 张锦玉,王宝生, 刘亚萍. 基于Linux 系统的专用网络协议栈的设计与实现[C]. 全国第 18 届计算机技术与应用学术会议(CACIS). 浙江宁波:中国系统仿真学会,2007.
  [2] W. Richard Stevens. UNIX network programm ing volumnI 2nd [M]. Upper Saddle River: Prentice-hall, 1998: 420-431.
  [3] Heikki Julkunen andC. Edward chow. Enhance network security with dynamic packet filter [JIEEEInternationalConference on Computer Communications and Networks,1998: 75-82.
  [4] 孙世明. Linux 集群系统任务调度策略的研究与设计[D]南京:河海大学, 2006.
  [5] 张亚波, 苏艺. 基于 Red5 服务器集群负载均衡调度算法研究[J]. 微型机与应用, 2013, 30(21): 69-71.
  [6] Barth, Wolf gang. Nagios system and network monitoring2nd Edition[M]. SanFrancisco. William Pollock, 2006.
  [7] Y.F. Huang, C.C. Fang. Load balancing for cluster of VODservers[J]. Information Sciences. 2004: 113-138.
  作者简介:孙俊峰,硕士在读,研究方向为嵌入式 Linux。
论文网5_` f!pp
上一篇 下一篇

论文发表 论文投稿 热点图片