如何管理Web应用程序的逐步部署

时间:2011-02-10 17:51:13

标签: php apache deployment

我正在开发一个Web应用程序,并希望能够在我们的用户之间错开部署新版本和版本。例如......

  • 部署新版本的应用并将一些测试帐户迁移到其中进行测试
  • 当测试很满意时,请将5%的客户称为新版本,并监控这些客户的支持问题和服务器负载问题。
  • 如果仍然没问题,请逐渐将越来越多的客户转移到新版本,直到每个人都更新为止。

来自FogCreek的Fogbugz和Kiln正在使用这样的部署系统。你可以阅读它here...

我目前要解决的问题是系统上的不同帐户可以使用不同版本的代码

管理和控制这个的好方法是什么? Apache可以在这里做一些繁重的工作吗?我想避免过多的开销,或者奇怪的加载器脚本来确定发送请求的位置。像Fogbugz on Demand这样的网络应用如何处理这个问题?是否有公认的设计模式?

通过域名识别用户(例如user1.example.com,user-bob.example.com等)。

1 个答案:

答案 0 :(得分:3)

有很多方法可以实现这一目标;所以让我们在没有谈论架构细节的情况下进行高级思考:

  • Yahoo和MSN等大型公共网站使用随机样本处理设计更改,并设置长时间超时的Cookie,以确定谁应该接收新设计。
  • 对于付费升级和测试版邀请,您应该能够识别并标记哪些客户帐户在登录时会收到新的“设计”或功能集。例如,Digg v4的新更新仅适用于登录和选择加入的客户。通过新的个人资料页面,Facebook在他们的系统中进行了类似的推广。
  • 您可以决定为Beta测试人员付费。您可以轻松使用亚马逊的Mechanical Turk或像custfeedback.com这样的网站

具体细节取决于您和您的架构。希望您已经编写了具有此功能的软件;希望您提供了在部署时轻松提供应用程序和数据库升级的简便方法。 Magento(一个开源电子商务平台)处理得非常好。每个模块都以插件的形式构建,每个模块都记录了自己的版本。使用基于配置文件中保留的新/未来版本的安装和升级脚本,即时执行数据库升级。

您可以选择将Beta测试人员移动到新域或数据库,该域或数据库具有比生产计算机更详细的日志记录和实时分析。这是Kiln博客文章中提到的方法 - 他们引用了网站http://martinfowler.com/bliki/BlueGreenDeployment.html - 最终,无论您完成了帐户和流量的隔离,您最终都必须进行整合。您需要最有可能在维护窗口中执行迁移,并使每个人都达到相同的版本。

祝你好运!