12cd.com 开发分享--重新部署你的网站但不中断用户的使用

     Java程序的发布更新是件比较头疼的事情,因为需要重启生产服务器,所以你经常会看到很多网站会有如下的标语 

“网站将在 00:00-5:00 更新 暂停服务”之类的的话。当然也有很多其他的原因,比如网站被和@@谐了也在等待重新开张的机会通常也会这么说。题外话。   

 

     如何解决这个问题呢?如何做到网站重新部署而不中断用户的使用呢? 12cd初期就遇到这个问题,当时不断有新的功能推出,(当然也有新的bug发现)一个礼拜重新部署一到两次很正常。用户常常反馈网站为什么“老挂”(ps:对用户来说网站不能访问就是挂了 哈哈)。所以决定解决这个问题。

 

    要实现重新部署而不影响用户的正常使用,我们先看看12cd的服务器架构方面的东东。

 

    12cd使用了三台服务器,

 

  1.   一台WEB(4核4GRAM) 部署有Apache2,tomcat6 (还有PHP的网站)
  2.   一台DB(2核4GRAM)  部署有mysql数据库 和tomcat6
  3.   一台流媒体(2核4GRAM) 部署有Red5和一套基于Red5开发的WEB程序 还有memecached 服务器

 

       三台服务器使用的都是Linux系统。

 

     不知道大家注意到没,DB上也有个tomcat6应用服务器。关键就在这。我们看下面就能揭晓谜底

 

     配置apache服务器

     只需要在httpd.conf 文件中额外添加下面几句话:

 

ProxyRequests off
ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid  lbmethod=byrequests nofailover=Off
ProxyPassReverse / balancer://cluster/

<proxy balancer://cluster>
BalancerMember   ajp://127.0.0.1:8777 loadfactor=80 route=webjack
BalancerMember   ajp://dbserver:8777  status=+H  route=dbjack
</proxy>

 

   其中   ajp://dbserver:8009 指向的就是DB上的tomcat. Status=+H 指的是 DB是备用服务器。当然我这段配置文件文件是

   单独出来引入配置文件的。防止代理所有的请求。

 

 

   配置tomcat服务器

    在WEB服务器上的Tomcat添加

 

  

<Engine name="Catalina" defaultHost="localhost" jvmRoute="webjack">
  

    在DB上的添加

 

 

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="dbjack">
 

   当然你还要启用AJPConnector

 

 

 <Connector  port="8777" protocol="AJP/1.3" redirectPort="8443" URIEncoding="GBK"/>
 

 

  就这么多操作。我们模拟一下用户的流程,看会发生什么(首先请参看我上一篇文章  12cd.com 开发分享--简单session机制模拟解决跨域问题)。

  方便起见,我们把部署了apache2的服务器叫做Web,把DB服务器叫做DB

 

 

  1.    用户登录后,会写入cookie和在数据库onlineusers表中有记录
  2.    网站推出新功能,首先部署Web上的应用。此时Web上的tomcat将无法服务。但是这个时段可能会有很多用户正在使用Web上的服务。
  3.    由于我们开启了apache的负载均衡功能,所以此时apache会发现Web上的应用服务器已经无法使用。所以会把当前用户的请求定向到DB上的tomcat上
  4.    这个时候用户就被透明的定向到了DB的应用服务器上。但是DB服务器并没有存储用户的会话(虽然此时已经实现避免用户看到 服务暂停 的页面)
  5.    程序内部filter根据cookie以及onlineusers记录在DB上重新构建了用户的session.因此即使被定向到了DB上上,用户也无需重新登录。
  6.    Web 部署完毕后,我们再接着部署DB上的。此时用户将被重新定向到Web的应用与器上。
  7.    整个过程完美的实现了程序的重新部署和用户的无中断使用 cheers,dude! 呵呵

 

 

           当然能够实现上面的效果,得益与使用自定义cookie跟踪会话以及apache提供的负载均衡功能

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值