zoukankan      html  css  js  c++  java
  • 云计算时代应用设计十二要素

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

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

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

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

    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


  • 相关阅读:
    JAVA语法之小结
    JAVA之经典Student问题1
    Android之动画1
    Android之屏幕测试
    Android之点击切换图片
    Android之标签选项卡
    Android简单计算器
    Javascript之相册拖动管理
    Javascript之改变盒子颜色
    CSS之照片翻转
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6935094.html
Copyright © 2011-2022 走看看