二十一、Apache+Tomcat 实现负载均衡及seesion复制
当我们tomcat访问量大,线程连接数不够时,我们考虑到了tomcat的负载均衡来分担过多的访问.性能方面负载均衡也能利用多台tomcat来增大内存量,
流程,准备工作apache,Jk_mod,tomcat,在apache的conf/httpd.conf文件中 使用include 标签引入我们自定义的一个mood_jl.conf,在modules中引入下载的k_mod-apache-X.X.XX.so文件,在其中引入我们的.so,及work.properties文件,及指定负载分配控制器controller,在work.properties文件中worker.list=controller,tomcat1,tomcat2指定service,worker.tomcat1.port Ajp端口号,type 是ajp,host为指定ip,lbfactor 指定分配权重值越大分担请求越多,worker.controller.type=lbworker.controller.balanced_workers=tomcat1,tomcat2 指定分担请求的tomcat Session的复制在tomcat中service.xml中Engine标签加入 jvmRoute 值为work,properties中指定的tomcat名称,然后打开。
我们在做这个项目时,我们考虑到服务器性能的问题,我们最开始想到使用纵向扩展,来增加硬件的配置提高其性能,但这样做比较耗费资金,而且服务器内存空间也是有限的;所以后来就想到使用横向扩展来达到这一目的
当时我们的apache是通过jk借助于ajp协议与tomcat进行通信的,在我们不进行负载均衡之前,那所有的请求都由一台tomcat进行处理,这样会使我们的tomcat所承受的压力增大,而我们进行负载均衡之后,同样数量的请求经过apache和jk将其分发到多台tomcat进行处理,从而降低每台tomcat所承受的压力,而且当其中一台机器宕机时,其他机器还可以继续提供服务,保证服务不间断。
在这个过程中,我们遇到了session问题,然后我此昂到用session复制来解决这个问题;
在apache的配置文件中增加session粘带特性:
worker.lb.sticky_session=1
worker.lb.sticky_session_force=0
Tomcat的配置
修改server.xml文件:
增加jvmRoute=”tomcat2” *. jvmRoute赋的值为worker.properties中配置的相应的server名一致
将此配置的注释去掉
修改应用的web.xml文件
在应用中的web.xml文件中增加。
如果这样做,当第一次访问的时候,会把所以数据全部缓存到第一台服务器上,通过web配置文件,会把第一台缓存的数据全部复制到第二胎服务器上,这样做就加大网路通信量,导致阻塞,所以我们就想到了可以通过memcached分布式缓存来存取session从而解决上述问题。
二十二、Ant业务场景
Ant是基于java语言编写的,因此具有跨平台的特性,此外还具有简洁方便,灵活
配置的特性,因此我就在XX项目中使用ant进行项目的编译,打包,部署操作。使用ant
之后,如果我们在客户那里修改代码后,就可以直接使用ant进行编译,打包,部署,而不需要为了编译,打包,部署专门在客户那里安装eclipse.此外使用ant也可以直接和svn进行交互,下载源码的同时进行编译,打包,部署。
二十三、maven业务场景
maven业务场景
前段时间在研究maven,知道maven是一个项目管理工具,其核心特点就是通过
maven可以进行包的依赖管理,保证jar包版本的一致性,以及可以使多个项目共享
jar包,从而能够在开发大型j2ee应用的时候,减小项目的大小,并且和ant
比起来,maven根据“约定优于配置”的特性,可以对其项目的编译打包部署进行了
更为抽象的封装,使得自己不需要像ant那样进行详细配置文件的编写,直接使用
系统预定好的mvn clean,compile,test,package等命令进行项目的操作。于是我就
在XX项目中采用了maven,为了保证团队中的成员能够节省下载jar包所需要的时间,
于是我就采用nexus搭建了在局域网内的maven私服,然后通过配置settings.xml中
建立mirror镜像,将所有下载jar包的请求都转发到maven私服上,之后通过在pom.xml
即(project object model)中配置项目所依赖的jar包,从而达到在构建项目的时候,
先从本地仓库中查找,如果不存在从内部私服查找,如果不存在最后再从外网central
服务器查找的机制,达到了节省下载带宽,提高开发效率,以及jar包重用的目的。
ant业务场景
ant是基于java语言编写的,因此具有跨平台的特性,此外还具有简洁方便,灵活
配置的特性,因此我就在XX项目中使用ant进行项目的编译,打包,部署操作。使用ant
之后,如果我们在客户那里修改代码后,就可以直接使用ant进行编译,打包,部署,
而不需要为了编译,打包,部署专门在客户那里安装eclipse.此外使用ant也可以
直接和svn进行交互,下载源码的同时进行编译,打包,部署。
maven的常用命令
mvn eclipse:clean eclipse:eclipse -Dwtpversion=2.0
mvn clean package
maven的生命周期是独立的,但是生命周期下的阶段是相互关联并且延续的。
maven的生命周期
clean(清理):clean;default(默认):compile,test,packageinstall;site(站点)
二十四、Servlet的概述:
Servlet是一个web容器,我们通常用的servlet是httpservlet,而httpservlet又是继承于genericservlet,而genericservlet又实现了servlet接口
servlet的生命周期是 :先进行实例化,然后是初始化,然后是提高服务,然后销毁,最后不可用,在这五个生命周期,其中,初始化是调用的init方法,这个方法只有一个,而提高服务的时候调用的是service方法,而我们具体在我们所写的这个方法中,因为我们继承了httpservlet,其实就是对应了doGet(),doPost(),这种方法,然后据我了解,servlet是单例的。非线程安全的,我们通常有一下几种方案来解决:
第一种,继承SingleThreadModel但是这样每次都会创建一个新的servlet实例,但这样消耗服务器的内存,降低了性能,并且这个接口现在已经过时了,不推荐使用。
第二种:我们尽量避免使用全局变量,就我个人而言,我比较喜欢使用这种方法。
第三种,我们可以通过使用ThreadLocal, 内部结构是一个Map结构,用当前线程作为key,他会创建多个副本。get,set方法
第四种,我们当然还可以来加锁,进行解决线程问题。
而且我还知道,向我们这种常用的MVC框架,struts1,spring这些MVC框架,都是基于servlet发展而来的,就比如struts1 的核心总控制器是ActionServlet,而springMVC的前端总控制器是dispatchServlet,在项目我们曾经用serlet来生成 图片验证码的,防止用户进行暴力破解
(别人问了,再回答)
servlet的配置文件 web.xml
ImageCodeServlet org.leopard.code.ImageCodeServlet
ImageCodeServlet
/d
描述:
我在web.xml中,我首先需要写一个servlet标签,servlet标签中有两个子标签,一个叫servlet-name,这个name可以随便起,但是要保证唯一性,除此之外,在这个servlet-name下有一个servlet-class,这个servlet-class对应的就是我后台提高服务的servlet,除此之外还有一个servlet-mapping,这个里边首先有一个servl-name。,这个servl-name首先要保证和上边的servlet-name保持一致,除此之外还有一个url-pattern,这是一个虚拟路径,是用来发送请求的url地址
二十五、bugfree的操作步骤
我们在使用bugfree的时候我们首先登陆的时候是以测试员的身份登陆的,也就是系统管理员用户;测试员在登陆后首先应该给要测试的项目的相关负责人,每人创建一个账号(也就是在登陆后的页面的后台管理中创建用户),用户都新建完成之后就新建组,把要测试的项目的用户添加到组中。最后就新建项目并且新建该项目的模块。新建完项目之后就是开始测试程序,在程序中遇到bug以后就把错误截图,在到bugfree中新建bug填写相关的信息和要指派的人(出错模块的负责人)和把刚才的错误截图作为附件一并传送过去。
开发人员每天早上上班的第一件事就是用自己的用户登录bugfree,然后输入查询条件看看前一天有没有指派给自己的bug需要解决的如果有就进行解决。
开发人员把对应的bug解决之后就去bugfree上把bug对应的状态改成已解决状态,然后进行保存提交,这样bug的状态就变成已解决状态。测试人员上线查看已解决状态的bug并再次进行测试,如果经过测试bug的问题已解决,就可以把bug关闭;如果经过测试,发现仍然存在bug,就把bug激活;这样等开发人员再次登录的时候就可以再次看到这个未解决的bug,再次进行解决,如此反复直到bug全部解决,因为bugfree对bug的修改都有保留,所有我们可以看到bug的一步步的完善,直到最后把bug关闭。
Bug的三种状态:未解决(Active)(测试人员)、已解决(Resolved)(开发人员)、关闭(Closed)(测试人员)