软件课程详解

快速咨询:
0516-83821111 [路线地址] 时老师 陈老师 常老师 唐老师 谢老师 张老师
计算机基础
高级网络技术
网络安全技术
Windows平台应用
LIUNX平台应用
网站搭建技术
精英班示范
   开班信息
班制
开班日期
状态
脱产班
10月5日
招满
周末班
10月18日
热招
晚班
10月15日
热招
脱产班
10月15日
限招
脱产班
10月28日
热招
脱产班
11月6日
热招
   师资力量
  有北京大学资深教授,以及来自MICROSOFT、IBM、CISCO等知名IT企业的技术
专家组成学术专家顾问团队,定期...
   免费试听课
主  题:
如何制胜高薪职场
时  间:
10月12日 周日上午9:30
内  容:

现代企业需要什么样的IT人才

电  话:
0516-83821111
点击免费电话方可订座!  
 linux平台应用

apache+tomcat+mysql 负载平衡和集群技术

发布人:徐州蓝海  

公司开发了一个网站,估计最高在线人数是3 万,并发人数最多100 人。开发的网站是否能否承受这个压力,如何确保网站的负荷没有问题,经过研究决定如下:

(1 )采用负载平衡和集群技术,初步机构采用Apache+Tomcat 的机群技术。

(2 )采用压力测试工具,测试压力。工具是Loadrunner.

硬件环境搭建:

为了能够进行压力测试,需要搭建一个环境。刚开始时,测试在公司局域网内进行,但很快发现了一个问题,即一个脚本的压力测试结果每次都不一样,并且差别很大。原来是受公司网络的影响,于是决定搭建一个完全隔离的局域网测试。搭建后的局域网配置如下:

(1) 网络速度:100M

(2) 三台 服务器

负载 服务器 :操作系统windows2003,

Tomcat服务器:操作系统windows2000 Professional

数据库服务器:操作系统windows2000 Professional

三台机器的cpu 2.4 G, 内存 1G。

软件环境搭建:

软件的版本如下:

Apache 版本:2.054,

Tomcat5.0.30,

mysql :4.1.14.

JDK1.5

压力测试工具:Loadrunner7.8。

负载平衡方案如下:

一台机器(操作系统2003)安装apache,作为负载服务器,并安装tomcat作为一个worker;一个单独安装tomcat,作为第二个worker;剩下的一台单独作为数据库服务器。

Apache和tomcat的负载平衡采用JK1.2.14(没有采用2.0,主要是2.0不再维护了)。

集群方案:

采用Tomcat本身的集群方案。在server.xml配置。

压力测试问题:

压力测试后,发现了一些问题,现一一列出来:

(1) 采用Tocmat集群后,速度变得很慢。因为集群后,要进行session复制,导致速度较慢。Tomcatd的复制,目前不支持application复制。复制的作用,主要用来容错的,即一台机器有故障后,apache可以把请求自动转发到另外一个机器。在容错和速度的考虑上,我们最终选择速度,去掉了Tomcat集群。

(2) 操作系统最大并发用户的限制:

为了采用网站的压力,我们开始的时候,仅测试Tomcat的最大负载数。Tomcat服务器安装的操作系统是windows2000 Professional。当我们用压力测试工具,并发测试时,发现只要超过15个并发用户,会经常出现无法连接服务器的情况。经过研究,发现是操作系统的问题:windows2000 Professional 支持的并发访问用户有限,默认的好像是15个。于是我们把操作系统全部采用windows2003 server版本。

(3) 数据库连接池的问题:

测试数据库连接性能时,发现数据库连接速度很慢。每增加一些用户,连接性能就差了很多。我们采用的数据库连接池是DBCP,默认的初始化为50个,应该不会很慢吧。查询数据库的连接数,发现初始化,只初始化一个连接。并发增加一个用户时,程序就会重新创建一个连接,导致连接很慢。原因就在这里了。如何解决呢?偶尔在JDK1.4下的Tomcat5.0.30下执行数据库连接压力测试,发现速度很快,程序创建数据库连接的速度也是很快的。看来JDK1.5的JDBC驱动程序有问题。于是我们修改 JDK的版本为1.4.

(4) C3P0和DBCP

C3P0是Hibernate3.0默认的自带数据库连接池,DBCP是Apache开发的数据库连接池。我们对这两种连接池进行压力测试对比,发现在并发300个用户以下时,DBCP比C3P0平均时间快1秒左右。但在并发400个用户时,两者差不多。

速度上虽然DBCP比C3P0快些,但是有BUG:当DBCP建立的数据库连接,因为某种原因断掉后,DBCP将不会再重新创建新的连接,导致必须重新启动Tomcat才能解决问题。DBCP的BUG使我们决定采用C3P0作为数据库连接池。

调整后的方案:

操作系统 Windows 2003 server版本

JDK1.4

Tomcat 5.0.30

数据库连接池C3P0

仅采用负载平衡,不采用集群。

软件的配置:

Apache配置:主要配置httpd.conf和新增加的文件workers.properties

Httpd.conf:

#一个连接的最大请求数量

MaxKeepAliveRequests 10000

#NT环境,只能配置这个参数来提供性能

<IfModule mpm_winnt.c>

#每个进程的线程数,最大1920。NT只启动父子两个进程,不能设置启动多个进程

ThreadsPerChild 1900

每个子进程能够处理的最大请求数

MaxRequestsPerChild 10000

</IfModule>

# 加载mod_jk

#

LoadModule jk_module modules/mod_jk.so

#

# 配置mod_jk

#

JkWorkersFile conf/workers.properties

JkLogFile logs/mod_jk.log

JkLogLevel info

#请求分发,对jsp文件,.do等动态请求交由tomcat处理

DocumentRoot "C:/Apache/htdocs"

JkMount /*.jsp loadbalancer

JkMount /*.do loadbalancer

JkMount /servlet/* loadbalancer

#关掉主机Lookup,如果为on,很影响性能,可以有10多秒钟的延迟。

HostnameLookups Off

#缓存配置

LoadModule cache_module modules/mod_cache.so

LoadModule disk_cache_module modules/mod_disk_cache.so

LoadModule mem_cache_module modules/mod_mem_cache.so

<IfModule mod_cache.c>

CacheForceCompletion 100

CacheDefaultExpire 3600

CacheMaxExpire 86400

CacheLastModifiedFactor 0.1

<IfModule mod_disk_cache.c>

CacheEnable disk /

CacheRoot c:/cacheroot

CacheSize 327680

CacheDirLength 4

CacheDirLevels 5

CacheGcInterval 4

</IfModule>

<IfModule mod_mem_cache.c>

CacheEnable mem /

MCacheSize 8192

MCacheMaxObjectCount 10000

MCacheMinObjectSize 1

MCacheMaxObjectSize 51200

</IfModule>

</IfModule>

worker. Properties文件

#

# workers.properties ,可以参考

http://jakarta.apache.org/tomcat/connectors-doc/config/workers.html

# In Unix, we use forward slashes:

ps=

# list the workers by name

worker.list=tomcat1, tomcat2, loadbalancer

# ------------------------

# First tomcat server

# ------------------------

worker.tomcat1.port=8009

worker.tomcat1.host=localhost

worker.tomcat1.type=ajp13

# Specify the size of the open connection cache.

#worker.tomcat1.cachesize

#

# Specifies the load balance factor when used with

# a load balancing worker.

# Note:

# ----> lbfactor must be > 0

# ----> Low lbfactor means less work done by the worker.

worker.tomcat1.lbfactor=900

# ------------------------

# Second tomcat server

# ------------------------

worker.tomcat1.port=8009

worker.tomcat1.host=202.88.8.101

worker.tomcat1.type=ajp13

# Specify the size of the open connection cache.

#worker.tomcat1.cachesize

#

# Specifies the load balance factor when used with

# a load balancing worker.

# Note:

# ----> lbfactor must be > 0

# ----> Low lbfactor means less work done by the worker.

worker.tomcat1.lbfactor=2000

# ------------------------

# Load Balancer worker

# ------------------------

#

# The loadbalancer (type lb) worker performs weighted round-robin

# load balancing with sticky sessions.

# Note:

# ----> If a worker dies, the load balancer will check its state

# once in a while. Until then all work is redirected to peer

# worker.

worker.loadbalancer.type=lb

worker.loadbalancer.balanced_workers=tomcat1,tomcat2

#

# END workers.properties

#

Tomcat1配置:

<!--配置server.xml

去掉8080端口,即注释掉如下代码:-->

<Connector

port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

debug="0" connectionTimeout="20000"

disableUploadTimeout="true" />

<!--配置8009端口如下:-->

<Connector port="8009"

maxThreads="500" minSpareThreads="400" maxSpareThreads="450"

enableLookups="false" redirectPort="8443" debug="0"

protocol="AJP/1.3" />

<!--配置引擎-->

<Engine name="Catalina" defaultHost="localhost" debug="0" jvmRoute="tomcat1">

启动内存配置,开发configure tomcat程序即可配置:

Initial memory pool: 200 M

Maxinum memory pool:300M

Tomcat2配置:

配置和tomcat1差不多,需要改动的地方如下:

<!--配置引擎-->

<Engine name="Catalina" defaultHost="localhost" debug="0" jvmRoute="tomcat2">

启动内存配置,开发configure tomcat程序即可配置:

Initial memory pool: 512 M

Maxinum memory pool:768M

Mysql配置:

Server类型:Dedicated MySQL Server Machine

Database usage:Transational Database Only

并发连接数量:Online Transaction Processing(OLTP)

字符集:UTF8

数据库连接池的配置:

我们采用的是spring 框架,配置如下:

<property name="hibernateProperties">

<props>

<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

<prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>

<prop key="hibernate.connection.url">jdbc:mysql://202.88.1.103/db</prop>

<prop key="hibernate.connection.username">sa</prop>

<prop key="hibernate.connection.password"></prop>

<prop key="hibernate.show_sql">false</prop>

<prop key="hibernate.use_sql_comments">false</prop>

<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>

<prop key="hibernate.max_fetch_depth">2</prop>

<prop key="hibernate.c3p0.max_size">200</prop>

<prop key="hibernate.c3p0.min_size">5</prop>

<prop key="hibernate.c3p0.timeout">12000</prop>

<prop key="hibernate.c3p0.max_statements">50</prop>

<prop key="hibernate.c3p0.acquire_increment">1</prop>

</props>

</property>

其他的没有额外配

 


招聘信息  |  关于我们  |  报名学习   |  网站地图  |  高考专题  |  诚聘英才
  站点地图 法律声明 隐私政策 联系我们
版权所有:北大青鸟徐州蓝海 网站制作:徐州蓝海
徐州建国东路29号人寿大楼东门一楼 电话:0516-83821111
邮箱:xzlanhai@126.com  苏ICP备05072183号