ITKeyword,专注技术干货聚合推荐

注册 | 登录

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

yeasy 分享于 2014-10-25

推荐:浅谈云计算之SAN扩展系统设计

设计背景:不管是公有云还是私有云,为了提供服务的持续性(Business Continuity,BC)和数据的灾难恢复(Disaster Recovery,DR)都不可能只有一个数据中心(Data

2018阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址https://promotion.aliyun.com/ntms/yunparter/invite.html

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

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

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

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

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)、运行,各个步骤的任务都很明确,要相互隔离。例如,绝对不允许在运行时去改代码和配置信息(见过太多工程师直接 SSH 到生产环境修 bug 了)。

Processes - 进程

Execute the app as one or more stateless processes

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

推荐:如何设计一个基于云计算的大型分布式系统

            当今云计算被炒的沸沸扬扬,云计算显然已经是软件行业的大势所趋,如何设计一个基于云计算的大型分布式系统呢,下面基于云计算架构大型分布式系统展

Port binding - 端口

Export services via port binding

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

可以是 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

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

这点很不容易,真正要求工程师懂研发,还得懂运维。

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


推荐:公有云长期战略合作协议,为其提供横跨设计、建设、运营的全生命周期服务的云计算解决方案,涵盖云基础设施即服务(IaaS)和平台即服务(PaaS)和软件即服务(SaaS)

IBM在云计算市场的风光似乎只局限在私有云市场。在以Amazon、Google为带代表的互联网精英们跑马圈地、推倒一堵堵围墙的公有云领域,IBM看上去有些黯然。 IBM在公

云计算时代应用设计十二要素 在云计算时代,应用的整个生命周期将在数据中心里度过,这跟传统软件模式极大不同。 云应用实际上意味着:代码 + 配置 + 运行时环境。 什么样的软件才是可用性和可

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。