之所以会产生流行的技术术语是因为我们有必要去构建一个共同的语言,在这个语言下,我们可以讨论一些问题而不必停下来先介绍背景知识。共享的流行术语不仅仅是为了方便,同样对于讨论问题,架构设计都很重要
Twelve-Factor应用这个词是工程师们在会议当中,在午餐闲聊当中,在架构设计方案评审中被牵引出来,并且不断传递下去的
问题是对于流行的专业术语并非每一个人都能理解到词背后的上下文,也并非每个人的理解都是一样的。就twelve-Factor来说,不同的人的理解可能完全不同,甚至正在阅读本书的读者对于12 factors 可能之前没有任何的接触
本书的目标就是为了详细的解释清楚到底什么是Twelve-Factor应用,希望能够让读者对于Twelve-Factor有共同的理解。而且本书能够让读者对于Twelve-Factor有更多的理解,让大家不仅仅只是使用云,而是一起努力让云原生更繁荣
在云计算的早期,一些初创公司带了一个新的物种,对于这个新的物种,很少有开发者和公司对它有处理经验。这是一个新的抽象级别,它使IT专业人员可以不受一整套非功能性需求的困扰。对某些人来说,这是一个黑暗和恐怖的领域,但是有一些人则是极力的拥抱这个领域,从目前看来他们当初所有的期盼的都已经实现了
最早公开宣称要涉足这个领域的先驱是Heroku,它为你的程序提供了一个平台,有了这个平台,你需要做的事情仅仅是上传你的代码到git,并且构建你的应用,然后云将会接管后面所有的事情,你的程序将会神奇的在线上跑起来
Heroku承诺你永远不需要去关心基础设施,所有你要做的事情就是充分的利用云去构建你的应用,云将会让你的程序运行的很好
问题是大多数人并不知道如何去构建一个“云友好”的应用,正如本书要讨论的,“云友好”的应用并非只是跑在云上面就完了,他们需要拥抱弹性扩展,瞬时文件系统,无状态,并且把所有的东西都当作服务来看待。以这种方式构建的应用能够快速的扩展和部署,允许它们的开发团队能够快速响应市场需求,为应该添加新的功能
时至今日,依然有很多违反云原生的模式。早期需要适应云的人并不知道对于云他们应该做些什么,不应该做些什么,也不知道为了构建一个云原生的应用,他们在设计构架的时候需要考虑哪些点。这是一种新的,几乎没有参考框架的构建应用程序的方式
为了解决这个问题(也为了增加他们平台的适配性)Heroku的一组人在2012年提出了12 Factors。这是构建云原生应用需要遵守的基本规则
这12 Factors的目的是教会开发人员如何构建可用于自动化和声明式设置,与基础操作系统具有明确约束,可动态扩展的云就绪应用程序
对于许多人来说,云原生和12 Factors是等价的,本书的其中一个目的是为了阐明清楚,云原生的含义远比12 Factors要丰富的多。在Heroku的场景里面,云原生真正意味着“在Heroku上工作良好”
这12 Factors 被用于指导开发者去开发新的云应用,同时也可以用来评估已经存在的项目到底与云之间有多少适配性
一个版本管理系统的代码仓库对应多个部署
严格的声明和隔离依赖
将配置存储到环境当中
把所有附加的资源都当作后端服务
严格的区分构建和运行阶段
用一个或者多个无状态进程来运行应用程序
通过端口绑定来暴露服务
通过进程模式来扩展
支持快速重启和快速的优雅停机提升程序的鲁棒性
保持开发、测试、生产环境相同
把logs当作事件流
用一次性的进程来跑管理任务
12 Factors可以很好地说明在云中构建和部署应用程序以及为团队建立弹性伸缩应用程序生产线需严格要遵守的纪律。然而技术从它被创造的那一天起就会一直演进下去,所以在某些情况下,有必要详细说明初始准则,并添加旨在满足现代应用程序开发标准的新准则
在这本书里面,首先我呈现了一些基于原始12 Factors 创造出来的新的指导准则。在本书中,我改变了Factor之间的顺序,用以明确区分Factor之间的优先级.同时新增了一些应该被考虑到的Factors,比如说遥测,加密,和“API First”,如果你的应用需要跑在云上面。而且,我可能会为原始的factors增加一些警告和异常,用以反应今时今日的最佳实践
把优先顺序的改变,重新定义,新增都考虑进去,本书将要描述以下的云原生应用需要遵守的factors:
- One codebase,one applicatiopn
- API first
- 依赖管理
- 设计,构建,发布,运行
- 配置,证书,和代码
- 日志
- 可处置性
- 背后服务
- 同等环境
- 管理性进程
- 端口绑定
- 无状态进程
- 并发
- 遥测
- 认证和授权
12factor.net 提供了一个极佳的起点,可以作为一个用来衡量应用与云适配性的标尺。正如你接下来要看到的一样,这些因素是相互关联的,可能遵守了其中一个能够让你很容易遵守下一个,进入一个良性循环。一旦人们进入这个良性循环,他们经常会反问自己当初为什么要用其他的方式来构建应用呢
无论您是在开发新的应用程序并且没有一行传统代码的负担,还是正在分析包含数百个传统应用程序的企业投资组合,本书将会为你开发云原生应用提供一个完备的指导方针