我开始了一个项目,我开始有很多网络流量,在某些时候,我觉得如何在两个问题上将项目扩展到生产是不安全的:
我有使用Hydra-express的微服务,我无法实现Hydra-router,我使用Express.js;我也有NGINX作为代理网关。
我正在使用ES6进行编程,使用BABEL进行编译并使用PM2维护活动的微服务,其中一些使用fork,在集群模式下最重要。
我正在考虑使用docker,但是我还没有找到任何关于如何将它与CDN一起使用,上传文件并将其提供给用户的教程。
答案 0 :(得分:2)
不可能给2一个明确的答案,因为这完全取决于应用程序的作用,你可以申请没有银弹配置。
这留下了第一个点,即一个名为零停机时间的东西。
因此,在让多个服务器向用户返回内容的情况下,例如, http服务器我想可以公平地说,大多数生产环境的前端都有某些与业务逻辑无关。这可能是负载均衡器(有许多形状和形式)或反向代理。这通常是您指向DNS A记录的位置。该服务器基本上永远不会失效。
现在,假设您已经更改了一些业务逻辑并希望部署新的后端。您通常做的是逐个交换负载均衡器(或反向代理)后面已经运行的进程。因此,如果您有五个节点进程,则停止一个,使用更新的代码启动一个新进程,然后重复直到所有运行都被换出。
您也可以利用它来换掉一个,在那个上运行测试,然后继续换掉其余的。
要确保您不会中断任何用户,您应该停止接受旧进程上的新http请求,以便将新的http请求路由到更新的进程。这将允许正在进行的http请求完成。然后你停止旧的流程。
希望这会有所帮助。
答案 1 :(得分:1)
添加到@ralphtheninja的答案,我建议你阅读更多关于蓝绿色部署的内容,正如Martin Fowler所提出的那样; https://martinfowler.com/bliki/BlueGreenDeployment.html
自动部署的挑战之一是切换本身,将软件从测试的最后阶段带到现场制作。您通常需要快速执行此操作以最大限度地减少停机时间。蓝绿色部署方法通过确保您拥有两个尽可能相同的生产环境来实现此目的。在其中任何一个,让我们说蓝色的例子,是活的。在准备软件的新版本时,您将在绿色环境中进行最后的测试阶段。一旦软件在绿色环境中工作,您就切换路由器,以便所有传入的请求都进入绿色环境 - 蓝色环境现在处于空闲状态。
蓝绿色部署还为您提供了快速回滚方式 - 如果出现任何问题,您可以将路由器切换回蓝色环境。
我不知道你的后端在哪里运行但是有一些服务会为你做,例如,AWS ElasticBeanstalk会将你的实例放在负载均衡器之后,并根据策略管理部署。看一看; https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.rolling-version-deploy.html。