`
allwefantasy
  • 浏览: 46945 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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提供的负载均衡功能

 

 

 

分享到:
评论
1 楼 modiliany 2012-04-30  
楼主的经验挺宝贵,问一下, 同一台web服务器上应该可以跑多个tomcat吧,做它们之间的负载均衡

相关推荐

    jenkins_plugins.tar.gz

    Jenkins,作为一款广泛应用的持续集成/持续部署(CI/CD)工具,其强大的功能离不开丰富的插件生态。"jenkins_plugins.tar.gz"这个压缩包文件包含了多个Jenkins插件,它们是扩展Jenkins功能的关键组件。接下来,我们将...

    Python库 | artetv_dl-1.0.4-py2.py3-none-any.whl

    这个库的版本为1.0.4,兼容Python 2和Python 3,意味着无论你使用的是哪个版本的Python,都可以顺利安装和使用。 首先,我们来解析一下文件名。`artetv_dl`是库的名字,暗示它是用来下载或处理与Artetv相关的数据。...

    Python库 | pulumi-1.8.0a1576644331-py2.py3-none-any.whl

    Python库“pulumi-1.8.0a1576644331-py2.py3-none-any.whl”是一个特定版本的Pulumi软件包,它用于Python开发,支持Python 2和3版本。Pulumi是一种现代化的基础设施即代码(IAC)工具,允许开发者使用熟悉的编程语言,...

    Python库 | django_healthchecks-1.0.0-py2.py3-none-any.whl

    1. **持续集成/持续部署(CI/CD)流程**:在部署新代码之前,CI/CD工具可以先进行健康检查,确保服务在更新后仍能正常运行。 2. **监控工具集成**:与Prometheus、Grafana、Datadog等监控工具结合,实时获取服务状态。...

    Swarm-2.2-java.zip

    在Java开发环境中,使用Swarm可以帮助开发者构建、部署和扩展基于Docker的分布式应用。本压缩包"Swarm-2.2-java.zip"显然是针对使用Java进行Swarm开发的一个资源集合,可能包含了必要的库、示例代码或文档,帮助Java...

    jenkins-2.190.2.zip

    7. **集成工具**:Jenkins 可与各种开发工具无缝集成,包括但不限于 Git、SVN、Maven、Gradle、Ant、Junit、SonarQube 等,实现自动化工作流。 8. **邮件通知**:Jenkins 可以配置在构建失败时发送邮件通知,帮助...

    Python-Gitlab的Kubernetes部署工具

    标题"Python-Gitlab的Kubernetes部署工具"暗示了我们讨论的主题是使用Python编写的工具,该工具能够帮助用户在GitLab中更方便地与Kubernetes集群进行交互,实现应用的自动化部署和管理。这种集成使得开发团队能够在...

    Linux-CentOS中redisCluster部署指南(redis-5.0.3)

    对于集群,还需考虑如何在不中断服务的情况下进行热备份。 通过以上步骤,您可以在Linux-CentOS环境下成功部署并管理Redis Cluster 5.0.3版本。文档中的“Linux中redisCluster部署指南(redis-5.0.3).docx”应提供了...

    linux-stm32.st-md-mailman.stormreply.com.0

    10. **持续集成(CI)与持续部署(CD)**:在大型项目中,利用Jenkins、Travis CI等工具实现代码的自动化测试和部署,确保软件质量。 综上所述,这个压缩包可能包含了一个基于Linux的STM32开发项目,涵盖了从驱动开发、...

    mha4mysql-node-0.57.tar.gz

    MHA是由Google开发并维护的一个管理工具,它能够自动检测MySQL主服务器的故障,并在发生故障时快速将从服务器提升为主服务器,从而最大限度地减少服务中断时间。MHA由三部分组成:Manager、Node和Tools。在“mha4...

    jenkins.war-2.356,适合JDK8的最后jenkins版本

    升级到这个版本可能会带来更多的改进和新特性,但需要注意的是,如果之前使用的Jenkins插件或工作流与新版本不兼容,可能需要进行相应的调整。 在使用Jenkins时,有以下几个关键知识点: 1. **安装与配置**:...

    Github.com Service Status-crx插件

    2. **持续集成/持续部署(CI/CD)**:对于使用GitHub Actions或其他基于GitHub的CI/CD流程的项目,插件可以预防因服务不稳定带来的构建失败。 3. **代码托管**:个人开发者可以依赖插件来监控自己的代码存储库,确保...

    Jenkins2.19.3 自动化部署项目

    Jenkins 支持蓝绿部署和滚动更新策略,这些高级部署方式可以减少服务中断,提高用户体验。蓝绿部署是在现有(绿)环境和新的(蓝)环境中切换,而滚动更新则是逐步替换线上实例,确保服务的连续性。 9. **集成测试...

    自动化测试框架设计时应该考虑的20个方面

    - **无缝集成**:测试框架应当容易集成到现有的开发流程中,比如持续集成/持续部署(CI/CD)流程。 - **工具兼容性**:与常用的开发工具和测试工具兼容。 ### 7. 报告功能 - **详尽报告**:测试完成后能够生成详细...

    阿里云 专有云企业版 V3.6.1 企业级分布式应用服务EDAS 开发指南 - 20181105.pdf

    3. **责任限制**:阿里云提供文档的目的是作为用户使用产品的参考,但不保证文档内容的绝对准确性、完整性、适用性和可靠性。因此,阿里云对因使用或信赖文档导致的任何损失或损害不承担法律责任,包括但不限于利润...

    J2EE完全参考手册-J2EE部署

    10. **热部署与更新**:J2EE服务器通常支持热部署,允许在不中断服务的情况下更新应用。这在开发和生产环境中都非常重要。 11. **性能调优**:J2EE部署涉及内存管理、线程池配置、连接池优化等多个方面,以确保应用...

    阿里云 专有云企业版 V3.5.2 容器服务 开发指南 - 20180831.pdf

    3. **法律声明**: 用户在使用阿里云提供的文档和服务时,需遵守一系列法律条款,包括但不限于仅能用于自身合法合规的业务活动,不能擅自披露、传播或修改文档内容,以及对文档内容的准确性、完整性等不做任何保证。...

Global site tag (gtag.js) - Google Analytics