打造现代 SaaS 的十二要素法则

The Twelve-Factor App

在软件即服务(SaaS)时代,如何构建既灵活又稳健的应用?这份由 Heroku 团队提炼的十二要素方法论,总结了数百个应用开发部署的实战经验。它主张通过声明式配置、环境隔离和状态无感进程,实现从开发到生产的无缝衔接。无论是数据库还是内存缓存,所有依赖都应显式声明;日志应视为事件流,而非静态文件。这套原则不仅适用于任何编程语言,更旨在消除开发环境与生产环境的差异,让应用能够像云原生一样轻松扩展,同时避免软件随时间推移而出现的侵蚀问题。

十二要素应用方法论旨在最小化开发与生产环境之间的差异,从而实现持续部署并最大化敏捷性。
  1. nebezb

    依然极具参考价值。即使你不直接应用它,花 15 分钟读一遍也能学到很多东西。

    我对它唯一的抱怨是第三章:配置 [1]

    “将配置存储在环境变量中”,“外部服务(如 Amazon S3 或 Twitter)的凭证”。

    这不仅是糟糕的建议,还产生了次级效应,让开发者误以为可以把所有本地环境变量里的密钥都塞进 ~/.bashrc 文件里。

    别再这么干了。遵守其他 11.5 条法则吧。

    [1]: https://12factor.net/config

  2. browningstreet

    我原本以为这会是一个展示 12 层 MFA 的演示,以此讽刺我们当前痛苦且不可持续的 MFA 趋势。

  3. dec0dedab0de

    当时 Heroku 看起来就是未来的样子。每次我在 Azure 里挣扎着理解一些胡扯的东西时,我都会怀念那个我们失去的更简单的未来。

  4. sandeepkd

    有趣的是,这套理念当时让人觉得如此自然、如此正确。我记得人们曾把它奉为北极星。但渐渐地,人们虽然接近了它,却又超越了它。就我个人而言,我觉得这些概念需要具备通才思维,也就是应用架构师的思维。而今天我们拥有的是大量的团队内的产品工程师、产品经理和管理层。产品工程师往往没有足够的杠杆或动力去推动这类概念。

    然而与此同时,这些概念又仿佛刻在石头上一般,无论以何种方式,每个人迟早都会再次重新发现它们。

  5. theozero

    .env 文件正如我们所知,问题多多……但是!看看 varlock (https://varlock.dev) ——它是免费且开源的,我们对其熟悉的语法进行了现代化改造和适配(在其之上构建了一个小型 DSL),使其变得更好。

    内置了验证、类型安全、通过函数进行组合、插件加载、防泄漏等功能,还有更多。

  6. RKearney

    标题应该写成 (2011) 版

    https://news.ycombinator.com/from?site=12factor.net

  7. imglorp

    大体上是不错的最佳实践,但我感觉 12FA 模型在“状态”这个问题上完全选择了回避,将其定义为范围之外:“状态就在那边那个外部服务里,三猴表情”。

    是的,但有时候状态才是整个重点,你需要自己管理它,结果你的某些进程就不得不变成 9 要素或 10 要素了。

  8. _superposition_

    真不敢相信这文章有多老了,而且我觉得大多数开发者至今仍未将其内化,这真是一种遗憾。

同日更多故事

2026-08-28