当前位置: 首页 > news >正文

12-Factor应用方法论

12-Factor应用方法论是由Heroku的创始人Adam Wiggins提出的,旨在指导开发者构建应用以适应现代云平台,实现高的可移植性、伸缩性和可维护性。这个方法论特别适合设计和开发软件即服务(SaaS)应用。

以下是12-Factor应用方法论的详细说明:

  1. 基准代码 (Codebase) 一份基准代码,多份部署。一个应用的代码应该被版本控制,且任何部署都应该从这里获取代码。

  2. 依赖 (Dependencies) 明确声明并隔离依赖。一个应用不应该依赖系统级的包。所有的依赖都应通过依赖声明(如Maven或npm)进行管理。

  3. 配置 (Config) 在环境中存储配置。配置信息(如数据库连接串)应该从代码中提取出来,并存放在环境变量中。

  4. 后端服务 (Backing Services) 将后端服务视作附加资源。后端服务如数据库、消息队列等,应该可以随时被连接或断开,而不影响应用的运行。

  5. 构建、发布、运行 (Build, Release, Run) 严格分离构建和运行。构建阶段产生一个可执行的“发布”(包括代码编译成二进制以及引入配置),之后在运行阶段启动这个发布。

  6. 进程 (Processes) 以一个或多个无状态的进程运行应用。这些进程应该尽量无状态和无共享,并通过后端服务暂存任何需要的持久化数据。

  7. 端口绑定 (Port Binding) 通过端口绑定提供服务。应用应该自己提供服务对外的HTTP服务,而不依赖于外部的web服务器。

  8. 并发 (Concurrency) 通过进程模型进行扩展。任何类型的工作都应该能够映射到无状态进程上,从而提升并发性和伸缩性。

  9. 易处理 (Disposability) 极速启动和优雅终止增进健壮性。应用的进程应该能够迅速启动及优雅停止,从而实现更加快速的部署和弹性的伸缩性。

  10. 开发环境与线上环境等价 (Dev/Prod Parity) 保持开发、测试、生产环境尽可能相同。这减少了在开发至生产的推移中产生问题的可能性。

  11. 日志 (Logs) 将日志当作事件流。应用不应该对日志的管理负责,日志可以被路由、分析和存储由系统环境决定。

  12. 管理进程 (Admin Processes) 管理型进程也需要放在应用的版本控制中。管理型任务如数据库迁移,应该纳入代码库并以与常规应用进程相同的方式来执行。

12-Factor应用方法论侧重于软件开发的最佳实践,确保了应用在任意云平台上都能有良好的可迁移性和减小与底层硬件的耦合度。它强调了环境无关性、声明式自动化和最小化依赖性。这个方法论适用于任何使用服务化架构的应用,且特别符合容器化和微服务架构的特点。

通常根据不同环境变更profiles.active的最佳实践是使用环境变量或命令行参数,这使得不需要改变代码就可以轻松地部署到任何环境中。这种方式也符合12-Factor应用方法论中的配置建议,即通过环境来管理配置变化。

相关文章:

  • [中级]软考_软件设计_计算机组成与体系结构_08_输入输出技术
  • 【Servlet】Servlet入门
  • 【接口】HTTP(3) |GET和POST两种基本请求方法有什么区别
  • 深入理解MP4视频文件裁剪原理[下下]
  • Navicat Premium工具安装教程(超详细讲解)
  • 未来社会:人与机器更深度的交互及其影响
  • 2024年04月在线IDE流行度最新排名
  • # 达梦数据库知识点
  • B000-1115-运算符
  • 设计模式:创建者模式
  • 第四百四十三回
  • HTML1:html基础
  • 个人品牌打造IP孵化运营培训教程架构课件
  • 汽车网络安全管理
  • 【算法刷题day16】Leetcode:104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数
  • (三)从jvm层面了解线程的启动和停止
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Electron入门介绍
  • Fundebug计费标准解释:事件数是如何定义的?
  • k个最大的数及变种小结
  • nodejs实现webservice问题总结
  • October CMS - 快速入门 9 Images And Galleries
  • OSS Web直传 (文件图片)
  • Python 反序列化安全问题(二)
  • React16时代,该用什么姿势写 React ?
  • 百度地图API标注+时间轴组件
  • 创建一种深思熟虑的文化
  • 思维导图—你不知道的JavaScript中卷
  • 我感觉这是史上最牛的防sql注入方法类
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 用element的upload组件实现多图片上传和压缩
  • 用quicker-worker.js轻松跑一个大数据遍历
  • Mac 上flink的安装与启动
  • raise 与 raise ... from 的区别
  • ​iOS安全加固方法及实现
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #LLM入门|Prompt#3.3_存储_Memory
  • #QT项目实战(天气预报)
  • #数学建模# 线性规划问题的Matlab求解
  • (11)MSP430F5529 定时器B
  • (4)logging(日志模块)
  • (补)B+树一些思想
  • (二)WCF的Binding模型
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (接口自动化)Python3操作MySQL数据库
  • (小白学Java)Java简介和基本配置
  • (译)2019年前端性能优化清单 — 下篇
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)拼包函数及网络封包的异常处理(含代码)
  • ... 是什么 ?... 有什么用处?