[转帖]十二要素应用宣言(12-Factor App)

十二,要素,应用,宣言,factor,app · 浏览次数 : 0

小编点评

**十二要素应用宣言** **背景** * 软件通常会作为一种服务来交付,它们被称为网络应用程序,或“软件即服务”(SaaS)。 * 12-Factor 是一种构建如下的 SaaS 应用的方法论。 **核心概念** * 使用标准化流程自动配置,保持最少的学习成本。 * 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性。 * 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源。 * 将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发。 * 在工具、架构和开发流程不发生明显变化的前提下实现扩展。 **基本原则** * 1. 一份基准代码,多份部署。 * 2. 依赖声明。 * 3. 配置(存储应用程序配置)。 * 4. 后端服务(把后端服务当作附加资源)。 * 5. 构建,发布,运行(严格分离构建和运行)。 * 6. 进程(以一个或多个无状态进程运行应用)。 * 7. 端口绑定(通过端口绑定提供服务)。 * 8. 并发(通过进程模型进行扩展)。 * 9. 易处理(快速启动和优雅终止可最大化健壮性)。 * 10. 开发环境与线上环境等价。 * 11. 日志(把日志当作事件流)。 * 12. 管理进程(后台管理任务当作一次性进程运行)。

正文

https://www.jianshu.com/p/d08cba7349dc

 

从摩根·布鲁斯和保罗·A.佩雷拉的《微服务实战》这本书上得知十二要素应用宣言,网上搜索从infoQ搬迁至此。

十二要素应用宣言英文版,对应中文版

简介

如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或“软件即服务”(SaaS)。12-Factor App为构建如下的 SaaS 应用提供了方法论:

1) 使用标准化流程自动配置,保持最少的学习成本;

2) 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性;

3) 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源;

4) 将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发;

5) 可以在工具、架构和开发流程不发生明显变化的前提下实现扩展;

这套理论适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序。

背景

本文的贡献者者参与过数以百计的应用程序的开发和部署,并通过 Heroku 平台间接见证了数十万应用程序的开发,运作以及扩展的过程。

本文综合了我们关于 SaaS 应用几乎所有的经验和智慧,是开发此类应用的理想实践标准,并特别关注于应用程序如何保持良性成长,开发者之间如何进行有效的代码协作,以及如何避免软件污染 。

我们的初衷是分享在现代软件开发过程中发现的一些系统性问题,并加深对这些问题的认识。我们提供了讨论这些问题时所需的共享词汇,同时使用相关术语给出一套针对这些问题的广义解决方案。本文格式的灵感来自于Martin Fowler 的书籍: Patterns of  Enterprise Application Architecture ,  Refactoring 。

读者应该是哪些人?

任何 SaaS 应用的开发人员。部署和管理此类应用的运维工程师。

十二要素12-Factor

1) 基准代码(一份基准代码,多份部署)

基准代码和应用间总保持一一对应的关系:

1.1) 一旦有多个基准代码,就不能称为一个应用,而是一个分布式系统。分布式系统中的每一个组件都是一个应用,每一个应用可以分别使用 12-Factor 进行开发。

1.2) 多个应用共享一份基准代码是有悖于 12-Factor的。解决方案是将共享的代码拆分为独立的类库,然后使用依赖管理策略去加载它们。

尽管每个应用只对应一份基准代码,但可以同时存在多份部署。

所有部署的基准代码相同,但每份部署可以使用其不同的版本。

2) 依赖(显式声明依赖关系)

12-Factor 规则下的应用程序不会隐式依赖系统级的类库。它一定通过依赖清单,确切地声明所有依赖项。此外,在运行过程中通过 依赖隔离 工具来确保程序不会调用系统中存在但清单中未声明的依赖项。

3) 配置(在环境中存储配置)

12-Factor 推荐将应用的配置存储于环境变量 中 (env vars, env) 。环境变量可以非常方便地在不同的部署间做修改,却不动一行代码;与配置文件不同,不小心把它们签入代码库的概率微乎其微。

12-Factor 应用中,环境变量的粒度要足够小,且相对独立。当应用程序不断扩展,需要更多种类的部署时(比如不同硬件不同云平台不同厂商),这种配置管理方式能够做到平滑过渡。

4) 后端服务(把后端服务当作附加资源)

12-Factor 应用不会区别对待本地或第三方服务。 对应用程序而言,两种都是附加资源,通过一个 url 或是其他存储在 配置 中的服务定位 / 服务证书来获取数据。12-Factor 应用的任意 部署 ,都应该可以在不进行任何代码改动的情况下,将本地 MySQL 数据库换成第三方服务。

5) 构建,发布,运行(严格分离构建和运行)

12-facfor 应用严格区分构建,发布,运行这三个步骤。

每一个发布版本必须对应一个唯一的发布 ID。

新的代码在部署之前,需要开发人员触发构建操作。但是,运行阶段不一定需要人为触发,而是可以自动进行。

6) 进程(以一个或多个无状态进程运行应用)

12-factor 应用的进程必须无状态且无共享 。任何需要持久化的数据都要存储在后端服务内,比如数据库。粘性 Session 是 12-factor 极力反对的。Session 中的数据应该保存在诸如 Memcached 或 Redis 这样的带有过期时间的缓存中。

7) 端口绑定(通过端口绑定提供服务)

12-factor 应用完全自我加载而不依赖于任何网络服务器就可以创建一个面向网络的服务。互联网应用 通过端口绑定来提供服务,并监听发送至该端口的请求。

8)  并发(通过进程模型进行扩展)

在 12-factor 应用中,进程是一等公民。12-factor 应用的进程主要借鉴于 unix 守护进程模型 。开发人员可以运用这个模型去设计应用架构,将不同的工作分配给不同的进程类型 。

9) 易处理(快速启动和优雅终止可最大化健壮性)

12-factor 应用的进程是可支配的,意思是说它们可以瞬间开启或停止。 这有利于快速、弹性的伸缩应用,迅速部署变化的代码或配置,稳健地部署应用。进程应当追求最小启动时间;进程一旦接收终止信号 (SIGTERM) 就会优雅的终止 。进程还应当在面对突然死亡时保持健壮 ,

10) 开发环境与线上环境等价(尽可能的保持开发、预发布、线上环境相同)

12-factor应用要做到持续部署就必须缩小本地与线上差异。12-factor应用的开发人员应该反对在不同环境间使用不同的后端服务 。

11) 日志(把日志当作事件流)

12-factor 应用本身从不考虑存储自己的输出流。 不应该试图去写或者管理日志文件。相反,每一个运行的进程都会直接的标准输出 (stdout) 事件流。开发环境中,开发人员可以通过这些数据流,实时在终端看到应用的活动。

12) 管理进程(后台管理任务当作一次性进程运行)

一次性管理进程应该和正常的 常驻进程 使用同样的环境。这些管理进程和任何其他的进程一样使用相同的代码和配置,基于某个发布版本运行。后台管理代码应该随其他应用程序代码一起发布,从而避免同步问题。

与[转帖]十二要素应用宣言(12-Factor App)相似的内容:

[转帖]十二要素应用宣言(12-Factor App)

https://www.jianshu.com/p/d08cba7349dc 从摩根·布鲁斯和保罗·A.佩雷拉的《微服务实战》这本书上得知十二要素应用宣言,网上搜索从infoQ搬迁至此。 十二要素应用宣言英文版,对应中文版。 简介 如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或“软件

[转帖]庐山真面目之十三微服务架构中如何在Docker上使用Redis缓存

https://www.cnblogs.com/PatrickLiu/p/14518160.html 一、介绍 1、开始说明 在微服务器架构中,有一个组件是不能少的,那就是缓存组件。其实来说,缓存组件,这个叫法不是完全正确,因为除了缓存功能,它还能完成其他很多功能。我就不隐瞒了,今天我们要探讨的就是

[转帖]Redis进阶实践之十四 Redis-cli命令行工具使用详解第一部分

https://www.cnblogs.com/PatrickLiu/p/8508975.html 一、介绍 redis学了有一段时间了,以前都是看视频,看教程,很少看官方的东西。现在redis的东西要看的都差不多看完了。网上的东西也不多了。剩下来就看看官网的东西吧,一遍翻译,一遍测试。不错的使用体

【转帖】Linux性能优化(十四)——CPU Cache

一、CPU Cache 1、CPU Cache简介 CPU Cache是位于CPU与内存之间的临时存储器,容量比内存小但交换速度却比内存要快得多。Cache的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,会使CPU花费很长时间等待数据到来或把数

[转帖]Redis进阶实践之十五 Redis-cli命令行工具使用详解第二部分(结束)

https://www.cnblogs.com/PatrickLiu/p/8527770.html 一、介绍 今天继续redis-cli使用的介绍,上一篇文章写了一部分,写到第9个小节,今天就来完成第二部分。话不多说,开始我们今天的讲解。如果要想看第一篇文章,地址如下:http://www.cnbl

[转帖]BIS出口管制新规说明会,进一步明确十大问题

https://zhuanlan.zhihu.com/p/573765504 10月13日晚9点,BIS就出口管制新规举行电话会议简报,出口执法助理副部长Thea Kendler主持会议。小白总结要点如下: 1、发布新规原因 沙利文说的很直白了,就是在先进芯片等高新技术领域维持自身科技霸权地位,遏制

[转帖]手机快充大一统,中国人先走一步

https://zhidx.com/p/349745.html 苹果公司躺吃Lighting接口红利十年后,突然一个“Deadline”砸到了自己头上。 年前,欧盟已经正式通过新规,以后手机想在欧盟范围内卖,就必须要用Type-C充电接口,这项规定的执行时间是2024年12月28日。 新规通过后,苹

[转帖]十二、G1垃圾收集器

G1收集器是一款面向服务器的垃圾收集器,也是HotSpot在JVM上力推的垃圾收集器,并赋予取代CMS的使命。为什么对G1收集器给予如此高的期望呢?既然对G1收集器寄予了如此高的期望,那么他一定是有特别之处。他和其他的垃圾收集器有何不同呢?下面我们将从以下几个方面研究G1收集器。 一、为什么会诞生G

[转帖]Linux性能优化(十二)——CPU性能调优

Linux性能优化(十二)——CPU性能调优 https://blog.51cto.com/u_9291927/2594259 一、应用程序优化 (1)编译器优化。适当开启编译器优化选项,在编译阶段提升性能。gcc提供优化选项-On会自动对应用程序的代码进行优化。(2)算法优化。使用复杂度更低的算法

[转帖]Redis进阶实践之十二 Redis的Cluster集群动态扩容

https://www.cnblogs.com/PatrickLiu/p/8473135.html 一、引言 上一篇文章我们一步一步的教大家搭建了Redis的Cluster集群环境,形成了3个主节点和3个从节点的Cluster的环境。当然,大家可以使用 Cluster info 命令查看Cluste