繁体   English   中英

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

[英]Continuous “hot” deployment of an angular web app

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

我们终于需要:

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

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

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

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

服务器端

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

客户端

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

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

数据库

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

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

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

解决方法

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

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

或者您可以只存储整个文档模型 (增量是协作编辑必备的)。

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

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

恢复

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM