ZStack云计算架构探秘(五): 超强查询能力

IaaS通过数据库管理和记录了各种资源的信息和数据。是否能从海量和复杂的数据库中找到想要的内容,直接关系IaaS管理员的工作效率。例如我们可能希望从10万个虚拟机里查找一个使用了EIP,并且其EIP地址为10.10.1.10的虚拟机。或者查询当天中午12点以后创建的,带有数据卷的,有一个Volume的Snapshot叫做sp1的,虚拟机的名字叫做My-VM的全部虚拟机(有可能有很多叫My-VM的虚拟机)。请问使用了当前“任何”一款云产品的同学,你们是不是可以想到该怎么做呢?也许不会有答案,因为他们都做不到。


ZStack深度集成了强大的查询功能,提供各种查询资源和查询条件,允许用户使用类似SQL语句的查询方式,到数据库中找到对应的结果。ZStack目前可以提供的单一查询条件超过了400万种。如果再进行条件组合,可以得到查询的方式将会无穷无尽。熟悉bug管理工具JIRA的同学们,你一定会被他界面上展示的查询能力所吸引。ZStack的查询功能就是能够让IaaS的管理界面变的和JIRA一样的强大。

ZStack为了构建强大的查询功能,特别开发了一个Query的架构,和每个资源都进行深度的结合。用户不必编程,ZStack就可以把对应的查询条件转换成查询各种资源的方法,而且还可以生成各种条件的组合查询。让我们来看一些实际的例子吧。在ZStack里,一个Zone的数据结构如下表定义:

FIELD DESCRIPTION
uuid zone UUID
name zone name
description zone description
state zone state
type zone type
createDate the time the zone was created
lastOpDate the last time the zone was operated

查询Zone的API,叫做QueryZone。如果不加任何条件,QueryZone会返回当前IaaS系统里管理的全部的Zone的信息(包含上表中的所有元素)。不过我们通常会进行一些内容匹配,例如要查询一个名字是 'beijing-zone'的Zone,那我们就可以在zstack-cli命令行工具输入:

QueryZone name=beijing-zone

可以看到我们用了Zone的一个元素‘name’来进行了内容的匹配。除了‘=’操作符,ZStack还支持其他的常见的SQL语法操作,例如'!=', '>', '>=', '<', '<=', 'in', 'not in', 'is null', 'is not null', 'like', 'not like'。

通过名字查询Zone的例子,实在是太简单了。来看一个稍微复杂一点的吧。有可能,我们有一个虚拟机,它的名字叫做‘SanLiHe',我们想知道它是属于哪个Zone的,以及这个Zone的详细信息,那我们该怎么办呢?ZStack是通过“扩展查询”(Expanded Query)来实现的。所谓扩展查询,就是待查询内容的UUID存在于提供的查询条件所在的表中(作为外键),ZStack就可以提供自动的查询能力。这个例子里,虚拟机本身不是Zone的元素,但是Zone的UUID是VM表中的一个外键元素。我们在zstack-cli中输入的查询语句便是:

QueryZone vmInstance.name=SanLiHe

根据类似的原理,ZStack还支持继续深入的扩展查询。比如我们开头说的,要找一个EIP为10.10.1.10的VM所在的Zone的信息:

QueryZone vmInstance.vmNics.eip.vipIp=10.10.1.10

如果这样的查询条件还不能让你感到满足,让我们来看看下面的这个查询组合吧:

QueryVolumeSnapshot volume.vmInstance.vmNics.l3Network.l2Network.attachedClusterUuids=13238c8e0591444e9160df4d3636be82

它想干什么呢?他是想查询一个Volume的快照,查询的条件是要求这个快照原始Volume所在的虚拟机上的某个网卡所在的L3网络所归属的L2网络挂载在一个UUID是’13238c...’的Cluster上。恩,这需要一些空间的想想能力才能够还原整个场景。这样的例子可能在真是场景中并不多见,但是一旦需要又没有对应能力的时候,就会遇到很大的麻烦。实际中,我们的确会经常遇到一些非常复杂和特殊的查询条件。另外我们也是借这个例子说明一下ZStack查询的能力。

除了超强的查询条件,QueryAPI们还支持各种基本的查询操作,例如,查询组合,查询有限的表项(只想知道名字和UUID),排序,只返回有限的查询结果(例如只返回满足条件的第100到110个虚拟机的内容),所有符合查询条件的结果的数量等等。

细心的读者可能发现,为什么这里只写了使用ZStack命令行zstack-cli的查询方式,有没有UI的呢?十分抱歉,由于ZStack目前的查询能力实在太过超强,我们暂时都没有办法能够在UI界面上暴露出来。前面我们也给了一个很好的例子,未来我们一定可以做到像JIRA一样的好的界面来展现我们的超强查询能力。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值