1
原文地址: https://12factor.net/12factor...

介绍

现在软件通常交付为一个服务:可以叫web应用,或软件即服务(SaaS)。12因子是一种构建SaaS应用的方法:

  • 用声明式的格式设置自动化,最小化新开发者加入项目的时间和成本。
  • 与下层操作系统有清晰的契约,其与执行环境间提供最大的可移植性。
  • 适合在现代云平台部署,消除对服务器与系统管理的需求。
  • 减少开发与生产的区别,为最大的敏捷性支持持续部署。
  • 可以在无任何明显对工具,架构或开发实践上的变更的情况下进行伸缩。

12因子方法可以应用在任何语言编写的应用,可以应用在任意后端服务(数据库,队列,内存缓存等)。

背景

这篇文档的内容在我们使用Heroku平台的工作中直接使用在上百个应用的开发与部署上,间接影响了数千应用的研发,运维,伸缩。

文档综合了我们所有的经验与对大量的软件即服务应用的观测。它综合了以下三点:理想的应用开发实践,关注应用的动态增长,开发者在应用代码库上的动态协作, 避免了软件被削弱的成本。

我们的目标是提出我们在现在应用开发中看到的系统性问题,提供一种讨论问题的共享词汇,提供一组广泛对此种问题使用的概念解决方案。这个格式是由Martin Fowler的书《企业应用架构模式》与《重构》激发的灵感。

I 代码库

一份被版本控制追踪的代码,多份部署

12因子应用会一直放在版本控制中,如Git,Mercurial或者Subversion。 一份版本追踪数据库即为众所周知的代码库(code repository),经常简写为code repo或者repo。

代码库是一个单独的仓库(在中央式的版本控制系统如Subversion),或一些共享一个根路径提交的仓库集(在一个去中心化的版本控制系统如Git)。

clipboard.png

一份代码库映射到多次部署。

代码库与应用总是一一对应的:

  • 如果有多个代码库,那不是一个应用 -- 那是一个分布式系统。每个分布式系统中的组件是一个应用,每一个都可以独立遵守12因子。
  • 多个应用共享相同的代码是违反12因子的。这里解决的方案是将代码用库的形式共享,这样可以在依赖管理中被引入。

每个代码库只有一个应用,但每个应用会有多份部署。一个部署是应用的一个运行实例。一般会有一个生产环境,一个或多个开发环境。 并且,每个开发都有一份应用运行在他们的本地环境中,每一份这样的应用也都是一份部署。

代码库在所有的部署中都是相同的,不过每个部署都会有不同的版本生效。比如,一个开发有一些提交还没有部署到开发环境,开发环境还有一些提交没有部署到生产环境。但他们都共享同一份代码库,所以他们可以标识为是同一个应用的不同部署。


祝坤荣
1k 声望1.5k 粉丝

科幻影迷,书虫,硬核玩家,译者