Node.js “连续”;热的;部署angular web应用程序

Node.js “连续”;热的;部署angular web应用程序,node.js,angularjs,deployment,web-deployment,Node.js,Angularjs,Deployment,Web Deployment,如何在不中断服务的情况下部署新版本的AngularJS单页web应用程序(基于API) 我们最后需要: 更新源(服务器和客户端) 迁移/更新数据库的步骤 重新启动服务器 即使有一个负载平衡器和至少两个旋转服务器(一个在更新,另一个在服务),我也无法找到一种安全的方法来部署新版本,而不中断服务和不丢失用户数据 想象一个用户在我们的web应用程序中处理一个复杂的文档。我们无法在其工作会话期间强制重新加载其页面 怎么做? 如果不可能,如何缓解该问题?服务器端 好的,让您的服务成为无状态的,并将会话

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

我们最后需要:

  • 更新源(服务器和客户端)
  • 迁移/更新数据库的步骤
  • 重新启动服务器
即使有一个负载平衡器和至少两个旋转服务器(一个在更新,另一个在服务),我也无法找到一种安全的方法来部署新版本,而不中断服务和不丢失用户数据

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

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

服务器端 好的,让您的服务成为无状态的,并将会话移动到客户端,会容易得多——您根本不需要使用会话(尽管这种方法有它自己的缺点)

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

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

数据库 数据库完整性是一个棘手的话题。实现这一点的一种方法是创建DB复制群集-主服务器和从服务器。当主服务器关闭时,其中一个从服务器正在为客户端服务。当主机启动时,从机将间歇数据推回到主机,并授予主机为客户机服务的特权。怎么做?这才是真正的问题:)

一些数据库支持二进制模式演变——它们可以将模式更改方面的数据从副本更新到主副本

一些数据库支持动态模式,但仍然非常有限

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

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

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

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

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

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


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

从概念上讲,您可以使用包含会话管理的负载平衡器,这样您就可以将用户切换到另一台服务器,而不中断会话。我有一个客户有这样的设置;但是他们有负责细节的网络人员。关于服务器故障,这可能是一个更好的问题?@Reboog711那么db schéma呢?(甚至在NoSQL上)我们无法保持两个不同的软件版本同步…这取决于您的环境;我想是吧。我相信也有办法平衡数据库服务器的负载。因此,取下一个DB服务器和一个应用服务器。更新两者。在你放下另一个设置的同时把它们拿回来。@Reboog711然后在切换过程中创建的所有新数据都会丢失:-/有趣的链接现在我有很多事情要考虑。。。感谢您处理数据库问题!