云计算时代应用设计十二要素

云计算时代应用设计十二要素

在云计算时代。应用的整个生命周期将在数据中心里度过。这跟传统软件模式极大不同。

云应用实际上意味着:代码 + 配置 + 执行时环境。

  • 什么样的软件才是可用性和可维护性好的软件?
  • 什么样的代码才干避免兴许开发的上手障碍?
  • 什么样的实施才干可靠的执行在分布式的环境中?

Heroku (一家 PaaS 服务提供者。2010 年被 Salesforce 收购)平台创始人 Adam Winggins 提出了推荐的应用十二风格,对我们设计和实现云时代(特别是 PaaS 和 SaaS 上)高效的应用都有非常好的參考意义。

以下结合实践经验进行解读。

Codebase - 代码仓库

One codebase tracked in revision control, many deploys

每一个子系统都用独立代码库管理,使用版本号管理,实现独立的部署。

即拆分系统为多个分布式应用,每一个应用使用自己的代码库进行管理。多个应用之间共享的代码用依赖库的形式提供。

Dependencies - 依赖

Explicitly declare and isolate dependencies

显式声明依赖。通过环境来严格隔离不同依赖。所依赖的跟所声明的要保持一致。而且声明要包含依赖库的版本号信息。

Config - 配置

Store config in the environment

在环境变量中保存配置信息,而避免放在源代码或配置文件里。

Backing Services - 后端服务

Treat backing services as attached resources

后端服务(数据库、消息队列、缓存等)作为可挂载资源来使用,这样系统跟外部依赖尽量松耦合。

Build, release, run - 生命周期管理

Strictly separate build and run stages

区分不同生命周期的执行环境。包含创建(代码编译为执行包)、公布(多个执行包和配置放一起打包,打包是一次性的,每次改动都是新的 release)、执行。各个步骤的任务都非常明白。要相互隔离。比如,绝对不同意在执行时去改代码和配置信息(见过太多project师直接 SSH 到生产环境修 bug 了)。

Processes - 进程

Execute the app as one or more stateless processes

以一个或多个无状态的进程来执行应用。即尽量实现无状态。不要在进程中保存数据。尽量通过数据库来共享数据。

Port binding - port

Export services via port binding

通过port绑定来对外提供服务。

能够是 HTTP、XMPP、Redis 等协议。多个应用之间通过 URL 来使用彼此的服务。

Concurrency - 并发模型

Scale out via the process model

通过进程控制来扩展,即尽量以多进程模型进行扩展。

Disposability - 随意存活

Maximize robustness with fast startup and graceful shutdown

高速启动(秒级响应)。优雅关闭(收到 SIGTERM 信号后结束正在处理请求,然后退出),并尽量鲁棒(随时 kill。随时 crash 都不应该导致问题)。

Dev/prod parity - 降低开发与生产环境的差异性

Keep development, staging, and production as similar as possible

尽量保持从开发、演练到生产部署环境的相似性。

这点非常不easy,真正要求project师懂研发,还得懂运维。

Logs - 日志

Treat logs as event streams

将日志当作事件流来进行统一的管理和维护(使用 Logstash 等工具)。

应用仅仅须要将事件写出来,比如到标准输出 stdout,剩下的由採集系统处理。

Admin processes - 管理

Run admin/management tasks as one-off processes

将管理(迁移数据库、查看状态等)作为一次性的系统服务来使用。

管理代码跟业务代码要放在一起进行代码管理。

转载请注明:http://blog.csdn.net/yeasy/article/details/40457885

时间: 2024-10-20 12:49:45

云计算时代应用设计十二要素的相关文章

Heroku创始人Adam Wiggins发布十二要素应用宣言

Heroku是业内知名的云应用平台,从对外提供服务以来,他们已经有上百万应用的托管和运营经验.前不久,创始人Adam Wiggins根据这些经验,发布了一个“十二要素应用宣言(The Twelve-Factor App)”,该宣言由国内工作于安居客的程序员梁山将其翻译为中文,InfoQ中文站摘录如下. 十二要素应用宣言 简介: 如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或“软件即服务”(SaaS).“十二要素应用程序”(12-Factor App)为构建如下的SaaS应用提供了

微服务-十二要素

前言 今天看"如何实现现代应用的快速落地"公开课,提到十二要素,之前文章也提到多次,这里统一汇总下: 十二要素 如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或"软件即服务"(SaaS)."十二要素应用程序"(12-Factor App)为构建如下的SaaS应用提供了方法论: 使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目: 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性: 适合部署在现代的云

现代“十二要素应用”与 Kubernetes

"十二要素应用"为开发SaaS应用提供了方法上的指导,而Docker能够提供打包依赖,解耦后端服务等特性,使得两者非常吻合.这篇文章介绍了Docker特性怎样满足了开发"十二要素应用"的对应要点. "十二要素应用"为构建SaaS应用提供了方法论,是由知名PaaS云计算平台Heroku的创始人Adam Wiggins提出的.请参考这篇 Heroku 创始人 Adam Wiggins 发布十二要素应用宣言. Dockerfile 与k8s/helm

SaaS 应用十二因素

云计算时代,设计和应用软件应用应该注意哪些因素? Docker 为什么最近这么火? Heroku平台提出了推荐的应用风格,对我们设计PaaS和SaaS应用都有很好的参考意义. 代码 一个代码库,使用版本管理,形成多个部署. 依赖 显式定义,隔离不同依赖. 配置 在环境变量中保存配置. 后端服务 后端服务作为可挂载资源使用. 生命周期 创建.发布.部署,各个步骤隔离. 进程 以一个或多个无状态的进程来运行应用. 端口 通过端口绑定来对外提供服务. 并发 通过进程控制来扩展. 可丢弃性 快速启动,优

微软云计算介绍与实践(实践之二十二)

创建私有云Runbook 小张目前是手动管理大量(由晓红申请)的私有云.而自动化是私有云的重要特点,所以小张想用自动化功能去完成很多简单机械的任务.小张决定设法实现这一目标,利用System Center 2012 Orchestrator.于是我们看到了下面的内容: 1.登录到Orchestrator服务器Orchestrator 2.打开Runbook设计 3.在左边的连接下,在运行手册单击鼠标右键并选择New...>文件夹 4.给新文件夹的名称,例如CloudResources 5.在新创

微软云计算介绍与实践(实践之十二)

今天主要实践使用远程 SMB 存储共享保存 VHD.由于周末要看球等原因,内容不多,有料就行.(^_^) 接前面,公司私有云管理员小张已经执行了迁移,他还需要在最近已部署的 Virtual Machine Manager 环境中检查虚拟机设置.所以下一步小张需要确认 Guest01 的存储已经位于 HyperV02 上的 SMB 3.0 共享中,并且虚拟机通过 EvalCluster 群集运行. 1.打开 Virtual Machine Management 控制台,输入用户名 CONTOSO\

Android之十二微信UI界面设计

Android之十二微信UI界面设计 corners_bg.xml <span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color=&qu

数据结构课程设计题目十二_计算机学院学生会的打印机(优先队列)

本文出自:http://blog.csdn.net/svitter 题目12:计算机学院学生会的打印机(优先队列) 小明抱怨学生会的打印机不符合FIFO的原则,看到很多在他后面来打印的同学比他先打印出来.五分钟前,小明的文件就是下一个候选的,如今小明的文件又排到了后面.学生会的同学给小明解释说,学生会的打印机不是採用传统的队列方式,而是採用一种自定义的优先队列方式:每一个要打印的文件被赋予了一个从1到9的优先级(9最高,1最低).打印规定例如以下: 将队列中要打印的文件f从队列中拿出来: 假设在

微软云计算介绍与实践(实践之三十二)

好,今晚的工作很简单,就是创建.NET应用程序监视器.操作步骤如下: 1.单击监视,然后浏览到应用程序监控-.NET监视 2.点击IIS8.0的ASP.NET Web应用程序清单,等待销售(人员)的应用出现在此窗口中.这可能要15分钟左右才出现 3.当出现后,点击制作 4.右键单击管理包模板,然后选择添加监视向导 5.选择.NET应用程序性能监控,然后点击下一步 6.在名称字段中键入Sales应用程序监视器 7.单击新建按钮旁的目标管理包 8.在Name字段中输入Contoso管理,然后单击下一