Web应用程序部署到有限的用户群

时间:2009-08-13 15:24:29

标签: php apache deployment mod-rewrite

我正在尝试确定部署已建立的Web应用程序的新版本的最佳方式。在过去,我已经做了几种不同的方式,但这次我们希望做一些不同/更好的事情。

我们正在使用开发/登台/制作服务器。开发完成并测试基本功能后,我们在登台服务器上使用升级的生产数据库运行开发代码。如果我们的内部质量保证在暂存环境中没有发现问题,我们会对这些更改进行实时更新。

最后一步是通过以下两种方式完成的:

  1. 升级代码和数据库 在使用率低的时候,做一个 一点点测试,以确保 升级顺利,然后交叉手指 并希望用户找不到一些 QA错过的错误,随时准备好 灭火或归还 以前版本的主要版本 故障。

  2. 创建新版本的 在不同的URL上申请。复制 将生产数据库改为新的 版本,清空它,然后复制 所选用户的数据和 他们使用新的URL。即,他们 将从中访问该应用程序 www2.example.com而不是 www.example.com。每一个慢慢移动 用户到新版本然后切换 网址回来了。

  3. 这次我正在考虑做两种方法的结合。基本上,我正在考虑将少数用户移动到新服务,同时保持相同的URL。

    这是我正在考虑在虚拟主机中做的事情。移动新用户时将生成/更新Map.txt。 (我查看了使用prg重写映射,但我担心apache会挂着等待脚本。)

    <VirtualHost *:80>
    ServerAdmin webmaster@lotsa.net
    DocumentRoot /web/www.example.com
    ServerName www.example.com
    
    RewriteEngine  on
    
    RewriteMap deploymentmap txt:/web/map.txt
    
    RewriteRule ^/id/([0-9]+)/(.*)$ ${deploymentmap:$1}/id/$1/$2
    
    </VirtualHost>
    
    map.txt:
    
    10001 /web/www2.example.com/
    10002 /web/www2.example.com/
    10003 /web/www2.example.com/
    10004 /web/www2.example.com/
    10005 /web/www2.example.com/
    

    此部署策略是否存在明显缺陷?我错过了一些简单有效,不那么痛苦的升级方法吗?

    提前感谢您的任何帮助。

    -Paul

1 个答案:

答案 0 :(得分:0)

没有人回答,所以我会回答自己的后代。 : - )

此方法适用于在旧代码库上分阶段部署新代码库。在我们的特定情况下,我们使用类似于上面的方法进行了部署。最初,所有用户都使用旧系统启动,重写映射文件的大小约为800K。由于新的重写指令,服务器提供了超过100K的页面,速度没有明显的差异。

我很惊讶在更改删除文件中的条目后不必重新启动Apache(文档暗示此文件仅在启动时读取)。 Apache立即获取了对地图的更改,因此它必须在每个请求中查看它,或者更有可能检查时间戳/校验和以查看它是否不同。

类似的技术不仅可用于部署,还可用于A / B测试,尤其是在数据结构不变的情况下。