产品架构

软件架构

ZStack ZSphere软件架构特点:
  • 全异步架构:异步消息、异步方法、异步HTTP调用。
    • 异步消息:使用消息总线进行各服务的通信连接。在调用服务时,源服务发消息给目的服务,并注册一个回调函数,然后立即返回,一旦目的服务完成任务,就会触发回调函数回复任务结果。异步消息支持并行处理。
    • 异步方法:服务之间采用异步消息进行通信。服务内部的一系列相关组件或插件,也是通过异步方法来调用,调用方法与异步消息一致。
    • 异步HTTP调用:采用插件机制,为每个插件设置相应的代理程序,为每个请求设置回调URL在HTTP的包头,任务结束后,代理程序会发送应答给调用者的URL。
    • 基于异步消息、异步方法、异步HTTP调用这三种方式,ZStack ZSphere构建了一个分层架构,保证所有组件均能实现异步操作。
    • 基于全异步架构机制,单管理节点每秒可并发处理上万个API请求,还可同时管理上万台主机和数十万台虚拟机。
  • 无状态服务:单次请求不依赖其他请求。
    • 计算节点代理、存储代理、网络服务、控制台代理服务、配置服务等,均不依赖其他请求。一次请求可包含所有信息,相关节点无需维护存储任何信息。
    • 使用一致性哈希环,对管理节点、计算节点或其他资源以UUID为唯一ID进行认证的哈希环处理。消息发送者无需知道待处理消息的服务实例,服务也无需维护、交换相关资源信息,服务只需单纯处理消息即可。
    • 管理节点间共享的信息非常少,两个管理节点即可满足高可用性和可扩展性需求。
    • 无状态服务机制让系统更为健壮,重启服务器不会丢失任何状态信息,数据中心的伸缩性维护更为简单。
  • 无锁架构:一致性哈希算法。
    • 一致性哈希算法保证同一资源的所有消息均被同一服务实例来处理。这种聚合消息到特定节点的方法,降低同步与并行的复杂度。
    • 使用工作队列避免竞争锁问题,串行任务以工作队列的方式保存在内存中,工作队列可对任意资源的任意操作进行并行处理来提高系统并行度。
    • 基于队列的无锁架构,任务可简单控制并行度,从而提升系统性能。
  • 进程内微服务:微服务解耦。
    • 使用消息总线对各服务进行隔离控制,例如,虚拟机服务、身份认证服务、快照服务、硬盘服务、网络服务、存储服务等。所有微服务均集合在管理节点进程内,各服务之间利用消息总线进行交互,所有消息发送到消息总线后,再通过一致性哈希环选择目的服务进行转发处理。
    • 进程内微服务以星状架构实现各服务独立运行,将高度集中的控制业务进行解耦,实现系统的高度自治和高度隔离,任何服务出现故障并不影响其他组件,可靠性与稳定性得到有效保障。
  • 全插件结构:插件支持横向扩展。
    • 任何新加入的插件对目前其他插件没有任何影响, 均是独立自主提供服务。
    • 支持策略模式和观察者模式进行插件设计。策略插件会继承父类接口然后执行具体实现;观察者插件会注册Listener进行监控内部业务逻辑的事件变化,当应用内部发现事件时,观察者插件会对此事件做出自响应,在插件自身代码中执行相应业务流。
    • 插件的横向扩展让ZStack ZSphere可以快速更迭,而整体系统架构依然健壮。
  • 工作流引擎:顺序管理,出错回滚。
    • 基于XML对每个工作流程进行清晰定义,在任何步骤出现错误均可按照原本执行路径进行回滚,清理掉执行过程的垃圾资源。
    • 每个工作流还可包含子工作流用于扩展业务逻辑。
  • 标签系统:支持业务逻辑变更,增加资源属性。
    • 支持使用系统标签和插件机制对原本业务逻辑进行扩展变更。
    • 使用标签机制可对资源进行分组划分,支持对指定标签进行资源搜索。
  • 瀑布流架构:支持资源的级联操作。
    • 使用Cascade框架对资源管理进行瀑布状的级联操作。例如:对资源进行卸载或删除时,会对相关资源进行级联操作。
    • 资源可通过插件形式加入到瀑布框架中,加入或退出瀑布框架,并不影响其他资源。
    • 级联机制使得资源配置灵活轻便,快速满足客户资源配置变更。
  • 全自动化部署:Ansible无代理自动部署。
    • 使用Ansible进行无代理的全自动化安装依赖,配置物理资源,部署代理程序。全过程对用户透明,无需额外干预,透过重连代理程序对代理进行升级。
  • 全API查询:任意资源的任意属性均可查询。
    • 支持数百万个条件的资源查询,支持全API查询,支持任意组合。

功能架构

ZStack ZSphere功能架构如图 1所示:
图 1. 功能架构


ZStack ZSphere功能架构特点:
  • 提供企业级数据中心基础设施的计算、存储、网络资源管理服务,底层支持KVM虚拟化技术,支持DAS/NAS/SAN/DSS存储类型,例如支持本地存储、NFS存储、SAN存储、分布式存储等,支持分布式交换机和分布式端口组网络模型。
  • 采用ZStack ZSphere作为核心引擎,使用消息总线同数据库MariaDB及各服务模块进行通信,提供虚拟机管理、主机管理、存储调度、网络功能、系统管理、监控运维等功能。
  • 提供Java和Python的SDK,支持RESTful APIs进行资源调度管理。

资源结构

ZStack ZSphere资源结构如图 1所示:
图 1. 资源结构


ZStack ZSphere主要包含以下资源:
  • 数据中心(Data Center):虚拟化平台内最大的资源命名空间,包括:集群、主机、数据存储、分布式交换机、分布式端口组等资源。
  • 集群:一组主机(计算节点)的逻辑集合。
  • 主机:运行KVM虚拟化Hypervisor的x86或ARM物理服务器,为虚拟机提供计算、网络、存储等资源。
  • 虚拟机:运行在物理主机上的虚拟主机,可像物理主机一样运行操作系统与业务应用。
  • 数据存储:为虚拟机及其应用数据提供存储空间的虚拟化资源,可分为本地存储和网络共享存储。
  • 分布式交换机:为集群内虚拟机提供统一虚拟网络管理和监控功能的虚拟交换机设备。
  • 分布式端口组:分布式交换机端口的逻辑分组,用于端口配置。
  • 镜像存储:为虚拟机或硬盘使用的镜像文件提供存储空间的虚拟化资源,可分为单机镜像仓库和分布式镜像仓库。
  • 镜像:虚拟机或硬盘使用的镜像文件,包括两种类型:系统镜像、硬盘镜像。
ZStack ZSphere资源间存在以下两类关系:
  • 从属关系:类似人类社会中的人际关系,包括父子关系、兄弟关系、祖孙关系、朋友关系。
    具体定义为:
    • 父子关系:资源A是资源B的父亲或孩子。例如集群和主机,主机和虚拟机。这两组资源的后者均在前者中运行。
    • 兄弟关系:资源A和B拥有同样的父亲则为兄弟关系。例如集群和分布式交换机,集群和数据存储,这两组资源的父亲均为数据中心。
    • 祖孙关系:资源A是资源B的直系祖父或直系祖孙。例如:数据中心是集群的父亲,集群是主机的父亲,主机是虚拟机的父亲,因此数据中心是主机的祖父,集群是虚拟机的祖父。
    • 朋友关系:资源A与资源B不存在以上三种关系,但资源A和B在某些情境下需要分工合作,例如数据存储和镜像存储。两者需相互配合为集群提供服务。
  • 数量关系:类似人类社会中的数量限制关系,包括1:n(一对多)、n:1(多对一)、n:n(多对多)。
    具体定义为:
    • 1:n:表示资源A可新建/添加/加载多个资源B,例如一个集群内可添加多台主机,一个分布式交换机可加载多个集群。
    • n:1:表示多个资源A可新建/添加/加载于一个资源A,例如多台主机可添加至同一个集群,多个集群可加载同一个分布式交换机。
    • n:n:表示一个资源A可新建/添加/加载多个资源B,同时一个资源B也可以新建/添加/加载于多个资源A。例如一个镜像存储可加载多个数据中心,一个数据中心也可加载多个镜像存储。