最近做高校云平台,因为在这套平台下有多个系统在一起运行着,各个系统间都有一定的联系,所以该云平台采用单点登录,采用的cas。但是当我们系统开发完成以后,在进行考试测试的时候,同时大约有300多人同时进行登陆,输入网址以后根本跳转不到登陆页,后来就想着该如何去优化他。
首先我考虑的是,硬件的配置是不是不行,确实硬件的配置很低端,4G内存,500G硬盘,winserver2008 的,带宽是100M的,但是这个问题就要掏钱的,所以我们也不能解决。所以只能考虑优化我们的程序了!
首先我们打开网络监控,输入网址,发现有两个请求一直收不到回应,如下图所示。
图中可以看到这两个JS是从google官网下载,但是现在google不能访问了,所以请求总是不能发送出去,并一直处于发送状态。这样频繁的尝试发送,就会占用很大一份带宽,并且占用处理器的时间,来处理这件事情。所以我们尝试将这两个js下载下来,放在本地,并加载本地的js。这个js在cas\WEB-INF\view\jsp\default\ui\includes 下的bottom.jsp中, 可以看到将原来从google下载的js,存放到本地了,并加载本地的js。
</div>
<div id="footer" class="fl-panel fl-note fl-bevel-white fl-font-size-80">
<a id="jasig" href="http://www.jasig.org" title="go to Jasig home page"></a>
<div id="copyright">
<p>Copyright © 2005 - 2012 Jasig, Inc. All rights reserved.</p>
<p>Powered by <a href="http://www.jasig.org/cas">Jasig Central Authentication Service <%=org.jasig.cas.CasVersion.getVersion()%></a></p>
</div>
</div>
</div>
</div>
<!--这两个js放在本地,运行时加载本地的js -->
<script type="text/javascript" src="../../../../../../jquery.min.js"></script>
<script type="text/javascript" src="../../../../../../jquery-ui.min.js"></script>
<!-- 原来是从google下载的
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/jquery-ui.min.js"></script>-->
<script type="text/javascript" src="<c:url value="/js/cas.js" />"></script>
</body>
</html>
这样修改以后就会减少一部分占用处理器时间,并占用少的带宽。但是这样也没有解决问题,然后我们又尝试配置一下数据库的连接池,连接池分为两种,一中是配置在tomcat中,部署在该tomcat中的所有应用都使用,另外一种是配置在单独的应用中。
配置数据库连接池分为两步,第一步cas\META-INF下建立一个context.xml文件,并写入如下代码
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/">
<Resource
name="myDS"
type="javax.sql.DataSource"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
maxIdle="200"
maxWait="5000"
username="sa"
password="123456"
url="jdbc:microsoft:@sqlserver://192.168.24.233:1433;DatabaseName=ITOO_Authority"
maxActive="150"/>
<!--name:DataSource的名称-->
<!--type:数据源对应的java类型,一般设计为javax.sql.DataSource-->
<!--username:数据库登陆名-->
<!--password:数据库登陆密码-->
<!--driverClassName:指定数据库JDBC驱动程序-->
<!--url:指定数据库的URL-->
<!--maxIdle:连接池处于空闲状态的数据库连接的最大数目,取0表示不受限制-->
<!--maxWait:连接池中数据库连接处于空闲状态的最长时间(以毫秒为单位),取0表示无限制等待时间-->
<!--maxActive:连接池处于活动状态的数据库连接的最大数目,去0表示不受限制-->
</Context>
然后再cas\WEB-INF下的web.xml中加入如下代码
<resource-ref>
<res-ref-name>jdbc/myDS</res-ref-name>
<!-- myDs跟context.xml中的NAME一致-->
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
这样我们数据库的连接池就配置好了,但是连接池的数目应该根据我们实际情况来设定。这样优化之后,速度会提升很多,但可能还有些不满足要求,所以后来又想搭建一个cas集群,一个tomcat 处理的用户数量有限,那个多几个tomcat就会有更好的处理速度,用数量换取质量。至于如何搭建tomcat 集群,将在下一篇文章中进行讲解!敬请期待!