微服务

云原生12因素应用

2021-02-20  本文已影响0人  田涛347

12因素应用是一系列云原生应用架构的模式集合,最初由Heroku提出。这些模式可以用来说明什么样的应用才是云原生应用。它们关注速度、安全、通过声明式配置扩展、可横向扩展的无状态/无共享 进程以及部署环境的整体松耦合。如Cloud Foundry、Heroku和Amazon ElasticBeanstalk都对部署12因素应用进行了专门的优化。

在12因素的背景下,应用(或者叫app)指的是独立可部署单元。组织中经常把一些互相协作的可部 署单元称作一个应用。

12因素应用遵循以下模式:

代码库

每个可部署app在版本控制系统中都有一个独立的代码库,可以在不同的环境中部署多个实例。

依赖

App应该使用适当的工具(如Maven、Bundler、NPM)来对依赖进行显式的声明,而不该在部署环 境中隐式的实现依赖。

配置

配置或其他随发布环境(如部署、staging、生产)而变更的部分应当作为操作系统级的环境变量注 入。

后端服务

后端服务,例如数据库、消息代理应视为附加资源,并在所有环境中同等看待。

编译、发布、运行

构建一个可部署的app组件并将它与配置绑定,根据这个组件/配置的组合来启动一个或者多个进程, 这两个阶段是严格分离的。

进程

该app执行一个或者多个无状态进程(例如master/work),它们之间不需要共享任何东西。任何需要的状态都置于后端服务(例如cache、对象存储等)。

端口绑定

该应用程序是独立的,并通过端口绑定(包括HTTP)导出任何/所有服务。

并发

并发通常通过水平扩展应用程序进程来实现(尽管如果需要的话进程也可以通过内部管理的线程多路复用来实现)。

可任意处置性

通过快速迅速启动和优雅的终止进程,可以最大程度上的实现鲁棒性。这些方面允许快速弹性缩放、部署更改和从崩溃中恢复。

开发/生产平等

通过保持开发、staging和生产环境尽可能的相同来实现持续交付和部署。

日志

不管理日志文件,将日志视为事件流,允许执行环境通过集中式服务收集、聚合、索引和分析事件。

管理进程

行政或管理类任务(如数据库迁移),应该在与app长期运行的相同的环境中一次性完成。

这些特性很适合快速部署应用程序,因为它们不需要对将要部署的环境做任何假定。对环境假设能够 允许底层云平台使用简单而一致的机制,轻松实现自动化,快速配置新环境,并部署应用。以这种方 式,十二因素应用模式能够帮我们优化应用的部署速度。

这些特性也很好地适用于突发需求,或者低成本地“丢弃”应用程序。应用程序环境本身是100%一次 性的,因为任何应用程序状态,无论是内存还是持久性,都被提取到后端服务。这允许应用程序以易 于自动化的非常简单和弹性的方式进行伸缩。在大多数情况下,底层平台只需将现有环境复制到所需 的数目并启动进程。缩容是通过暂停正在运行的进程和删除环境来完成,无需设法地实现备份或以其 他方式保存这些环境的状态。就这样,12因素应用模式帮助我们实现规模优化。

最后,应用程序的可处理性使得底层平台能够非常快速地从故障事件中恢复。

此外,将日志作为事件流处理能够极大程度上的增强应用程序运行时底层行为的可见性。

强制环境之间的等同、配置机制的一致性和后端服务管理使云平台能够为应用程序运行时架构的各个 方面提供丰富的可见性。以这种方式,十二因素应用模式能够优化安全性。

上一篇下一篇

猜你喜欢

热点阅读