CloudStack设计思想
文章目录
- 设计目标
- Agent API
- 平台API
- 插件API
设计目标
本文从宏观的角度介绍CloudStack的设计思想,CloudStack的设计主要有以下几个目标:
- 集成各种各样的硬件
- 提供一个用于执行云上操作的API平台
- 编排硬件资源,这些硬件资源可能处于防火墙的保护之中
- 可水平扩展的管理层
- 实现云上操作的最佳数据通路
- 美观和功能强大的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设计思想相关推荐
- AI框架精要:设计思想
AI框架精要:设计思想 本文主要介绍飞桨paddle平台的底层设计思想,可以帮助用户理解飞桨paddle框架的运作过程,以便于在实际业务需求中,更好的完成模型代码编写与调试及飞桨paddle框架的二次 ...
- 彻底理解OkHttp - OkHttp 源码解析及OkHttp的设计思想
OkHttp 现在统治了Android的网络请求领域,最常用的框架是:Retrofit+okhttp.OkHttp的实现原理和设计思想是必须要了解的,读懂和理解流行的框架也是程序员进阶的必经之路,代码 ...
- Linus 谈 Git 的设计思想,顺带骂了一堆人(视频)
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废 今天是周末,但也别忘记学习哦~ 昨天在网络上看到一个视频,<Linux介绍git的特点和设 ...
- 「完结」总结12大CNN主流模型架构设计思想
http://blog.sina.com.cn/s/blog_cfa68e330102zocn.html 专栏<CNN模型解读>正式完结了,在这一个专栏中,我们给大家回顾了深度学习中的各类 ...
- MapReduce原理与设计思想
转自:http://www.cnblogs.com/archimedes/p/mapreduce-principle.html 简单解释 MapReduce 算法 一个有趣的例子 你想数出一摞牌中有多 ...
- len(x) 击败 x.len(),从内置函数看 Python 的设计思想
内置函数是 Python 的一大特色,用极简的语法实现很多常用的操作. 它们预先定义在内置命名空间中,开箱即用,所见即所得.Python 被公认是一种新手友好型的语言,这种说法能够成立,内置函数在其中 ...
- 【设计思想解读开源框架】java监听模式和观察者模式
深耕技术,啃下22个技术点 互联网行业更新换代非常快,行业常态便是不断学习,因此这些主流技术你一个都不能落下! ①并发编程 Java并发编程是整个Java开发体系中最难以理解,但也是最重要的知识点之一 ...
- 【设计思想解读开源框架】java如何发送post请求
在这里分享一份 [mybatis从入门到精通] 的强力教程,定能够助你一臂之力. Mybatis基本介绍 ORM和MyBatis 对象/关系数据库映射(ORM) 基本映射方式 流行的ORM框架简介 目 ...
- 透彻理解Spring事务设计思想之手写实现
2019独角兽企业重金招聘Python工程师标准>>> 前言 事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原 ...
最新文章
- zipfile java 解压速率,使用java.util.ZipFile在同一层次中解压缩zipfile
- 2021绵阳南山高考成绩查询,绵阳南山中学举行2021年冲刺高考百日誓师大会
- Java字节序,java整型数与网络字节序 byte[] 数组转换关系(ByteArrayOutputStream用法)
- java事件处理过程分布写_Java 9中的进程处理
- document.compatMode的CSS1compat
- mysql添加联合主键
- vue实现数字“滚动式增加”效果 【插件化封装】
- vs2008 及.netframework3.5 安装问题
- python效率低为什么_为什么 Python 这么慢?
- 汇编语言---内存变量的地址
- ZooKeeper(四)ZooKeeper的简单使用
- 从网络上下载文件到本地
- c#读取文本文件出现乱码
- 赫伯特·西蒙前半生泡妞打架,后半生拿图灵奖、诺贝尔奖,成人工智能大神
- 智慧工厂建设方案(智慧工厂涉及业务系统)
- arcgis pro利用python进行空间插值
- hd Aruba wifi / honor
- Logstash系列: mutate拦截器的使用
- 无人驾驶带动激光雷达降价,考古学家“拖了千年的作业”有指望了
- List去除重复数据的几种方式和性能比较
热门文章
- python爬虫能干什么-python爬虫能干什么
- python零基础怎么学-零基础怎么学习python?
- python学习费用-python学习,是看免费视频自学,还是报个收费班学习好?
- 以下选项不是python打开方式的是-模拟试卷 A
- python小程序源代码-Python数据库小程序源代码
- 从零开始学python网络爬虫-从零开始学Python网络爬虫 PDF 下载
- python毕业设计开题报告-基于Python图书管理系统开题报告
- python入门基础代码图-python入门代码指南教程书籍推荐2020总结全集汇总
- 关于 quick-cocos 状态机
- UVa11019 Matrix Matcher(hash+kmp)