美文网首页程序员
The Twelve-Factors App 笔记

The Twelve-Factors App 笔记

作者: 沪上最强亚巴顿 | 来源:发表于2015-10-29 18:32 被阅读571次

现如今, 软件通常会作为一种服务来交付, 即SAAS(softwaware-as-a-service). Twelve-Factor 为构建具有如下特征的SAAS提供了方法论:

  • 使用标准化的配置流程, 来减少项目组加入新成员所需要的时间.
  • 与底层OS 含有明确的契约, 来获得最大的执行环境可移植性.
  • 适合部署在云环境中.
  • 最小化开发和生产间的差异, 使用持续发布.
  • 扩展(scale up) 时的代价尽可能小.

Twelve-Factor 包含以下的条款:

  • Codebase.
    • 一个置于版本控制下的代码库, 多份部署(dev,staging,pro).
  • Dependency.
    • 明确声明并隔离依赖.
    • 不要隐式地依赖于系统级别的包, 和系统工具(curl).
  • Config.
    • 在环境(而非代码)中存储配置.
    • 代码不会随着发布而变化.
    • config 是会根据发布而变化的: 资源,认证,环境特定值.
  • Backing Services
    • 将后端服务(backing services) 视为附加资源(attached resources).
    • 代码不应区分本地和第三方的服务.
      • 它们都是�资源, 通过配置中的URL 来访问.
    • 资源可以被随意的加载/卸载(attach/detach).
  • 严格区分build,release 和run 阶段
    • 从codebase 到deploy 的过程.
  • 以无状态的进程的方式运行app.
    • 这样有利于扩展.
  • app 应该自包含的(self-contained)
    • 并�通过端口绑定的方式来提供(HTTP)服务.
    • 将webserver(如jetty)添加到app (code)中,而不依赖于外部执行环境.
  • Process 是一等公民
    • 将不同的工作分配给不同类型的process.
    • app 进程�不需要守护进程或写入PID 文件, 而是依赖于OS 的进程管理器(process manager).
  • Disposable(�易处理):
    • app 应该可以快速地启动和优雅地关闭.
  • 保持�开发和线上环境尽量一致.
    • �开发和线上环境之间的�差异(gap): 时间,人员,工具.
    • app 应使用�持续部署来减少两者间的差异.
    • 即使adapter理论上能够隔离不同�后端服务, 但是最好还是在开发和线上环境中使用相同的后端服务. 因为不同�服务间的差异, 可能会导致代码上的分支.
      • 由于包管理和虚拟化环境的出现, 轻量级的本地环境变得不再重要.
  • Log
    • 把log 视为事件流(event stream).
    • app 本身不关心输出流的routing/storage.
    • 由执行环境来负责流的归档目的地(terminal, file).
  • 管理进程(admin process)
    • 以一次性进程(one-off process) 的形式运行后台管理任务.
      • 例如: 数据移植, 控制台脚本等.

相关文章

网友评论

    本文标题:The Twelve-Factors App 笔记

    本文链接:https://www.haomeiwen.com/subject/alhfhttx.html