CI/CD是常见的不停机发布方式。CI (Continuous Integration)持续集成,CD (Continuous Delivery)持续交付,CD (Continuous Deployment)持续部署,这三个概念构成一条连续的代码集成发布链。分别对应逻辑中的build-test-deploy。
我们的项目使用GitLab工具来进行CI/CD,不停机发布,是指在不停止对外服务的前提下完成应用的更新。与热部署的区别在于,热部署关注于应用层面并且以不重启应用为前提,而不停机发布则关注于服务层面。不停机发布的两种方式:cluster模式和master/worker模式。
Cluster模式:如果在发布过程中,在更新任一节点(也可以是一组节点)前先关闭该节点对应的负载,更新完再打开负载,即可实现整体服务的不停机发布。在此基础上,为了保证服务的稳定性,可以加上备机的支持,即更新某一节点时,先挂上备机,更新完再卸下,依次轮换更新完所有节点后最后再升级备机。
Master/Worker模式:容器中常驻一个master进程和多个work进程,master进程只负责加载程序和分发请求,由fork出来的worker进程完成具体工作。当容器收到更新应用的信号时,master进程重新加载更新后的程序,然后fork新的worker进程处理新的请求,而老的worker进程在处理完当前请求后就自动销毁。