12-Factor应用方法论是由Heroku的创始人Adam Wiggins提出的,旨在指导开发者构建应用以适应现代云平台,实现高的可移植性、伸缩性和可维护性。这个方法论特别适合设计和开发软件即服务(SaaS)应用。
以下是12-Factor应用方法论的详细说明:
-
基准代码 (Codebase) 一份基准代码,多份部署。一个应用的代码应该被版本控制,且任何部署都应该从这里获取代码。
-
依赖 (Dependencies) 明确声明并隔离依赖。一个应用不应该依赖系统级的包。所有的依赖都应通过依赖声明(如Maven或npm)进行管理。
-
配置 (Config) 在环境中存储配置。配置信息(如数据库连接串)应该从代码中提取出来,并存放在环境变量中。
-
后端服务 (Backing Services) 将后端服务视作附加资源。后端服务如数据库、消息队列等,应该可以随时被连接或断开,而不影响应用的运行。
-
构建、发布、运行 (Build, Release, Run) 严格分离构建和运行。构建阶段产生一个可执行的“发布”(包括代码编译成二进制以及引入配置),之后在运行阶段启动这个发布。
-
进程 (Processes) 以一个或多个无状态的进程运行应用。这些进程应该尽量无状态和无共享,并通过后端服务暂存任何需要的持久化数据。
-
端口绑定 (Port Binding) 通过端口绑定提供服务。应用应该自己提供服务对外的HTTP服务,而不依赖于外部的web服务器。
-
并发 (Concurrency) 通过进程模型进行扩展。任何类型的工作都应该能够映射到无状态进程上,从而提升并发性和伸缩性。
-
易处理 (Disposability) 极速启动和优雅终止增进健壮性。应用的进程应该能够迅速启动及优雅停止,从而实现更加快速的部署和弹性的伸缩性。
-
开发环境与线上环境等价 (Dev/Prod Parity) 保持开发、测试、生产环境尽可能相同。这减少了在开发至生产的推移中产生问题的可能性。
-
日志 (Logs) 将日志当作事件流。应用不应该对日志的管理负责,日志可以被路由、分析和存储由系统环境决定。
-
管理进程 (Admin Processes) 管理型进程也需要放在应用的版本控制中。管理型任务如数据库迁移,应该纳入代码库并以与常规应用进程相同的方式来执行。
12-Factor应用方法论侧重于软件开发的最佳实践,确保了应用在任意云平台上都能有良好的可迁移性和减小与底层硬件的耦合度。它强调了环境无关性、声明式自动化和最小化依赖性。这个方法论适用于任何使用服务化架构的应用,且特别符合容器化和微服务架构的特点。
通常根据不同环境变更profiles.active
的最佳实践是使用环境变量或命令行参数,这使得不需要改变代码就可以轻松地部署到任何环境中。这种方式也符合12-Factor应用方法论中的配置建议,即通过环境来管理配置变化。