使用 IBM SmartCloud Entry 实现云资源使用情况的测量

使用自助服务门户来简化常见的云操作

在云计算中对服务进行测量,从而跟踪和计算客户的资源使用情况,这是云环境中按使用付费模式的基础。本文介绍了 IBM® SmartCloud™ Entry 中的计量系统的架构和实现。SmartCloud Entry 使您能够在使用虚拟设备和工作负载时注重最终用户的观点,而不是只注重 IT 或系统管理员的观点。

Ai Jie Niu, 高级软件工程师, IBM

Ai Jie Niu 是一名高级软件工程师,在 IBM 中国系统与技术实验室工作。他于 2005 年毕业于中国农业大学,并于 2011 年加入 IBM。现在,他专注于 IBM SmartCloud Entry 的计费、测量和审批组件。



Yi Cong Lu, 软件工程师, IBM

Yi Cong Lu 是一名软件工程师,在 IBM 中国系统与技术实验室工作。他毕业于北京大学,持有软件工程的硕士学位。他关注的领域是云计算、OSGi 和虚拟化。



Jun Hong Li, 高级软件工程师, IBM

Li Jun Hong 是一名高级软件工程师,在 IBM SmartCloud Entry 团队工作。他拥有 Eclipse 插件和云计算 IaaS 开发方面的丰富经验,并对 Hadoop、OpenStack 和搜索引擎技术非常关注。



Ni Yong, 高级软件工程师, IBM

Ni Yong 是一名高级软件工程师,在 IBM 中国系统与技术实验室工作。拥有 5 年的应用程序集成中间件开发经验,目前在 IBM SmartCloud Entry 开发团队中工作。



2013 年 1 月 28 日

云计算允许将计算资源用于公共设施(像水和电),可以通过仪表跟踪使用情况并报告给服务提供商和消费者,从而对计算资源进行测量。此外,云计算可以跟踪每个订阅用户消耗了多少资源和公用设施,以便服务供应商向他们收取合理的费用。计量系统记录了资源利用率​​,比如 CPU、内存、数据存储的使用情况,以及云服务用户消耗的其他许多相关资源。

计量也是限流和计费的基础。计量跟踪、整理并计算每个订阅用户的资源使用情况,使用给定的时间单位生成准确的资源使用信息,因此,计量成为了 “按使用付费” 的计费模型的基础。从另一个方面看,企业私有云利用计量服务来显示每个用户的实际资源使用情况,确保计算环境的安全性和可用性。例如,通过使用计量私有云资源,鼓励订阅用户在使用完资源后将它们释放到资源池,从而提高私有云资源池的整体可用性。

目前,包括 Amazon Elastic Compute Cloud (Amazon EC2) 和 Microsoft® Windows® Azure™ 在内的大多数云服务提供商都有自己的计量系统。通常,计量组件的设计和实现的重点是:计量针对哪些数据和可使用哪些数据,如何收集利用率数据,从收集的数据可以推算出哪些计量值。

IBM Tivoli® Usage and Accounting Manager (TUAM) 使用数据收集器实现计量数据的收集,数据收集器从不同的数据源收集数据,如 IBM z/VM®、VMware 使用收集器,等等。数据被收集并转换成 Common Source Resource (CSR) 格式,然后传输到处理服务器,以便进行进一步处理。Tivoli Usage and Accounting Manager 的集成器和处理引擎将会处理收集到的数据。处理步骤可能会有所不同,这取决于所使用的收集器。可以根据给定的标识符汇总 CSR 格式的数据,并将该数据作为下一个处理步骤的输入,从而实现计费或其他财务和组织级别的服务。

IBM SmartCloud Entry 概述

IBM SmartCloud™ Entry (SCEntry) 是一个强大的云计算软件产品,它将虚拟化环境从云就绪带进真正的云。它利用底层的硬件和虚拟化管理系统(如 IBM Systems Director VMControl™ 和 VMware vCenter),提供易于使用的功能,轻松建立一个入门级的私有云。SmartCloud Entry 让用户在使用虚拟设备和工作负载可以注重最终用户的观点,而不是注重 IT 或系统管理员的观点。它支持基本的云操作,如配置和取消配置、起草和克隆部署配置、虚拟服务器的电源管理,以及调整现有服务器的大小。此外,它提供计量、计费和审批处理等特性,帮助 IT 经理监控和管理云环境,从而提高数据中心的效率和利用率。

作为关键组件之一,计量与 SmartCloud Entry 中的其他组件松散地耦合在一起,从底层的适配器收集虚拟服务器分配和其他使用信息,并生成计量记录,将它们存储在数据库中,使用给定的时间间隔将数据导出到文件系统中。图 1 提供了 SmartCloud Entry 的高级架构。

图 1. IBM SmartCloud Entry 架构
IBM SmartCloud Entry 架构

架构和组件

SmartCloud Entry 计量服务在 SmartCloud Entry 基础服务之上运行,该基础服务向所有其他内部组件提供基础的服务。SmartCloud Entry 计量服务的分层架构和组件将在下面的章节中进行介绍。

计量服务架构

计量服务的整体架构分为三层,如图 2 所示。

图 2. SmartCloud Entry 中的计量架构
本图显示了 SmartCloud Entry 中的计量架构

Data Collection Layer(数据收集层)包括 Event Listener(事件侦听器)和 Data Refresher(数据刷新器),它从各种计算资源收集计量数据。Data Transformation Layer(数据转换层)接收和处理 Data Collection Layer 所收集的计量数据,并将原始计量数据转换成内部格式,并使其继续保留在数据库中。Data Consumption Layer(数据消费层)提供计量数据导出和归档等功能,还提供了与最终用户的 RESTful 应用程序编程接口 (API) 的交互。

从数据流的角度来看,计量数据通过这三层从底部流到顶部。首先,Data Collection Layer 收集计量数据,并将其传输到数据转换层进行处理和获得持久性,然后,由数据消费层组件使用这些数据。Data Export Service(数据导出服务)​​将计量数据转换为 Usage Detail Record (UDR) 格式,并将其存储在本地文件系统的文件中。Data Archive Service(数据归档服务)清理已经过期的数据,防止数据库变得太大。RESTful API 组件提供 SmartCloud Entry 的用户界面的接口和第三方软件集成,以便初始化数据导出和归档请求。SmartCloud Entry 基础服务充当了整个数据流和处理的桥梁,其中,计量组件调用 SmartCloud Entry 基础服务来完成各种计量数据处理。

计量服务组件

计量架构包含位于不同层次的许多组件,并为不同的目的工作。这一节将介绍这些组件是如何配合工作的,以及它们的配置。

Data Collection Layer

Data Collection Layer 收集资源的使用数据,如 CPU、内存、存储和虚拟服务器状态。收集计量数据有两种不同的机制。Event Listener 使用 Metering Listen 机制来侦听 SmartCloud Entry 基础事件,这是 SmartCloud Entry 基础服务所产生的事件。Data Refresher 使用 Metering Refresh 机制定期检索计量数据。从本质上说,Metering Listen 是确保计量数据的完整采集的基本机制。同时,Metering Refresh 是一种补充机制,可以避免某些特殊情况下的信息丢失。Data Refresher 定期通过 SmartCloud Entry 基础服务刷新计量数据,并对计量数据与相应的现有记录进行比较。只要收集的计量数据发生修改(相比现有数据),它就会立即相应地更新计量记录,如图 3 所示。

图 3. 计量机制
计量机制

对于一个大规模的云环境,每个刷新周期都可能很费时。因此,我们不建议频繁地运行此数据进行刷新。SmartCloud Entry 提供了一个配置属性,可以在 metering.properties 文件中设置时间间隔:

com.ibm.cfs.metering.interval=180

Data Processing and Persistence Layer

该层位于 Data Collection Layer 和 Data Consumption Layer 的中间。其组件 Data Collection Layer 接受原始计量数据,然后将数据转换为内部格式,并将其保存到数据库。此外,Data Processing and Persistence Layer 提供了连接到更高层次的内部 API,以查询计量数据。

在生产云环境中,保存到数据库中的计量数据增长迅速。为了避免降低计量数据操作性能,我们在数据库和其他组件之间引入了一个缓存,以缓存最新的计量数据。当系统需要对现有的计量数据和新收集的数据进行比较,从而决定是否需要一个新的计量记录的时候,它会从缓存中获取最新的现有数据,不必从数据库中查询现有记录。为了避免此内存缓存意外丢失数据,我们将它作为一个文件保存到文件系统中。每当 SmartCloud Entry 从意外终止中恢复,计量组件就会从该文件恢复缓存。另一个重要的文件为恢复记录最新的关机时间。SmartCloud Entry 每分钟更新一次该文件,所以如果系统意外关闭,它仍然可以恢复关机时间,误差不到 1 分钟。

Data Consumption Layer

Data consumption Layer 包括 Data Export Service、Data Archive Service 和 RESTful API。Data Export Service 将 UDR 格式的计量数据从数据库导出为 UDR 文件。

每个 UDR 由三部分组成:Header(标头)、Identifier(标识符)和 Resource(资源)。Header 用于记录该记录的一般属性,如开始时间和结束时间。Identifier 记录可以标识此记录所描述的属性的计量资源,如工作负载 ID,指定目标虚拟服务器属于哪个工作负载。Resource 记录了该虚拟机 (VM) 使用的资源量。示例 UDR 数据如表 1 所示。

表 1. 示例 UDR 数据表
元素字段注释
Header453_1此记录的 ID
20111201开始日期
20111201结束日期
10:12:34开始时间
10:22:34结束时间
The blank移位代码
Identifier15在这部分中将有 15 个属性
Project_ID,151此 VM 的项目 ID
Workload_ID,302工作负载 id
Cloud_Type,VMControl1,VMControl, 2,VMware
......
Global_Object_Id,cloud://default/38864SCEntry 范围内的惟一 ID
Resource3在这部分中将有三个资源
Memory,1024.0内存使用是 1024
CPU,0.5CPU 使用 0.5
Storage,5120.0存储使用 5120

此 UDR 存储 10:12:34 和 10:22:34 之间的所有 VM 状态及其他属性。每当状态或属性发生变化,SmartCloud Entry 就会创建一个新的 UDR,以反映这种变化。因此,下一个记录的开始时间应该是 10:22:34;在 UDR 的帮助下,IT 管理员可以确定虚拟服务器在任何特定时间的状态和属性。不仅 SmartCloud Entry 可以使用 UDR 格式的计量数据,Tivoli Usage and Accounting Manager 计费系统也可以无缝地消费这些数据。

Data Export Service 以可配置的时间间隔将计量数据导出为 UDR 文件,我们可在 metering.properties 文件中设置该间隔,如下:

com.ibm.cfs.metering.data.interval=1

导出的 UDR 文件在每个文件夹中是按日期组织的,每个文件夹包括 1个月的 UDR 文件。为了确保 UDR 文件的数据完整性,Data Export Service ​将为每个 UDR 文件创建一个摘要文件,其中包含一个基于 UDR 文件的内容生成的 MD5 代码(参见图 4)。

图 4. UDR 文件
UDR 文件

Data Archive Service 负责对数据库中的数据进行归档并清理过期的计量数据,以避免数据库变得过于庞大。它根据每个计量记录的开始时间和结束时间来确定计量数据是否已过期,并采取相应的归档操作。用户可以使用以下属性配置计量数据在数据库中的过期时间:

com.ibm.cfs.metering.data.expired.days=370

请注意,计量数据导出的时间间隔应该小于计量数据在数据库中的过期时间长度。即使归档的组件从数据库中删除了过期的计量数据,在导出的 UDR 文计中仍然可以发现计量数据,因此它有助于确保系统中不会丢失计量数据。

RESTful API 为管理员和用户提供访问权限,以便初始化数据导出或数据查询请求,该请求会转发到相应的计量服务进行处理(参见图 5)。

图 5. 计量处理流
计量处理流

不同的数据处理流一般没有顺序关系,因为它们可以异步或同时进行:

  • 1、2 和 5。SmartCloud Entry 基础服务通知 Event Listener 在云中是否发生了资源消耗或虚拟服务器状态改变。Event Listener 会获得这些事件,并将计量数据传输到计量数据处理组件,该组件会调用持久性组件,实现数据的持久性。
  • 3、4 和 5。Data Refresher 在给定的时间间隔内被调用,以刷新计量数据,从而检测计量数据是否发生变化。SmartCloud Entry 基础服务从 Data Refresher 接收请求,并获取和返回云资源的使用情况信息。计量数据处理组通过调用计量数据持久性服务来保存此计量数据。
  • 6。Data Archive Service 在给定的时间间隔内启动归档作业,以便从数据库中清理历史计量数据。
  • 7 和 8。Data Export Service 在给定的时间间隔内启动导出作业,将计量数据从数据库导出为 UDR 文件。
  • 9、10 和 5。用户或第三方应用程序调用 RESTful API 查询计量数据。调用计量数据处理从计量数据持久性服务查询数据,然后将相关的计量数据作为响应返回给 API 消费者。

SmartCloud Entry 计量集成

SmartCloud Entry 计量系统为第三方应用程序集成提供了数据访问接口,其中的计量数据是通过 UDR 文件或 JavaScript Object Notation (JSON) 消息集成的。报告系统可以使用 UDR 文件创建一个计量数据报告;计费系统可使用这些文件生成资源使用情况的收费单。第三方应用程序可以通过 SmartCloud Entry 检索​​ UDR 文件,有两种检索方法:通过文件传输或通过 RESTful API。在第一种方法中,要将配置计量数据导出到目标目录,第三方应用程序可以访问目标目录并下载已导出的 UDR 文件。这种方法适用于可以访问 SmartCloud Entry 服务器上的文件系统的第三方应用程序。

检索 UDR 文件的另一种方法是使用 REST API:

  • GET /udrfiles。检索所有文件夹中的所有计量数据文件。
  • GET /udrfiles/{directoryName}。检索存储在给定目录中的所有 UDR 文件。
  • GET /udrfiles/{directoryName}/{fileName}。检索特定的 UDR 文件。

对于没有 SmartCloud Entry 服务器的文件系统访问权限的第三方应用程序而言,利用 RESTful API 是一个不错的选择。我们使用另一组 REST API 来检索 JSON 格式的计量数据:

  • GET /udrs。检索 JSON 格式的所有计量数据。
  • GET /udrs/{id}。检索 JSON 格式的特定计量数据。

JSON 格式在现代应用程序中已被广泛接受;因此,分析 JSON 对象比分析普通文件更方便。此外,我们可以提供支持复杂条件查询的请求参数。

以下典型场景演示了与第三方应用程序的这种简单集成。该场景与如何检索在 1 个特定月份中一个特定 VM 的计量数据有关。我们提供了三种解决方案:

  • 直接文件访问:
    1. 访问存储了该特定月份的 UDR 文件的目录。
    2. 在文件夹中读取具有 .csv 文件扩展名的 UDR 文件。
    3. 逐行分析每个 UDR 文件。

      每一行代表一个单独的计量记录。为所关心的虚拟服务器识别代表资源使用情况的 UDR 记录,并分析这些记录。

  • 使用 REST API 访问 UDR 文件:
    1. 通过 REST API GET /udrfiles/{directoryName}/{fileName} 命令下载文件,其中 {directoryName} 与前一解决方案中的相同,并且 {fileName} 包含 .csv 后缀。
    2. 使用和前一解决方案中的第 3 步相同的方式分析 UDR 文件。
  • 使用 REST API 获得 JSON 格式的计量数据:
    1. 调用 REST API GET /udrs?globalObjectId={globalObjectId}&startTime={startTime}&endTime={endTime},其中 {globalObjectId} 包含所关心的 VM 的 ID,{startTime}{endTime} 规定计量记录的时间间隔。
    2. 分析从第 1 步检索到的 JSON 对象,获得计量数据。

结束语

计量在云计算系统中扮演着重要的角色。计量使我们能够收集云计算资源和计算指标,并为上层的计费服务建立基础。IBM SmartCloud Entry 实现的系统具有分层的架构。两个互补的计量数据收集机制旨在确保提供准确的、实时的资源使用情况统计。计量数据的处理使用了一个通用的数据格式,第三方应用程序可以使用和集成这种格式。IBM SmartCloud Entry 还提供了导出和归档机制,以方便对大量历史计量数据进行清理和维护。提供了一组计量 RESTful API,以支持第三方服务集成 IBM SmartCloud Entry 计量服务。

参考资料

学习

获得产品和技术

  • 以最适合您的方式 评估 IBM 产品:下载产品试用版、在线试用产品、在云环境中使用 产品,或在 SOA Sandbox 中花几个小时学习如何高效地实现面向服务的架构。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing
ArticleID=856409
ArticleTitle=使用 IBM SmartCloud Entry 实现云资源使用情况的测量
publish-date=01282013