增量部署还是全量部署,该如何选择?

2016/01/15 - 上海 by 徐桂林

应用部署是工程人员(包括开发、测试和运维)每日面对的重要问题之一。尤其是在应用交付频率越来越高的当下,工程人员经常需要花费巨大的成本和心血来完成频繁的应用部署工作。在过去半年里面,我们接触了大量的企业客户,他们来自不同的行业,有着不同的规模,但我们发现他们在应用部署上面都有一个类似的困惑,即是应该选择增量部署还是全量部署。这里,我们希望展开阐述一下我们的观点。在开始讨论这个问题前,让我们首先重新明确两个问题。

在明确完上面两个问题之后,我们可以把这里要讨论的主题更准确的表述为“对一个部署单元应该采用增量还是全量方式进行部署?”

增量部署

增量部署一般指在每次部署过程中首先提取当前版本和即将部署版本之间的增量(包括代码、可执行文件或者配置等),并在部署过程中仅更新增量部分。这种部署方式的常见部署流程如下:

目前,这种部署方式在不少企业内部使用,尤其是在以动态语言(如PHP、Python、JavaScript等)为主的团队中使用得更为广泛。团队选择这种部署方式的主要原因可以总结如下:

增量部署与全量部署

在仔细比较这两种部署方式之前,我们有必要思考一下对一个部署操作来说,哪些考量是最为重要和核心的,也是我们应该优先保证的。在我们看来,一个部署操作最为重要的考量应该是部署操作的可重复性(repeatable)、可预测性(predictable)和可回滚性(undoable),其次才是考虑部署的效率和安全性。之所以这么定义优先级的最主要原因是当下系统部署普遍面临着下面“三多”挑战:

如果对照如上要求,我们会发现“增量部署”在满足这些需求上有不少的挑战,具体可以如下分析:

如果团队以“增量部署”作为日常部署方法,就必然需要面临维护两种部署模式,增量部署和全量部署。而如果统一使用“全量部署”则可以避免这个问题,一套部署流程统一两种不同部署需求,增强部署的可重复性。

如上这些挑战都让增量部署模式越来越难满足高频部署的工程需求,越来越多的自动化部署系统及工具都选择了全量部署模式。当然,在选择全量部署模式时,前面提到的全量部署模式弊端也需要认真考虑。简单来说,我们可以通过下面这些策略解决或者缓解这些弊端:

如何选择部署模式?

如前所述,越来越多的部署系统或者工具都选择全量部署模式,但这并不意味着增量部署没有用武之地。相反,很多状态相关的部署单元(例如,数据库)基本还无法采用全量部署模式,其中最为典型就是“数据库Schema”的更新操作。对于这里部署需求,工程人员基本只能采取增量部署,并需要小心设计部署的流程、脚本及回滚策略。

总结来说,对于现代系统中绝大部分状态无关的部署单元(应用、模块,微服务等),全量部署一般应是最优的选择。而状态相关的部署单元(数据库等)则依然适合增量部署逻辑。为此,在FIT2CLOUD的产品中,我们的代码部署功能选择了全量部署模式,并在系统内部以及和Jenkins对接的插件中支持脚本部署模式,为需要精细控制的增量部署单元提供支持。

如果您对于FIT2CLOUD如何支持这两种部署方式感兴趣的话,欢迎随时试用我们的产品(www.fit2cloud.com)或者联系我们(support@fit2cloud.com)。