APP下载

Nginx结合memcached实现远程教育培训系统的负载均衡

2017-04-26杜冬梅许彩欣张磊

电脑知识与技术 2017年6期
关键词:负载均衡

杜冬梅+许彩欣+张磊

摘要:日益增长的用户访问对企业Web应用系统提出来越来越严重的挑战,Web服务器端保持应对高并发访问的能力,必须使用多台服务器进行负载均衡。Nginx可以在低内存消耗的前提下实现高并发连接访问,并具有很高的可靠性。近年来,Nginx服务器作为反向代理服务器在网络接入层应用比较广泛,使用nginx进行应用服务器负载均衡,根据配置将用户的请求转发到后端的服务器集群是nginx的主要功能。该文阐述了nginx与memcache工作原理,提出了基于nginx的web应用系统负载均衡实现方案,并进行了具体实现。

关键词:负载均衡;nginx;memcached

中图分类号:TP334.8 文献标识码:A 文章编号:1009-3044(2017)06-0096-03

Abstract: With the growing visit user, web application system is faced with more and more challenges, to maintain the web servers high woking ability, we must use multiple servers for load balancing. Nginx can achieve high parallel and unfailing access under the low memory .As a reverse proxy ,the Nginx sever is widely used in recent years. Bulid the load balance application server using nginx is the main function of nginx. This paper expounds the operational principle of nginx and memcache, puts forward and implementation the load balancing on Web application system based on nginx.

Key words: load balance; nginx; memcached

1 Nginx負载均衡

Nginx是一款高性能的HTTP服务器和反向代理服务器开源框架,能够很好地解决应用程序高连接并发问题,可在内存和CPU占用资源较低的情况下,同时支持高达5万个并发连接数的快速响应。在服务器和带宽受限的情况下,利用Nginx会加大服务器的吞吐量,大大提高应用系统的运行效率,减低因数据拥堵造成的连接延迟或等待现象。

Nginx反向代理是解决公网IPv4资源紧缺条件下对外发布多个Web应用的常用方法[2]。Nginx采用的是反向代理技术。代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。反向代理负载均衡技术是把将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理[3],从而达到负载均衡的目的。

Nginx的特点使得其应用越来越广[1]。新浪、网易等门户类网站,淘宝、好乐买等电子商务类网站,新浪博客、网易博客、搜狐博客等博客类网站,支付宝、手机支付等支付类网站,均在使用。面对巨大的访问量,Nginx运行稳定,正常。

2 memcached实现tomcat的Session共享

对于广大java开发者而已,对于J2EE规范中的Session应该并不陌生,我们可以使用Session管理用户的会话信息,最常见的就是拿Session用来存放用户登录、身份、权限及状态等信息。对于使用Tomcat作为Web容器的大部分开发人员而言,Tomcat是如何实现Session标记用户和管理Session信息的呢

利用memcached-session-manager开源tomcat插件改变tomcat原始的session存储机制,将session的存储放到分布式缓存memcache中,从而实现对session的共享

MSM(memcached-session-manager) 支持tomcat6 和tomcat7 ,利用 Value(Tomcat 阀)对Request进行跟踪。Request请求到来时,从memcached加载session,Request请求结束时,将tomcat session更新至memcached,以达到session共享之目的, 支持 sticky 和 non-sticky 模式。

memcached当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。memcached基于一个存储键/值对的hashmap。

memcached支持tomcat6和tomcat7 ,Request请求到来时,从memcached加载session,Request请求结束时,将tomcat session更新至memcached,以达到session共享的目的。

3 基于Nginx的应用系统模型设计

3.1 远程教育培训系统

远程教育培训系统包含多个子系统:统一认证、远程教育、职业鉴定、考试竞赛、调查问卷、内容管理、资源管理等。按照规划,各子系统需要部署在三台应用服务器上,进行负载均衡。但是如果每个应用使用独立服务器,受到外网ip地址资源有限的限制,同时,独立使用服务器不能更好地使用服务器资源,造成资源浪费。

在不适用nginx情况下,为更好利用服务器资源,各子系统分别部署到三台服务器上,使用不同的端口提供对外服务。

具体规划如下。

上述规划中不同服务器、不同端口号对外提供服务对学员使用造成不便。

利用Nginx的特点,在软件层面基于的URL重定向功能,简化用户访问各子系统的途径(统一域名、统一端口访问)[5],实现应用系统处理高并发事件的能力,在服务器资源和IP资源有限的情况下,综合高效利用资源,为学员提供优质服务,显得尤为重要。

实现系统的负载均衡,主要有三个方面:系统的模型设计,Session共享实现,站点管理实现。

3.2 Nginx应用系统模型设计

根据Nginx的反向代理服务器架构,将远程教育培训系统进行如图1的设计,实现各应用的负载均衡。

Nginx和MSM分别部署在2台应用服务器APP1和APP2上,既可以实现应用系统的负载均衡,又可以避免Nginx的单点故障。

Nginx为用户访问入口,当用户向Nginx反向代理服务器发送请求时,Nginx利用它的Handers处理模块进行服务,服务器根据配置好的Location信息判断向哪个后端Web服务器发送请求。

Nginx和Memorycached的安装过程省略,下面在安装成功的前提下,介绍两者的关键配置参数。

3.3 memcached实现Session共享

存入memcached 的数据必须实现序列化。memcached支持的序列化参数包含javolution序列化、flexjson序列化、kryo序列化等。使用kryo来做序列化,实现memcached的session共享是目前性能优化比较好的方式。

Tomcat的context.xml增加如下配置:

[

memcachedNodes="n1:app1:11211,n2:app3:11211"

sticky="false"

lockingMode="auto"

sessionBackupAsync="false"

sessionBackupTimeout="100000"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" ]

3.4 Nginx实现应用系统模型

Nginx配置中,实现各子系统分别配置不同的域名,而且可以将不同端口的tomcat应用,统一使用Nginx的一个端口实现。配置之后,用户访问各个子系统只需记住不同域名,而不需要记住不同端口号,大大方便了用户的使用。主要配置内容如下。

设置proxy.conf参数:

[proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ]

Proxy.conf参数,使得反向代理层的Nginx重写请求头中的host字段,避免后端Web服务器设有防掉链或根据http请求头中的host字段进行路由或判断功能时[4],访问失败。Proxy.conf包含在nginx.conf配置文件中,保证所有子系统访问方式相同。

设置nginx.conf参数:

[include proxy.conf;

……

#以远程培训为例 设置负载均衡

upstream ycpx.domain{

server app2:7001 weight=5;

server app3:7001 weight=5; }

server {

listen 9008; #port

server_name ycpx.domain;

location / {

proxy_pass http:// ycpx.domain /;

} ]

Nginx.conf簡单配置完成,访问:http://ycpx.domain:9008/ 即可随机访问app1和app3应用服务器上的远程培训子系统。其他子系统设置相同,配置完成,可通过http://***.domain:9008/访问。

其他如服务器权重等,可以根据实际服务器硬件配置进行合理分配。这里只是最简单的配置实现方式。

4 结束语

Nginx与MSM结合实现系统的负载均衡,不但节约ip资源,提高应用服务器利用率,而且在一定程度上可以提高Web系统的安全性。Nginx提供了丰富的参数配置,用于提高系统性能,因篇幅有限,本文只介绍了关键配置方法,可再深入研究Ngnix配置参数,进一步提供系统的高并发行和运行效率。

参考文献:

[1] 赵瑞雪. 基于Nginx的智能管理方案的研究[D]. 北京:北京邮电大学, 2013.

[2] 林宏. Nginx反向代理可视化管理方案研究与编程实现[J]. 贵州师范学院学报, 2015, 31(12): 32-35.

[3] 严方东, 刘玉凤. 利用Nginx实现网站负载均衡[J]. 数字化用户, 2013, 15(6): 96-96.

[4] 吴翔毅. Nginx在校园网络中的应用研究[J]. 福建电脑, 2009, 25(7): 103-104.

[5] 刘全飞, 周相兵. 基于Nginx的站点管理系统设计与实现[J]. 电脑开发与应用, 2015(1).

猜你喜欢

负载均衡
异构环境下改进的LATE调度算法