连续“热”部署角度Web应用程序

时间:2014-02-26 18:49:41

标签: node.js angularjs deployment web-deployment

如何在不中断服务的情况下部署新版AngularJS单页面Web应用程序(基于API)?

我们终于需要:

  • 更新来源(服务器和客户端)
  • 迁移/更新数据库
  • 重新启动服务器

即使使用负载均衡器和最后2台旋转服务器(一台更新而另一台正在服务),我无法在不中断服务且不丢失用户数据的情况下找到一种安全的方式来部署新版本。

想象一下,用户在我们的网络应用程序中处理复杂文档。我们无法在工作会议期间强制重新加载页面......

怎么做? 如果不可能,如何缓解这个问题?

1 个答案:

答案 0 :(得分:2)

服务器端

好吧,让您的服务无状态并将会话转移到客户端会容易得多 - 您根本不需要使用会话(这种方法)虽然有它自己的缺点。

客户端

在这种情况下,您需要一个带有健康检查的循环负载均衡器(最简单的)。然后,您将能够轻松地逐个更新服务器端。

客户端更新(简单的静态资产交换)期间是否需要重新启动服务取决于您用于为资产提供服务的网络服务器。

数据库

数据库完整性是一个棘手的主题。实现此目的的一种方法是创建数据库复制群集 - 主服务器和从属服务器。当你的主人失败时,其中一个奴隶正在为客户服务。当主设备启动时,从设备会将间歇性数据推送回主设备,并为主设备提供服务客户端的权限。怎么做? 这是真正的问题:)

某些数据库支持二进制模式演变 - 它们可以根据模式更改将数据从副本更新为主数据。

某些数据库具有实时架构支持,但仍然非常有限。

变通方法

由于您有文档编辑功能且没有实时更新/读取,您可以在客户端缓存用户数据(例如,使用localStorage)。

所有修改都可以存储为增量,修改数据库状态(类似于事件采购)。

或者您可以存储整个文档模型(增量必须用于协作编辑)。

当您在保存过程中收到服务器的错误响应时,您只需继续依赖客户端的缓存。

当您遇到连接问题时,不要忘记告诉您的用户他可能会丢失一些数据。这是为了良好的用户体验。

恢复

每个方面都没有银弹。流程步骤始终取决于项目上下文。

更新过程应提前考虑并成为系统设计活动的一部分。