应用程序十二要点解读

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

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

具体12条目解读如下:

  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 将管理/管理任务作为一次性进程运行。

你可能感兴趣的:(应用程序十二要点解读)