十二要素应用程序:如何拥抱未来
什么是十二因素应用程序?
十二因素是什么?
现在怎么办?
在本文中,我将向您解释十二要素应用程序开发指南,为什么它不是一时的流行,以及如何使用它来真正地(好吧,比喻地)拥抱未来。
什么是十二因素应用程序?
十二要素应用是一套构建现代 Web 应用程序的最佳实践。它包含了十二条准则(因此得名),建议每位开发人员遵循这些准则来构建可扩展的应用程序。
十二要素应用程序描述如下:
- 从开发角度实现自动化;
- 可跨执行环境移植;
- 可在云中部署,最大限度地减少对服务器和服务器管理的需求;
- 能够持续部署,最大程度减少开发和生产环境之间的差异;
- 无需重大改变或努力即可扩展。
十二因素是什么?
我将简要介绍每个因素。不过,想要更深入的解释,请务必访问十二因素应用的官方网站:https://12factor.net/
1. 代码库
本质上,每个应用程序始终只有一个代码仓库。这可以是任何版本控制系统,例如Git、Mercurial或Subversion。一个应用程序可能会有多个部署,但应用程序可以在不同的环境(本地/生产)中运行。
2.依赖关系
切勿直接将依赖项复制到代码库中。您需要使用包管理器来显式声明和隔离依赖项。对于 JavaScript,流行的包管理器包括npm或yarn。
3. 配置
配置应该始终存储在环境变量中。您需要将配置文件与代码分开,因为配置在整个部署过程中会发生变化,而代码保持不变。
4. 支持服务
将你的支持服务视为附加资源。这意味着你需要确保你的服务易于互换,这样你就可以切换到其他第三方服务提供商,而无需更改应用代码。
5. 构建、发布、运行
十二要素应用严格区分构建、发布和运行阶段。构建过程在部署新代码时运行。每个发布都应该有一个唯一的发布 ID,例如发布的时间戳或递增的数字。这样,您就可以在执行环境中运行该发布。
6. 流程
不要在流程中引入状态。十二要素流程是无状态的,不共享任何数据。任何需要持久化的数据都必须存储在有状态的后端服务中,通常是数据库。
7. 端口绑定
Web 应用通过绑定到端口并监听传入该端口的请求,将 HTTP 作为服务导出。请确保通过端口绑定导出服务。该服务应该对其他可能被使用的服务可见。
8.并发
通过将应用拆分成更小的部分,您可以扩展服务。这可以减少工作负载,因为单个虚拟机的规模有限(垂直扩展),因此,让应用跨越多台物理机上的多个进程至关重要。
9. 可处置性
流程是一次性的,因此请确保它们能够快速启动或停止。这样做有助于实现自动扩展、快速部署和便捷性。
10. 开发/生产环境一致性
尽可能保持开发、预发布和生产环境的相似性,以便任何参与项目的人都能快速上手并发布。在开发和生产环境之间进行持续部署对于减少故障和错误至关重要。
11. 日志
将日志视为事件流。日志对于检查应用程序进程和后台服务非常有用。您不应该将其输出流的路由或存储与您的应用程序关联。相反,应该将这些日志视为没有固定的开始或结束,而是在应用程序运行期间持续流动。
12. 管理流程
将管理任务作为一次性进程运行,例如数据库迁移和在环境中执行一次性脚本。
现在怎么办?
无论你的框架和技术栈是什么,你都可以将十二要素应用原则应用到你的应用程序中!以下是一些可以自然补充十二要素应用原则的优秀资源:
- Dotenv用于配置环境(该链接适用于 Node.js,但不同语言和框架有不同的版本)
- Docker用于轻松设置容器并创建完美的开发/部署环境;
- Kubernetes用于管理和扩展生产级用途的容器;
- AWS用于托管已部署的十二要素应用程序;以及
- 还有更多!
以上列表并非详尽无遗。文章最后,我鼓励您自行研究,寻找更多可以融入您技术栈的工具。无论您喜欢与否,这些十二要素应用原则正变得越来越普遍,所以现在就是开始的最佳时机!
鏂囩珷鏉ユ簮锛�https://dev.to/parkrooben/the-twelve-factor-app-how-to-embrace-the-future-20kg