通用信息模型 CIM 开发介绍
简介: 通用信息模型 CIM 相关的开发技术,正在被越来越多的开发者所应用来搭建基于标准的信息世界模型。本文中,作者首先介绍相关的概念和技术背景,之后通过一个完整的案例,讲解从模型设计到最后的实现和测试过程,希望能让读者快速地掌握最基本的 CIM 开发流程。
通用信息模型 (CIM) 提供了一种对被管理信息的通用定义,包括系统、网络、应用和服务,并且能供被扩展。 CIM 使得信息管理者可以在网络中以一种通用的标准交互,而 CIM Profile 定义了某一个特定领域的 CIM 模型和联系。当前,CIM 已经被世界上很多公司所采纳,作为他们构建上层信息管理软件的基础模型,比如 IBM, HP 和 EMC 等。随着趋势的发展,对这种技术进行一次全面和基础的介绍,将对刚进入这个领域的开发者具有非常重要的意义。本文的目标读者包括希望进入 CIM 开发领域的工程人员和对 CIM 技术有着浓厚兴趣的开发者。
CIM ( 通用信息模型 ) 是由 DMTF 制定的用于管理计算机系统和网络的工业规范,它提供了一个共同的概念框架,将所有系统进行分类,并确定了部分网络环境,而且描绘了这些部分的互动。 CIM 的概念适用于所有领域的管理,而且所有的领域可以独立的进行技术实施,由公共信息模型开发出的管理软件可以统一异构环境下的产品管理。 CIM 由以下几部分组成 :
- CIM 规范- 定义了整合管理模型的语言和方法论。
- CIM 标准模型- 定义了对计算机系统,应用程序,网络和设备描述信息模型。 CIM 标准模型由以下及部分组成:
- 核心模型 - 提供了基本的受管对象的假设信息,内容包括一系列描述和分析受管系统的类和他们之间的关联信息。
- 公共模型 - 实现了管理领域的公共概念。这些概念独立于各个特殊的技术和实现。可以说这个模型提供了一个管理软件发展的基础。
- 拓展模型 - 他们是在公共基础上拓展一些与平台相关的模型,比如操作系统的模型等。一些大公司如 IBM 公司都有根据自己的产品所拓展出一系列的为自己产品服务的模型。
DMTF ( 分布式管理任务组织 ) 是工业界计算机和电信行业的企业间合作组织。它领导着个人电脑,企业级服务器和网络管理标准的制定和发展,并致力于建立整合跨平台和协议的计算机和网络管理方法,以求能使得不同产品的整合管理成本消耗达到最小,CIM 就是由 DMTF 制定发布的。
WBEM ( 基于 Web 的企业管理 ) 是一系列网络管理规范 . 它标准化了企业网络中受管资源的描述和使用。遵循 WBEM 所开发的网络管理工具都可以实现低成本的管理。有关 WBEM 的更多信息,请读者参考资料。
CIM 以受管对象格式 (MOF) 来描述对受管资源建立的模型。它与 IDL 语言(对象管理组的接口定义语言)很相似,是用文本的格式描述面向对象的类和实例的定义。 MOF 规范的主要内容有元素类,属性,方法等的描述,还包括注释,编译暗示,和一些 CIM 规范的特别语义。
CIM profile 是 DMTF 组织或其它相关组织织定的,定义了在特定环境下的 CIM 模型的实现。它内容包括 CIM 类,关联信息,方法和属性。它为 CIM 模型在具体化条件下的应用提供了统一和便利。每一个 profile 都清晰的指出每一个类,属性,方法在具体条件的应用下都应该被实例化。
CIM Server 是 CIM 技术中一个核心组件,用来管理和操作信息模型对象,现在已经有很多不同版本的 CIM Server:
- SMALL-FOOTPRINT CIM BROKER (SFCB) - SFCB 是一个轻量级 CIM 后台程序 (CIMOM) 用来处理 CIM 客户端的请求,随后根据请求内容进行系统管理的操作。 SFCB 支持标准的 http/https 和 CIM-XML http 编码之上的操作。它实现高度模块化,可以很容易补充,删除或自定义不同的管理应用软件。 SFCB 由于它的轻量级大小,十分适用于嵌入式环境。
- Open Pegasus - Pegasus 是一个 DMTF CIM 和 WBEM 标准的开源项目。它由 C++ 编写,所以可以很方便的将面向对象的 CIM 管理对象转变成程序模块。因此他被各个操作系统平台所支持,包括 UNIX, Linux, OpenVMS, and Microsoft Windows 。
- OpenWBEM - OpenWBEM 是一个企业级 wbem 实现的开源项目。它由 C++ 编写,可用于任何商业和非商业的用途。它提供了一个基础管理的开发框架,克服跨平台的障碍,并赋予真正的互操作性。开发人员可以使用 openwbem,以提供配置和变更管理,系统健康监测,和企业范围的管理功能。
- WBEM Services - WBEM Services 项目是用 Java 编写的,适用于任何商业和非商业用途的,基于 wbem 的实现。它的内容包括应用编程接口,服务器端和客户端的应用程序和工具。
图 1. 通用信息模型技术框架图

如上图所示,DMTF组织的底层技术基础是通用信息模型 (CIM)。 CIM 模型定义了一套规范并提供了如何与其他管理模型进行整合的细节。上一层是 CIM 规范,它为受管元素提供了更多丰富的语义和面向对象的描述。该 CIM 的规范有利于管理元素精简,整合和成本的降低,使得管理信息的交换处于一个独立平台和技术中立的方式。再上层便是基于 Web 的企业管理 (WBEM),它提供了一系列网络管理标准来实现分布式系统的统一管理 , 不仅如此 , 它还提供一套基于标准的管理工具,促进不同平台下数据的交流。这两层技术总揽提供了特定管理环境下,一种统一的标准的方式来描述和管理受管资源,以达到分布式管理的简化。最上层是 DMTF 或基于 DMTF 技术的其他组织的一些具体项目。它们提供了提供了垂直方向的具体应用和功能 , 包括比如公共诊断模型 (CDM), 桌面与移动系统硬件架构 (DASH) ,服务器硬件系统管理结构 (SMASH), 和存储网络工业协会 (SNIA's) 发布的存储管理规范 (SMI-S). 这些标准和技术提供了一个潜在的方案 , 它可以解决当今复杂的异构的管理环境,更多信息请读者参阅资料中的相关链接。
基于前面章节的 CIM 技术介绍和基本概念,我们将通过一个完整的 CIM Profile 开发案例,把最基本的 CIM 开发过程介绍给大家。简要说来,开发 CIM 主要是指运用 CIM 技术,开发出符合通用管理接口的,同时满足自己需求的信息模型,主要包括下面四个步骤:理解 CIM profile,扩展 CIM profile,实现 CIM provider 和最后的测试与验证过程。
清单 1. 需求案例
IBM 计算机系统中安装了一个新的软件 -IBM Lotus Notes,我们如何对它进行对象模型化,并开发符合 CIM 标准的管理程序, 使得 CIM 客户端程序可以访问到这个 Lotus Notes 对象? |
思考上面的需求,第一步就是如何建模。首先,我们还要回顾一下前面介绍的一个概念:CIM Profile,CIM Profile 里面定义了某一个特定领域对象的 CIM 模型,到目前为止,已经发布的 CIM Profile 基本上已经涵盖了在工业生产生活中所常见的对象模型。我们列举出一小部分已经发布的 CIM Profile,如下所示:
表 1. 已经发布的一些 CIM Profile 举例
编号 | 名称 | 介绍 |
---|---|---|
DSP1027 | Power State Management Profile | 计算机电源状态管理模型 |
DSP1028 | Alarm Device Profile | 警报设备模型 |
DSP1029 | OS Status Profile | 操作系统状态模型 |
DSP1030 | Battery Profile | 电源模型 |
由于 CIM Profile 太多,我们在此就不一一列举,有兴趣的读者可以到从本文后面的参考资料中查找相关资源。
那么 CIM Profile 和我们的建模有什么关系呢?简言之,就是我们的 CIM 开发,就是要扩展这些标准的 CIM Profile,创建符合 CIM 标准的具体模型,这样的好处有几点:
- 已经存在的 CIM Profile 已经为我们搭建起了一个标准的现实世界模型框架,我们可以通过类继承实现模型重用。
- 标准的 CIM Profile 具有通用性,接口标准和统一化,这样便于将来的跨系统跨平台操作。
针对案例需求,我们选择了 "DSP1023 Software Inventory Profile" 。 DSP1023 描述了可以安装在系统中的软件对象模型,比如 BIOS,固件,应用程序以及软件和管理设备的关系等。对于这份文档中的更多信息,在此就不详细说明了,我们需要重点关注的是如何模型化 Lotus Notes 这样一个应用软件。在 DSP1023 中,有这样一个用例图可以作为参考,如下图所示:
图 2. Software Inventory Profile 用例类图

注:上图中类名都省略了前缀 "CIM_"
在上图中,CIM_ComputerSystem 代表了计算机系统,CIM_SoftwareIdentity 代表了安装在系统中的软件,这两者是通过 CIM_InstalledSoftwareIdentity 关联起来的。 IBM Lotus Notes 就是一种 CIM_SoftwareIdentity,因此我们可以利用这个框架来扩展。
在 CIM 中,对于类和对象,是由MOF来描述定义的,MOF 通过文本形式,规范了类,对象,属性,方法等。我们以 CIM_SoftwareIdentity 为例来看一下它如何定义的:
清单 2. CIM_SoftwareIdentity 的 MOF 文件
// Copyright (c) 2005 DMTF. All rights reserved. //================================================================ // CIM_ |