The Twelve Factors App 应用程序十二要点评注

应用程序十二要点是Heroku 所提出的一种用于构建软件即服务应用程序的方法学,参见 https://12factor.net, 试着翻译并解读

  • 使用标准化流程自动配置,从而使新加入项目的开发者的时间和学习成本最小化;
  • 与底层操作系统之间保持简洁的界限和契约, 在执行环境之间提供最大的可移植性;
  • 适合在现代云平台上部署,避免对服务器和系统管理的额外需求;
  • 最小化开发和生产环境之间的分歧,实现持续部署以实现最大灵活性;
  • 无需对工具,架构或开发实践进行重大更改就可以实现纵身和横向扩展。

1. Codebase 代码库

One codebase tracked in revision control, many deploys

用一个代码库进行版本控制和应用程序的多次部署, 代码, 配置, 初始化数据都应该纳入版本管理,在统一的代码库中为代码,配置,数据, 测试和部署脚本都建立独立的项目和模块。

不管是测试环境还是生产环境,都可以使用同一份代码进行发布。

2. Dependencies 依赖

Explicitly declare and isolate dependencies

显式声明和隔离依赖关系, 通过maven , gradle, scons 等构建工具明确声明所需要的够用的依赖项和版本号, 避免版本冲突和循环依赖, 象Java中臭名昭著的依赖黑洞就曾浪费了程序员大量的时间, SpringBoot 的 starter 依赖包就可以大大简化依赖配置

3. Config 配置

Store config in the environment

配置和代码都是应用程序不可或缺的组成部分, 一般存储配置在环境变量中或者与环境相关的配置文件,配置服务中, 比如 application-dev.yml, application-lab.yml, application-bts.yml, application-prod.yml, 这些配置文件不要和代码放在一起, 建议放在不同的代码仓库中, 这里建议把应用的配置存储于环境变量中。

4. Backing services 后端服务

Treat backing services as attached resources

将后端服务作为附加的资源, 不管你的后端数据库是 Oracle, MySQL 还是 PostgreSQL, 消息队列是ActiveMQ, RabbitMQ 或是Kafaka , 你的上层应用程序无需做特殊处理, 底层适配也很容易地切换不同的支持服务资源

5. Build, release, run 构建,发布和运行

Strictly separate build and run stages

严格区分构建, 发布和运行阶段, 开发人员的每次改动都会触发构建, 但是发布是要经过严格的验收测试的, 运行时的代码不允许任何随意修改,遵循构建发布和运行的流程

6. Processes 进程

Execute the app as one or more stateless processes

以一个或多个无状态进程来运行应用程序, 状态应该保存在共享的缓存或数据库中,这样微服务可以任意启停,轻松升级和替换, 也利于水平扩展

7. Port binding 端口绑定

Export services via port binding

通过端口绑定导出服务, 也就是通过暴露独立的端口来提供服务, 比如HTTP的80, HTTS的443, SIP的5060, 不需要依赖于容器

8. Concurrency 并发

Scale out via the process model
通过进程模型横向扩展

9. Disposability 一次性

Maximize robustness with fast startup and graceful shutdown
通过快速启动和优雅退出来最大限度地提高健壮性

10. Dev/prod parity 相似的开发和产品环境

Keep development, staging, and production as similar as possible
保持开发,测试和产品环境尽可能相似

11. Logs 日志

Treat logs as event streams
将日志视为事件流

12. Admin processes 管理过程

Run admin/management tasks as one-off processes
将管理/管理任务作为一次性进程运行

你可能感兴趣的:(The Twelve Factors App 应用程序十二要点评注)