角应用程序的零停机时间部署

时间:2015-05-20 13:44:05

标签: angularjs amazon-web-services deployment

我有一个托管在AWS上的宁静角度应用程序,我正在寻找一个干净,快速的部署解决方案,让新网站无需取消之前的新网站。我没有太多的DevOps经验,所以任何建议都会很棒。该网站是完整的RESTFUL所以它只是静态页面。

我正在考虑设置一个dokku with AWS plugin solution但是非常确定它有点过分,可能无法检测到我的应用,因为它只是静态页面(没有节点,轨道等)。

5 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是即时重新配置Web服务器以指向新应用程序。

将新版本的应用安装到新位置,更新Web服务器配置文件以指向新位置,然后重新加载服务器。

对于飞行请求,它们将被旧应用程序满意,并且所有新请求都将到达新应用程序,它们之间没有停机时间,除了刷新Web服务器时的微不足道的延迟(不要重新启动)它,只需要重新加载它的配置文件)。

同样,您只能在文件系统上执行此操作,方法是将新应用程序安装在与旧目录平行的新目录中。然后:

mv appdir appdir.bak
mv appdir.new appdir

但这不是零停机时间,但是因为两个inode被重命名,所以停机非常非常短。只需确保新旧目录都在同一个文件系统上,并且mv将是即时的。优点是你可以轻而易举地撤消"操作方式相同。

有一个窗口,你根本没有应用程序。在几分之一秒内,将没有appdir,并且您将在几微秒内提供404秒。所以,在系统安静时这样做。但要做到这一点并不容易。

答案 1 :(得分:0)

尝试使用git repo进行实时部署https://danbarber.me/using-git-for-deployment/

答案 2 :(得分:0)

一个简单的解决方案是使用ELB。这将使您能够部署新实例,部署代码,测试它,更新ELB以将流量切换到新实例,然后您可以删除旧实例。

答案 3 :(得分:0)

一个简单的解决方案是始终运行两个实例,一个生产和一个阶段。这些人应该是相同的和可互换的(因为他们将要切换。为你的作品分配一个弹性ip。当它需要更新时,将代码复制到分段,确保它正常工作,并且然后将弹性ip连接到分段。现在生产和生产正在进行分段。这不是一个理想的解决方案,但它很容易,相同的原理适用于更好的解决方案。

更好的解决方案涉及弹性负载平衡器。确保附加了2个实例。在需要更新时,分离实例,执行更新,确保它正在运行并重新附加。现在,您将有一个简短的时间点,客户可以获得您的新网站或旧网站。分离其他旧注释,执行更新并重新连接。

事实上,即使您只是覆盖实时服务器上的文件,也只有10毫秒左右的窗口,客户端可以获得一个文件的新版本(例如html)和另一个文件的旧版本(例如css)。之后它将再次完美。

答案 4 :(得分:0)

我们最终选择TeamCity进行构建/测试并通过Shipit进行部署。

https://github.com/shipitjs/grunt-shipit

https://www.jetbrains.com/teamcity/