2015年4月,一家全新的基础架构即服务的软件产品ZStack面世。ZStack的主创人员是自在海外云计算公司的中国人。ZStack是基于Java语言,结合了OpenStack和CloudStack上的一些优势,又全新的设计了整套管理软件的架构。

ZStack的架构特点包括:全异步,进程内微服务,无锁架构,无状态,全插件系统,自高可靠,基于工作流的回滚架构,资源管理瀑布架构。提供的能力包括,一键安装,无缝升级,灵活配置,单台管理节点可以管理数十万的物理服务器和上百万的虚拟机,超快的云主机创建和部署能力。

ZStack是全异步架构。全异步是说,所有ZStack中的操作都以异步操作完成,无需占用任何当前线程等待其他操作的完成,这是ZStack能够同时响应和管理数十万主机节点的关键。而同步架构通常需要占用当前thread,等待所有操作完成后才返回。例如,通常基础架构即服务创建一个VM需要完成以下操作:

创建VM数据结构(compute 服务) ---> 选择VM的目的host(compute 服务) ---> 分配存储资源(storage 服务)  ----> 分配网络服务(network 服务) ---> 在host上创建VM(compute 服务)

在上述过程中,如果使用同步架构,在并发量大的情况下,比如1000人同时创建VM,至少要占用1000个thread,这极大的消耗了系统的资源。但在ZStack全异步的架构下,用户创建VM的操作提交并注册callback后立即返回,不占用任何thread等待。当所有创建VM的步骤完成后,之前注册的callback把结果返回给操作的发起者。

ZStack的异步架构分为三个部分:

1. 消息总线: 服务之间通过消息异步通讯。一个服务完成了另一个服务提交的请求后,将结果通过返回消息返回给消息来源方。消息请求方无需等待,只需在发送消息的时候注册一个回调函数,返回消息到达时会自动调用该回调函数来通知结果

2. 异步函数调用: 服务内部的操作,通过类似JavaScript的aysnc method call实现。一个操作无需等待起调用的操作完成,而是在调用某个函数的时,同时注册一个回调函数用于接收结果

3. 异步http请求: ZStack在跟运行在不同机器上的Agent(例如kvm agent)通讯时,使用的异步http请求。agent在完成具体操作后,会将结果通过http发回到ZStack管理程序,再通过回调函数通知操作的发起者

以上三个方面,贯穿了ZStack的整个实现。凡是秒级以上的操作,都是以异步的方式实现的。

其它项目例如OpenStack/CloudStack,90%以上的是同步操作。偶有异步操作,由于不是全异步架构,反而会占用更多的线程。比如CloudStack的storage操作,请求方会起一个新的thread来完成操作,同时发起操作的thread睡眠等待另一个thread的完成,这就造成原来同步只需要一个thread的情况,变成了需要两个thread。反而让情况更糟,这就是因为整个架构不是全异步引起的。

稳定性ZStack设计中最强调的部分。ZStack的稳定性依靠两个部分保证:架构和测试。ZStack架构宏观上采用微服务,类似Openstack,将不同的功能的模块实现成不同的服务,服务相互之间并没有直接依赖,使用消息总线通讯,从而实现宏观架构的松耦合。与Openstack不同,ZStack并没有将不同服务运行在不同的进程中,而是所有服务仍然共享同进程。ZStack称之为进程内微服务,这主要是为了解决各服务之间通过RPC调用的天然不稳定性,难以实现事务的问题。ZStack的各服务,可以通过被称为工作流(workflow)的机制,实现事务操作,保证某一个服务的操作失败后,能够rollback此前其它服务已经完成的操作,从而保证系统状态始终处于一致。同时ZStack具有的多节点扩展性(下一节描述)可以解决负载平衡和高可用性的问题。在微观方面,ZStack采用跟著名Java IDE eclipse类似的插件系统。ZStack的每个服务本身都是由不同的插件构成的,插件之间无直接耦合调用关系,而是通过插件系统分发各种事件,以实现服务本身的微观松耦合。

一个独立的ZStack进程称为一个ZStack节点,同一台机器只能运行一个ZStack节点,运行在不同机器上的ZStack节点可以构成一个ZStack 集群用以管理拥有数量庞大服务器的数据中心。

ZStack 集群中的每一个节点都是平等关系,没有master-slave关系,这就保证了ZStack 集群没有单点失效(single failure point)。当集群中某一个节点出现问题后,集群中的其它节点会自动接管该节点的工作。为了提高集群的稳定性,每个ZStack 节点又是无状态的,其管理的的资源跟其它节点管理的资源之间没有任何关联。为了实现这一点,ZStack借鉴了数据库中sharding的概念(http://en.wikipedia.org/wiki/Shard_(database_architecture)),其核心思想是,将每个节点管理的资源(集群,host, vm,以及vm相关的volume等资源)通过sharding算法,分散到不同的节点中去。所有针对资源的操作,例如VM,都会被消息总线转发到管理该资源的mgmt 节点。当某个节点出现问题时,集群会重新shard失效节点上的资源,让集群中的其它节点接管。

在基础架构即服务中,针对某一个资源的操作,往往会经过多个服务,例如创建一个VM,可能经历compute, storage, network等服务,在OpenStack架构中,这些服务是运行在不同进程不同机器上的,由于RPC的天然不稳定性(见稳定性章节),服务之间的相互调用会很容易失败,而且在发起调用的服务很难确定被调用服务的状体,例如它是否在运行。一旦发生错误,调用方往往要等待一个超时时间才能发现错误,占用了调用方的资源。在ZStack中,所有服务都运行在同一进程空间,这就意味着,每个ZStack 节点,都有相同的服务在本地运行,配合ZStack resource的sharding算法,针对某一个resource例如VM的操作,都会在本地相关的服务中完成,其可靠性大大提高。并且由于操作都在一个ZStack 节点完成,当该ZStack 节点发生错误时,用户看到的是整个操作失败,而不会停留在等待某个服务响应的中间状体。

基于ZStack节点集群,用户可以很容易根据需要添加多个ZStack节点,每次添加和减少节点,ZStack都会重新shard resource,以保证节点之间的负载均衡。同时ZStack节点之间的心跳,可以监测到失效的节点,以重新shard该节点的资源。用户可以根据自己数据中心的稳定性,灵活配置该heartbeat值,以达到最佳效果。

基础架构即服务是云计算最底层的基础架构,它质量的高低很大程度上决定了整个云计算的稳定与否。如果仅有先进的架构,但没有完备的质量保证方案,再优秀的开发人员也无法确保高质量的产品。ZStack从项目伊始就并行构架了一个完善的自动化测试系统。该测试系统的设计原则是,强大,自动,易用(容易添加更多的测试)。

ZStack的自动化测试系统主要分两大类:单元测试和集成测试。ZStack的开发过程中采用了类似敏捷开发模式中测试优先(或者测试驱动开发Test Driven Development)的方式,确保每增加一个新的功能模块和API都需要添加对应的单元测试,这样就可以把大部分的基础bugs消灭在萌芽阶段。基础架构即服务内部功能众多,如果仅按照传统的集成测试方法,很难覆盖各种复杂的操作路径,遗留测试真空地带。ZStack的集成测试结合了传统集成测试和基于模型的测试(Model Based Test)。首先利用传统的集成测试手段构造各种常见的基础架构即服务操作,例如VM的启动,网络/存储的分配,以检查ZStack的基本功能。其次把所有用户可能的操作都抽象出来,确定它们之间的依赖关系,并构建模型。通过模型的自由组合来测试各种复杂的结合操作。这种模型测试的过程就好比模拟一个用户各种随机的操作可能,从而最大程度的检查ZStack在各种操作组合中的稳定表现。ZStack的测试系统和build系统进行了完美结合,在每一次ZStack代码更新后,都会自动执行一次测试,以检查新代码是否会带来新的缺陷。

基础架构即服务的能力是管理大量的物理资源(如机器,网络,存储)。ZStack开发了一个高效的模拟器。通过模拟物理资源的行为,可以在一台普通的4核笔记本上模拟出超过3万台主机,10万台虚拟机的操作环境。有了这样的模拟环境,无疑是给ZStack的测试提供了坚强的后盾。 在现有用户的分析报告中,在模拟同时创建500个云主机的场景下, ZStack可以轻松的在2.5秒内完成任务;而相同环境下CloudStack无法完成并发500次的请求。

此外,ZStack的插件系统提供了丰富的插件接口,用于实现对用户体验非常重要的功能(例如前面的VM事件审计功能)。每个新加入ZStack的功能或模块,都可以通过插件系统公开自己的插件接口,从而不断扩展ZStack功能以实现增强易用性,完善用户体验的。

ZStack本身也是参照了EC2的设计,并以之为基础。同时,ZStack也借鉴了很多源自VMware vcloud的概念,向客户提供更适合私有云的使用模式。由于ZStack各个服务都是由一组插件构成的,可以很容易的基于EC2的模式,实现一个基于现有插件接口新的插件,将EC2的功能整合成类似vcloud中的相应功能。

欲了解更多信息,请查看Zstack官方网站:http://www.zstack.org

基于云计算Iaas平台的ZStack的更多相关文章

  1. PLUTO平台是由美林数据技术股份有限公司下属西安交大美林数据挖掘研究中心自主研发的一款基于云计算技术架构的数据挖掘产品,产品设计严格遵循国际数据挖掘标准CRISP-DM(跨行业数据挖掘过程标准),具备完备的数据准备、模型构建、模型评估、模型管理、海量数据处理和高纬数据可视化分析能力。

    http://www.meritdata.com.cn/article/90 PLUTO平台是由美林数据技术股份有限公司下属西安交大美林数据挖掘研究中心自主研发的一款基于云计算技术架构的数据挖掘产品, ...

  2. 亚马逊AWS在线系列讲座——基于AWS云平台的高可用应用设计

    设计高可用的应用是架构师的一个重要目标,可是基于云计算平台设计高可用应用与基于传统平台的设计有很多不同.云计算在给架构师带来了很多新的设计挑战的时候,也给带来了很多新的设计理念和可用的服务.怎样在设计 ...

  3. C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理

    在现今很多网站里面,都使用了微信开放平台的扫码登录认证处理,这样做相当于把身份认证交给较为权威的第三方进行认证,在应用网站里面可以不需要存储用户的密码了.本篇介绍如何基于微信开放平台的扫码进行网站的登 ...

  4. 基于 Node.js 平台,快速、开放、极简的 web 开发框架。

    资料地址:http://www.expressjs.com.cn/ Express 基于 Node.js 平台,快速.开放.极简的 web 开发框架. $ npm install express -- ...

  5. 云计算PAAS平台测试设计之镜像管理

    下面是云计算PAAS平台页面概览: 今天我们要讲的是镜像管理页面的测试设计: 可以看到,这个页面主要有增删改查四个功能. 1. 查询镜像 (1)易用性:查看镜像查询界面,界面上各组件设计合理.美观.易 ...

  6. 基于微信公众平台的开发(清华大学第二讲)_Alien的笔记

    基于微信公众平台的开发(清华大学第二讲)_Alien的笔记 基于微信公众平台的开发(清华大学第二讲)

  7. IOS基于新浪微博开放平台微博APP

    1.基于新浪微博开放平台APP源码 2.gitHub源代码下载地址 https://github.com/whzhaochao/SinaWeiBoOpen 3.用到的第三放开源库 3.1  RTLab ...

  8. 分享一下我的部分毕设内容:基于Windows Phone平台的污染源管理应用

    原文:分享一下我的部分毕设内容:基于Windows Phone平台的污染源管理应用 毕业半年,又总结了一下之前的工作,发现很多知识不复习都忘记了.最近新闻总是报道北京的空气污染,各种雾霾,各种PM X ...

  9. KoaHub.js是基于 Koa.js 平台的 Node.js web 快速开发框架

    koahubjs KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Function, Class, A ...

随机推荐

  1. jquery 实现 返回顶部

      //Html代码: <div class="backToTop" title="返回顶部">返回顶部</div> //代码 //CS ...

  2. jsp页面往mysql里插入中文后数据库里显示乱码

    1.JSP页面乱码 这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,<%@ page contentType="text ...

  3. python网络编程【一】

    TCP/IP 是标准的协议,它可以使用世界范围内的计算机通过Internet或本地的网络通信 1.编写一个TCP客户端程序 #!/usr/bin/env python import socket, s ...

  4. 提升你的开发效率,10 个 NPM 使用技巧

    对于一个项目,常用的一些npm简单命令包含的功能有:初始化一个文件夹(npm init),下载npm模块(npm install),创建测试(npm test) 和自定义脚本(npm run).但是, ...

  5. http Content-type对照表

    http://tools.jb51.net/table/http_content_type Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定 义网络文件的类型和 ...

  6. WebBrowser Control

    https://msdn.microsoft.com/en-us/library/aa752040(v=vs.85).aspx WebBrowser Control

  7. JSP内置对象---out内置对象

    <%@ page language="java" import="java.util.*" contentType="text/html; ch ...

  8. AWS-CDH5.5安装 CM配置节点

    在CM节点上进行安装时出现错误: ================================================================================ Pa ...

  9. CentOS 静态IP设置

    一.CentOS 修改IP地址修改对应网卡的IP地址的配置文件 # vi /etc/sysconfig/network-scripts/ifcfg-eth0   电信 # vi /etc/syscon ...

  10. 一个有趣的回答(摘自http://www.51testing.com/html/03/n-860703.html)

    假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些.从算法上讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有? 比如,如果是下面两个字符串: S ...