云原生应用程序架构的五大特性(上)- 12要素应用

12要素的概念最早诞生于Heroku的工程师手中,说白了,其实就是云原生应用程序架构的模式集合,它描述了一个应用程序的原型,最好地诠释了采纳云原生应用程序架构的原因。

 

通过突出陈述性配置和水平扩展的无状态/无共享进程,以及整体上与部署环境的松耦合连接,这些模式实现了速度性、安全性和可扩展性。在当下,Cloud Foundry、Heroku和Amazon Elastic Beanstalk等云应用程序平台都已经为部署12要素应用进行了优化。

 12要素视应用程序为可独立部署的单元,企业通常将多个可协作部署的单元称为一个应用,这些可协作部署的单元集合又可以统称为分布式系统
12要素应用的核心思想如下所示1、基准代码一份基准代码,多份部署每个可部署的应用程序均被视为在版本控制中的代码库来进行追踪,相同的基准代码可能在多个环境下部署有许多的应用程序实例。 

2、依赖显式声明依赖关系应用程序通过适当的工具(如:Maven、Bundler、NPM)隔离依赖性,目的就是不依赖于部署环境。 

3、配置在环境中存储配置。通过操作系统级的环境变量将配置信息或其他可能存在的不同信息(如:开发环境、预生产环境、生产环境)应用到各个部署环境中。 

4、后端服务 把后端服务当作附加资源。数据库、消息队列、邮件发送服务或缓存系统等均被作为是附加资源在不同环境中被同等地调用,每个不同的后端服务都是一份资源 。

举个例子,一个MySQL 数据库是一个资源,两个MySQL 数据库(用来给数据分区)就是两个不同的资源。12要素应用将这些数据库都视作附加资源 ,将它们和部署环境保持松耦合。

 5、构建、发布、运行严格分离构建和运行。基准代码转化为部署(非开发环境)需要以下三个阶段:

构建阶段,是指将代码仓库转化为可执行包的过程。构建时会使用指定版本的代码,获取和打包依赖项,编译成二进制文件和资源文件。

发布阶段,会将构建的结果和当前部署所需的配置相结合,并能够立刻在运行环境中投入使用。

运行阶段,是指针对选定的发布版本在执行环境中启动一系列应用程序的进程。

以上所有阶段都是严格分离的。

 6、进程以一个或多个无状态进程运行应用。在运行环境中,应用程序作为一个或多个无共享的无状态进程(如:master/workers)来执行,任何需要持久化的数据都要存储在后端服务内(例如:缓存、对象存储等)。 

7、端口绑定通过端口绑定(Port Binding)来提供服务。具有12要素的应用能够实现完全自我加载,不依赖于任何网络服务器就可以创建基于网络的服务。互联网应用可以通过端口绑定来提供服务并随时监听所有发送至该端口的请求。 

8、并行通过进程模型进行扩展。一般而言,并行由水平向外扩展应用程序进程(尽管必要时进程也可通过内部管理线程多路传输工作)来实现。 

9、易处理通过快速启动和终止来实现应用程序韧性的最大化。这包括了快速而有弹性的扩展、对变更的部署以及宕机恢复能力。 

10、开发环境与生产环境等价通过尽可能地保持开发环境、预生产环境和生产环境三者的相似性来实现持续交付与部署。 

11、日志将日志作为事件流,允许执行环境通过集中式服务来收集、聚合、检索和分析日志,而非仅仅管理日志文件。 

12、管理进程将后台管理任务当作一次性进程运行。当环境就等同于应用程序长时间运行的进程时,管理任务(如:数据库迁移)会被作为一次性进程而执行。

 

上述特征非常适合需要快速部署的应用程序,因为它们极少依赖、甚至不依赖部署环境。由于不依赖部署环境,底层云平台可以使用自动化、简单、统一的机制快速创建新环境及为其部署应用程序。由此,12要素应用程序模式实现了速度的提升。
上述特征还非常适用于瞬时性更新,以微乎其微的成本“丢弃”应用程序。由于任何应用程序的状态,无论是在内存中还是别处都要被提取到某个支撑服务上,应用程序环境本身是百分之百可弃的,这就允许应用程序以一种非常简单且自动化的方式来进行弹性扩展。在大多数情况下,底层平台会按所需次数对现有环境进行简单复制并启动进程,通过停止正在运行的进程和删除环境实现纵向收缩,从而达到不在备份或保存上耗费功夫。由此,12要素应用程序模式实现了规模扩大。
最后,应用程序的易处理性使底层平台可以从故障事件中非常快速地进行自动恢复。将日志作为事件流大大增加了应用程序在运行时对于其底层动作的可见性,强制校验环境和配置机制对支撑性服务的一致性管理又使得云平台能够提供运行时间、结构等各方面的丰富可视化功能。由此,12要素应用程序架构实现了安全性保障。

posted on 2016-06-08 22:05  allcloud  阅读(1438)  评论(0编辑  收藏  举报

导航