文章目录

  • 设计目标
    • Agent API
    • 平台API
    • 插件API

设计目标

本文从宏观的角度介绍CloudStack的设计思想,CloudStack的设计主要有以下几个目标:

  1. 集成各种各样的硬件
  2. 提供一个用于执行云上操作的API平台
  3. 编排硬件资源,这些硬件资源可能处于防火墙的保护之中
  4. 可水平扩展的管理层
  5. 实现云上操作的最佳数据通路
  6. 美观和功能强大的UI界面

本文只大概说说前三个目标的实现。
在CloudStack中,有以下三种类型的API

  • 平台API(Platform API):REST-like API,终端用户和管理员可以用它来控制CloudStack
  • Agent API:基于JOSN格式,用于CloudStack组件和服务器资源(ServerResource:可以理解为CloudStack运行在硬件资源上的代码)进行通信,服务器资源将这些API翻译成硬件理解的指令
  • 插件API:Java API,有预定义的接口,可以直接加入到CloudStack的部署中来增加或修改CloudStack的行为

Agent API

兼容各种各样的硬件是件非常不容易的事,至少有以下几个难点:

  • 接口不同。有些使用XML/RPC;有些使用SOAP;有些使用CLI;有些使用C。有些甚至可能还不提供编程接口
  • 语言不同
  • 取消操作或超时的机制不同,有些甚至没有取消或超时机制
  • 一个命令的响应时间不同
  • 大多数都不支持事务

为了解决以上问题,CloudStack使用了以下设计方案:

  • CloudStack由两部分组成:管理服务器和服务器资源,管理服务器包含业务逻辑,服务器资源包含与硬件通信的API翻译层
  • 服务器资源可以和管理服务器部署在一起或部署在远程Agent容器上,服务器资源不能访问数据库
  • 服务器资源和管理服务器是对等关系,而不是主从关系
  • 管理服务器和服务器资源之间使用JSON数据进行通信,因此服务器资源不一定要使用Java来实现
  • 服务器资源要以幂等的方式执行,数据库事物不允许把几个操作包装起来发送到硬件上执行

以下几个问题是由于CloudStack开发团队时间和精力有限造成的:

  • 所有的Agent API命令都是Java类
  • 所有服务器资源都是Java写的
  • XenServer和 VMWare的服务器资源都和管理服务器部署在一起,而不是放到远程的Agent上
  • KVM只支持作为一个远程Agent部署,不支持和管理服务器部署到一起
  • Agent代码的特性比较少,创建、删除或升级服务器资源目前都是手动的

平台API

平台API的设计如下:

  • REST-live风格
  • REST API设计必须考虑请求的来回开销,因此,REST API方法会返回更大的对象来最小化这些开销
  • 有三种类型的REST API
    • 同步API:一般只访问管理服务器的数据库
    • 异步API:对云进行操作
    • 异步创建API:在管理服务器的数据库中创建新的实体,并对这些实体进行一些操作

REST API分为两部分

  • 用户API:必须向后兼容;必须不能泄露任何关于底层硬件资源的信息
  • 管理员API:尽量向后兼容

插件API

插件API使用了适配器模式,如Network Guru、Hypervisor Guru等适配器,插件API通过实行这些适配器接口来定义CloudStack的操作。

CloudStack设计思想相关推荐

  1. AI框架精要:设计思想

    AI框架精要:设计思想 本文主要介绍飞桨paddle平台的底层设计思想,可以帮助用户理解飞桨paddle框架的运作过程,以便于在实际业务需求中,更好的完成模型代码编写与调试及飞桨paddle框架的二次 ...

  2. 彻底理解OkHttp - OkHttp 源码解析及OkHttp的设计思想

    OkHttp 现在统治了Android的网络请求领域,最常用的框架是:Retrofit+okhttp.OkHttp的实现原理和设计思想是必须要了解的,读懂和理解流行的框架也是程序员进阶的必经之路,代码 ...

  3. Linus 谈 Git 的设计思想,顺带骂了一堆人(视频)

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废 今天是周末,但也别忘记学习哦~ 昨天在网络上看到一个视频,<Linux介绍git的特点和设 ...

  4. 「完结」总结12大CNN主流模型架构设计思想

    http://blog.sina.com.cn/s/blog_cfa68e330102zocn.html 专栏<CNN模型解读>正式完结了,在这一个专栏中,我们给大家回顾了深度学习中的各类 ...

  5. MapReduce原理与设计思想

    转自:http://www.cnblogs.com/archimedes/p/mapreduce-principle.html 简单解释 MapReduce 算法 一个有趣的例子 你想数出一摞牌中有多 ...

  6. len(x) 击败 x.len(),从内置函数看 Python 的设计思想

    内置函数是 Python 的一大特色,用极简的语法实现很多常用的操作. 它们预先定义在内置命名空间中,开箱即用,所见即所得.Python 被公认是一种新手友好型的语言,这种说法能够成立,内置函数在其中 ...

  7. 【设计思想解读开源框架】java监听模式和观察者模式

    深耕技术,啃下22个技术点 互联网行业更新换代非常快,行业常态便是不断学习,因此这些主流技术你一个都不能落下! ①并发编程 Java并发编程是整个Java开发体系中最难以理解,但也是最重要的知识点之一 ...

  8. 【设计思想解读开源框架】java如何发送post请求

    在这里分享一份 [mybatis从入门到精通] 的强力教程,定能够助你一臂之力. Mybatis基本介绍 ORM和MyBatis 对象/关系数据库映射(ORM) 基本映射方式 流行的ORM框架简介 目 ...

  9. 透彻理解Spring事务设计思想之手写实现

    2019独角兽企业重金招聘Python工程师标准>>> 前言 事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原 ...

最新文章

  1. zipfile java 解压速率,使用java.util.ZipFile在同一层次中解压缩zipfile
  2. 2021绵阳南山高考成绩查询,绵阳南山中学举行2021年冲刺高考百日誓师大会
  3. Java字节序,java整型数与网络字节序 byte[] 数组转换关系(ByteArrayOutputStream用法)
  4. java事件处理过程分布写_Java 9中的进程处理
  5. document.compatMode的CSS1compat
  6. mysql添加联合主键
  7. vue实现数字“滚动式增加”效果 【插件化封装】
  8. vs2008 及.netframework3.5 安装问题
  9. python效率低为什么_为什么 Python 这么慢?
  10. 汇编语言---内存变量的地址
  11. ZooKeeper(四)ZooKeeper的简单使用
  12. 从网络上下载文件到本地
  13. c#读取文本文件出现乱码
  14. 赫伯特·西蒙前半生泡妞打架,后半生拿图灵奖、诺贝尔奖,成人工智能大神
  15. 智慧工厂建设方案(智慧工厂涉及业务系统)
  16. arcgis pro利用python进行空间插值
  17. hd Aruba wifi / honor
  18. Logstash系列: mutate拦截器的使用
  19. 无人驾驶带动激光雷达降价,考古学家“拖了千年的作业”有指望了
  20. List去除重复数据的几种方式和性能比较

热门文章

  1. python爬虫能干什么-python爬虫能干什么
  2. python零基础怎么学-零基础怎么学习python?
  3. python学习费用-python学习,是看免费视频自学,还是报个收费班学习好?
  4. 以下选项不是python打开方式的是-模拟试卷 A
  5. python小程序源代码-Python数据库小程序源代码
  6. 从零开始学python网络爬虫-从零开始学Python网络爬虫 PDF 下载
  7. python毕业设计开题报告-基于Python图书管理系统开题报告
  8. python入门基础代码图-python入门代码指南教程书籍推荐2020总结全集汇总
  9. 关于 quick-cocos 状态机
  10. UVa11019 Matrix Matcher(hash+kmp)