CloudHosting平台Eucalyptus分析.
-----Step 1-----: 架构分析
Eucalyptus架构特征
非侵入式
高度模块化(highly modular cooperative)
采用公开,标准的通信协议
API与AWS兼容(SOAP & REST)
分层架构(Layer architecture)
一站式管理平台(Management Platform)
虚拟网络(Virtualized Network)
虚拟计算 & 存储(Virtualized Compute & Virtualized Storage)
Eucalyptus组件
每个Eucalyptus服务组件都提供了一个well-formed,语言无关的WSDL文档格式的API和数据结构.内部服务的安全认证采用标准的WS-Security机制.
Eucalyptus由5个核心组件组成:
Cloud Controller(CLC): 虚拟化底层资源.
Cluster Controller(CC): 对Cluster作抽象. CC从一批VM采集信息并调度VM在具体NC上执行. CC同时管理着virtual instance network和执行由CLC指定的SLA.由单个CC管理的所有节点必须处于同一个广播域中.
Node Controller(NC): 用于托管虚拟机.在当前主机上负责虚拟机的执行,检测,终止等生命周期管理.
NC在当前主机上运行,获取和清理本地VM实例镜像(kernel, root file system, ramdisk image), 同时也可通过查询/控制接口来查询/控制当前节点(host OS and the hypervisor)的系统软件.NC同时负责管理虚拟网络端点.
SC(Storage Controller): 实现了基于块访问的网络存储(类似Amazon EBS), 负责和各种第三方存储系统(NFS,iSCSI等)通信.
弹性块存储服务(EBS)作为一个标准Linux块设备挂接到虚拟机, 磁盘流量通过LAN(locally attached network)发送到远端存储.
EBS卷(volume)不能跨VM实例共享, 但是允许对其创建一个快照并存储到一个中央存储系统如Eucalyptus的存储服务Walrus.
Walrus(put/get存储): 允许用户存储持久化数据.(类似Amazon S3).通过bucket和对象的方式组织,延迟一致.
允许的用户级操作: 创建, 删除, list buckets, put, get, delete, 设置访问控制权限. Walrus在接口上与Amazon S3兼容,并支持AMI(Amazon Machine Image),提供了一个可同时访问VM镜像和用户数据的机制.
Management Platform: 为cloud管理员提供了一站式控制台,用于配置和管理cloud.
MP同时为administrator, project manager, developer或其它用户提供了可定制的界面,并具有授权,认证等访问控制.
具体功能包括: VM管理, 存储管理, 用户/组管理, 帐户管理, 监控, SLA定义和执行,cloud-bursting, provisioning等.
-----Step 2-----: 代码概要分析
初步浏览了eucaplytus的代码.
项目结构如下:
clc
modules
cluster-manager: cluster WEB管理模块
group-manager: 用户/组 WEB管理模块
storage-manager: 存储(S3)管理模块
storage-controller: (EBS)块存储管理模块,也可以看作是EBS的代理.
image-manager: 镜像管理模块.
cluster: Cluster Controller模块.控制局域网内的node controller
node: Node Controller模块.控制当前机器节点上的虚拟机实例.通过libvirt来操纵具体虚拟机实例.
storage: Storage Controller,也就是Walrus. 实际上相当于一个存储委托,后端挂接具体的存储系统(如S3).
补充
WEB管理平台用Java + GWT开发的,作核心调度和管理.
其它模块都是用c编写的:
WEB管理平台用Java + GWT开发的,作核心调度和管理.
其它模块都是用c编写的:
cluster controller管理局域网内的node controller.
node controller通过libvirt来操纵具体的VM: KVM或XEN.
Storage只是一个存储proxy, 具体存储系统依赖于第三方.目前可以认为是一个S3的代理.
每个模块都使用AXIS来提供一个WSDL web服务操作接口.
目前的代码实现只可以看作一个prototype.在架构设计上有一定指导意义, 但仍有非常多的扩展工作要做.