Apache集群在多媒体内容播控管理平台上的应用2013-08《电信工程技术与标准化》
张小锋1, 2,朱晓民1, 2
1北京邮电大学网络与交换技术国家重点实验室,北京(100876)
2东信北邮信息技术有限公司,北京(100191)
E-mail:zhangxiaofeng@ebupt.com
摘 要: 随着终端用户的增加,多媒体内容播控管理平台对高访问量、高并发的需求越来越高。本文首先介绍了Apache集群的原理,然后将其应用于多媒体内容播控管理平台中,通过均衡负载,减轻了服务器的负担,提高了响应速度。
关键词:并发,集群,Apache,负载
Apache Cluster in Multimedia Broadcast Content Management Platform
Zhang Xiaofeng
1 State Key Laboratory of Networking and Switching Technology,Beijing University of Posts and Telecommunications,Beijing (100876)
2 EBUPT Information Technology Co. Ltd.,Beijing (100191)
E-mail:zhangxiaofeng@ebupt.com
Abstract: With the increasing of the end users, the multimedia broadcast content management platform requires web service with higher speed and better performance. This paper first introduces the principle of the Apache cluster, and then uses the techenique in multimedia broadcast content management platform. Through balancing the load of web servers, it can reduce the burden of server and improve the response speed.
Key words: concurrency, cluster, Apache, load
1. 引 言
随着多媒体内容播控管理平台(数字标牌业务)的推广,用户数量和终端数量会逐渐增加,多媒体内容播控管理平台的终端访问数量并发访问量越来越大,造成Web 服务器的负荷加重直至崩溃, 如何解决服务器的高负荷问题已经是无法回避的问题了。通过单纯提升处理器等服务器硬件性能来提高服务器的负载能力是比较直接的解决方法,但会导致巨大的开销。服务器硬件是相当昂贵的, 而且也无法保护原有设备上的投资,这对于中小型企业来说不堪重负。还有一种解决思路是集群思想,使用多台服务器组成集群提供服务,通过一定机制使集群共同分担系统负载,对单一的服务器没有太高的性能要求,系统负载增加,可以多增加服务器来分担。对用户而言,整个系统仿佛是一台单一的逻辑服务器,这样的系统能够提供较强的可扩展性和较好的吞吐性能。
负载均衡(Load Balance)集群建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性[1]。集群可以使用各种复杂的动态负载均衡算法[2],而Apache集群自带的负载均衡算法非常简单,大大简化了集群的搭建和配置,对于中小型企业来说使用非常简捷。
2. Apache集群介绍
2.1. 请求分发原理
图1 Apache集群架构图
Apache集群工作原理如图1所示, Apache和tomcat共同响应终端用户的请求,Apache作为tomcat的前端处理器。由于Apache httpd处理静态页面的能力远远强于Tomcat,所以静态请求直接由Apache来处理;而动态请求则由JK(也叫mod_jk,这是一款Apache/IIS用来连接后台Tomcat的模块,是Apache的开源模块,使Apache支持集群和负载均衡)分发给Tomcat处理。
2.2. Session同步机制
对集群来说,如何保证各个服务器之间的Session同步非常关键。
对于由Tomcat主机组成的集群有两种方式:一种就是黏性会话模式,即sticky模式;另外一种就是session复制模式了。
2.2.1. 黏性会话模式
利用负载均衡器的sticky模式的方式把所有同一session的请求都发送到相同的Tomcat节点。这样不同用户的请求就被平均分配到集群中各个tomcat节点上,实现负载均衡的能力。
这种模式的优点是对于开发者来说,实现起来非常容易,只需修改jvmRoute="tomcat1";缺点是没有灾难恢复的能力。一旦一个节点发生故障,这个节点上所有的session信息全部丢失。
2.2.2. 复制模式
这种模式可以使所有session在所有Tomcat节点中保持一致。当一个节点修改一个session数据的时候,该节点会把这个session的所有内容序列化,然后广播给所有其它节点。这样当下一个用户请求被负载均衡器分配到另外一个节点的时候,那个节点上有完备的 session信息可以用来服务该请求。
这种模式最大的问题是对session哪怕有一点点修改,也要把整个sessions数据全部序列化 (serialize),还要广播给集群中所有节点,不管该节点到底需不需要这个session。这样很容易会造成大量的网络通信,导致网络阻塞。一般采用这种方式,当Tomcat节点超过4个时候,整个集群的吞吐量就不能再上升了; 此方式是通过tomcat本身提供的功能,只需要修改server.xml文件:
1)修改Engine节点信息:
2)去掉 <\Cluster> 的注释符
3)web.xml中增加
3. 在多媒体内容播控管理平台中使用Apache集群
3.1. 系统架构图
基于Apache集群的播控终端管理平台系统架构如图2,负载均衡层由一台Apache主机支持,服务器集群由多台Tomcat主机组成,数据库由两个数据库主机采用主备切换的方式实现容灾。
任务服务器把任务分配给后端的应用服务器,任务服务器需要后端的应用服务器暴露一个接口供应用服务器来查询,从而使任务服务器获取当前该服务器的负载状态。通过一个http接口,把一些信息暴露给任务服务器,任务服务器只需要通过后端的应用服务器查询这些状态,就可以找到应用服务器欲提供的信息。由于使用的标准http协议,上述过程可以用标准的http客户端来测试。
应用服务器相当于一个http服务器,这个任务服务器相当于一个http客户端,它可以去查询或者说是监视这些应用服务器当前的负载。到底是cpu高还是I/O高还是并发高,还是内存换页高,这些应用服务器应该提供一个接口,暴露给应用服务器去查询。应用服务器的负载均衡增加一个任务服务器来实现。任务服务器在查询到这些信息后,选取负载最低的应用服务器来分配任务。当然这里面可能有一些算法来确定负载最低的。相当于应用服务器被动的接收了任务。应用服务器能不能主动的去任务服务器上面取任务呢。数据库同步用的是replication机制,主流的服务器都有类似的机制。
图2 基于Apache集群的数字标牌平台架构
3.2. 终端任务轮询接口(心跳接口)
3.2.1. 接口功能
终端定期向平台进行轮询,获取任务以及控制指令,该接口同时具备心跳功能。随着多媒体内容播控管理平台的推广,终端数量会增加。播控终端每隔一个时间片将与播控平台交互(图3),导致系统负载较大。
图3 任务轮训接口
3.2.2. 接口流程
图4 终端获取播放任务流程
由图3和图4可知,时刻都有终端在向播控终端轮训是否有播放任务,使用多台服务器组成集群提供服务,通过一定机制使集群共同分担系统负载,解决系统负载增加的问题。
3.3. Apache集群部署的主要配置
3.3.1. http.conf
修改这个配置文件的作用是Apache添加JK模块,修改之前首先去官网下载JK模块,命名格式为mod_jk-1.2.31-httpd-2.2.3.so,下载后将文件放在apache安装根目录的modules目录下,然后再http.conf文件末尾添加下面的语句:
LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
JkWorkersFile conf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器名
JkMount /*.jsp controller
3.3.2. 创建并编辑work.properties
这个文件的作用是配置tomcat服务器主机的IP、端口和权值以及负载控制器的策略、session共享机制:
#server
worker.list = controller
#========tomcat1========
worker.tomcat1.port=11009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1
#========tomcat2========
worker.tomcat2.port=12009
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2,tomcat3
worker.controller.sticky_session=false
worker.controller.sticky_session_force=1
#worker.controller.sticky_session=1
3.3.3. Tomcat配置
Tomcat配置主要是使Tomcat支持集群方式,只需修改server.xml即可,第一处修改是支持AJP/1.3协议,如下面的语句
第二处修改是配置此tomcat实例的名字,如下:
,注意:jvmRoute的值必须与work.properties中配置的tomcat 实例的名字一致
第三处就是打开集群,如下
3.4. 使用Apache集群后与使用前的性能比较
测试环境是4台配置相同的主机:CPU 2.4GHZ,内存4.0G,硬盘500G,操作系统SUSE Linux Enterprise Server 10 (x86_64)。
使用Apache集群时:一台主机作为Apache负载均衡器,另外3台作为Web服务器,并部署相同的应用;不使用Apache集群时:仅使用一台主机作为Web服务器,在这台服务器上部署与集群服务器上相同的应用,用户的请求都发送给这台Web服务器来处理。
所使用的测试软件是apache自带的ab(ApacheBench)压力测试工具,命令为ab -c 并发数 -n 请求数 请求的网址[3],如输入ab -c 10 -n 100 http://localhost/cyuser/zone/sucai.jsp,表示每次发出10个请求(即并发次数为10),一共有100个请求,请求的网址为:http://localhost/cyuser/zone/sucai.jsp。
本实验共进行了6次测试,每次测试选用的并发数都是同一个值,选用的是10,不同是请求数的取值,分别取10,100,500,1000,5000,10000,6次测试执行命令分别为:
ab -c 10 -n 10 http://localhost/cyuser/zone/sucai.jsp
ab -c 10 -n 100 http://localhost/cyuser/zone/sucai.jsp
ab -c 10 -n 500 http://localhost/cyuser/zone/sucai.jsp
ab -c 10 -n 1000 http://localhost/cyuser/zone/sucai.jsp
ab -c 10 -n 5000 http://localhost/cyuser/zone/sucai.jsp
ab -c 10 -n 10000 http://localhost/cyuser/zone/sucai.jsp
表1是测试结果:
请求数
|
10
|
100
|
500
|
1000
|
5000
|
10000
|
未使用Apache集群
响应时间 T1(s)
|
1.772
|
12.355
|
69.508
|
147.686
|
793.479
|
1600.132
|
使用Apache集群后
响应时间T2(s)
|
1.231
|
6.739
|
27.574
|
64.376
|
301.468
|
603.375
|
加速比T1/T2
|
1.439
|
1.819
|
2.521
|
2.294
|
2.632
|
2.652
|
表1 使用Apache集群前后性能比较
图5 使用Apache集群与未使用Apache集群响应时间对比图
图6 使用Apache集群与未使用Apache集群加速比趋势图
从图6可以看出效率提升是很明显的,加速比下降的那个点,推断可能是由于系统资源不稳定导致的奇异点,同比还是增加的。从表中可以看出,使用Apache集群后,响应时间大大缩短,而且,随着访问量的增大,使用集群所带来的负载分担效果越来越明显,集群响应高访问量的速度更快。
4. 展望
集群系统技术的发展非常迅速,如今已越来越受到人们的重视并广泛地应用在各个方面,成为主要的高性能低价格的网络服务系统的解决方案,同时由于集群系统的高效性、可靠性、扩展性、低成本和透明性,相信未来会得到更多的应用。
参考文献
[1] 魏红,李志勇.Web 服务器动态负载均衡的设计与研究 [J].现代计算机,2009(10):48-50,74
[2] Shengbo Teng, Jianxin Liao, Xiaomin Zhu, Dynamic weighted random load balancing algorithm for SIP application server[J], The Journal of China Universities of Posts and Telecommunications, Vol. 16, No. 4, August 2009, pp67-70
[3] 邵芬,于国防,付海燕.AB:一种简单的性能测试工具[J].计算机时代,2007(12):59-60
基金项目:国家973计划项目(No. 2013CB329100, 2013CB329102);国家自然科学基金(No. 61271019, 61101119, 61121001, 61072057, 60902051);长江学者和创新团队发展计划资助(No. IRT1049)