angular 应用的零停机部署
Zero downtime deployment for angular app
我有一个托管在 AWS 上的 restful angular 应用程序,我正在寻找一种简洁快速的部署解决方案来让新网站上线,而无需关闭之前的网站。我没有太多 DevOps 经验,所以任何建议都很好。该站点已满 RESTFUL,因此它只是静态页面。
我正在考虑设置一个 dokku with AWS plugin solution,但我很确定它有点矫枉过正,并且可能无法检测到我的应用程序,因为它只是静态页面(没有节点、rails 等)。
尝试使用 git 存储库进行实时部署 https://danbarber.me/using-git-for-deployment/
一个简单的解决方案是使用 ELB。这将使您能够部署新实例、部署代码、测试它、更新 ELB 以将流量切换到新实例,然后您可以删除旧实例。
一个简单的解决方案是始终 运行 两个实例,一个生产和一个舞台。这些家伙应该是相同的和可互换的(因为他们要切换。为您的产品分配一个弹性 ip。当需要更新时,将代码复制到暂存中,确保它正常工作,然后将弹性 ip 附加到暂存中。现在正在生产,现在正在生产。这不是一个理想的解决方案,但它非常简单,相同的原则适用于更好的解决方案。
更好的解决方案涉及弹性负载平衡器。确保附加了 2 个实例。当需要更新时,分离实例,执行更新,确保它正在工作并重新附加它。现在您将有一个简短的时间点,客户可以在该时间点获取您的新网站或旧网站。分离另一个旧笔记,执行更新并重新附加。
事实上,即使您只是覆盖实时服务器上的文件,也只有 10 毫秒 window 左右,客户端可以获得一个文件的新版本(例如 html) 和另一个的旧版本(例如 css)。之后就完美了。
我们最终选择了 TeamCity build/tests 并通过 Shipit 进行部署。
执行此操作的最佳方法是即时重新配置 Web 服务器以指向新应用程序。
将新版本的应用程序安装到新位置,更新 Web 服务器配置文件以指向新位置,然后重新加载服务器。
对于飞行中的请求,它们将由旧应用程序满足,所有新请求将到达新应用程序,它们之间没有停机时间,除了刷新网络服务器时的微小延迟(不要重新启动它,只需挠它一下即可重新加载它的配置文件)。
同样,您可以仅在文件系统上执行此操作,方法是将新应用程序安装在与旧应用程序平行的新目录中。那么:
mv appdir appdir.bak
mv appdir.new appdir
但这不是零停机时间,而是非常非常短的停机时间,因为两个 inode 已重命名。只要确保新旧目录都在同一个文件系统上,mv 就会是即时的。优点是你可以用同样的方式简单地"undo"操作。
有一个 window 您根本没有应用程序。在几分之一秒内将没有 appdir
,您将在这几微秒内提供 404。因此,请在系统安静时执行此操作。但它的仪器和操作是微不足道的。
我有一个托管在 AWS 上的 restful angular 应用程序,我正在寻找一种简洁快速的部署解决方案来让新网站上线,而无需关闭之前的网站。我没有太多 DevOps 经验,所以任何建议都很好。该站点已满 RESTFUL,因此它只是静态页面。
我正在考虑设置一个 dokku with AWS plugin solution,但我很确定它有点矫枉过正,并且可能无法检测到我的应用程序,因为它只是静态页面(没有节点、rails 等)。
尝试使用 git 存储库进行实时部署 https://danbarber.me/using-git-for-deployment/
一个简单的解决方案是使用 ELB。这将使您能够部署新实例、部署代码、测试它、更新 ELB 以将流量切换到新实例,然后您可以删除旧实例。
一个简单的解决方案是始终 运行 两个实例,一个生产和一个舞台。这些家伙应该是相同的和可互换的(因为他们要切换。为您的产品分配一个弹性 ip。当需要更新时,将代码复制到暂存中,确保它正常工作,然后将弹性 ip 附加到暂存中。现在正在生产,现在正在生产。这不是一个理想的解决方案,但它非常简单,相同的原则适用于更好的解决方案。
更好的解决方案涉及弹性负载平衡器。确保附加了 2 个实例。当需要更新时,分离实例,执行更新,确保它正在工作并重新附加它。现在您将有一个简短的时间点,客户可以在该时间点获取您的新网站或旧网站。分离另一个旧笔记,执行更新并重新附加。
事实上,即使您只是覆盖实时服务器上的文件,也只有 10 毫秒 window 左右,客户端可以获得一个文件的新版本(例如 html) 和另一个的旧版本(例如 css)。之后就完美了。
我们最终选择了 TeamCity build/tests 并通过 Shipit 进行部署。
执行此操作的最佳方法是即时重新配置 Web 服务器以指向新应用程序。
将新版本的应用程序安装到新位置,更新 Web 服务器配置文件以指向新位置,然后重新加载服务器。
对于飞行中的请求,它们将由旧应用程序满足,所有新请求将到达新应用程序,它们之间没有停机时间,除了刷新网络服务器时的微小延迟(不要重新启动它,只需挠它一下即可重新加载它的配置文件)。
同样,您可以仅在文件系统上执行此操作,方法是将新应用程序安装在与旧应用程序平行的新目录中。那么:
mv appdir appdir.bak
mv appdir.new appdir
但这不是零停机时间,而是非常非常短的停机时间,因为两个 inode 已重命名。只要确保新旧目录都在同一个文件系统上,mv 就会是即时的。优点是你可以用同样的方式简单地"undo"操作。
有一个 window 您根本没有应用程序。在几分之一秒内将没有 appdir
,您将在这几微秒内提供 404。因此,请在系统安静时执行此操作。但它的仪器和操作是微不足道的。