OpenStack计费项目CloudKitty的强化及运用

CloudKitty计费服务
CloudKitty作为OpenStack的计费项目,旨在提供按需使用的计费服务。通过对接Ceilometer收集资源使用数据,CloudKitty进行计费处理,支持自定义计费策略。

本文转自Openstack中国社区Openstack计费项目CloudKitty的强化及运用

本文作者: “Li Xiangjun”

在OpenStack开发社区向“Big Tent”模式全面转型之际,一个新的项目—CloudKitty进入了人们的视野。该项目基于OpenStack对外提供Rating-as-a-Service的服务,旨在解决IaaS层计费方面的需求。

Why we need it

云计算的一个最大特征就是“按需使用,按量付费”,那么基于OpenStack的云平台如何来实现计费方面的需求呢?很遗憾,社区在很长一段时间内都没有给出一个切实可行的解决方案(有这方面的尝试,像BP:https://wiki.openstack.org/wiki/Ceilometer/blueprints/Add_Billing_in_Ceilometer就是计划在Ceilometer框架内添加计费的功能,但最后都没有了下文),很多公司都是各自为OpenStack开发自己的计费服务作为其产品化的一部分。随着OpenStack的不断发展,社区在计费方面的诉求也越来越强烈。为了填补OpenStack计费方面的空白同时也为了避免重复造轮子,CloudKitty应运而生。

How it works

一般意义上来讲,要最终实现对IaaS层的计费需要如下几个步骤:


Step 1. Metering: 收集资源的使用数据,其数据信息包括:使用对象(what),使用者(who),使用时间(when),使用量(how much)

Step 2. Rating: 将资源使用数据按照商务规则转化为可计费项目并计算费用

Step 3. Billing: 结账开票,也就是根据指定的时间段计算用户总的资源使用费用(由于各个公司对于billing都有自己独特的需求,所以该步骤一般都是用户自己实现的)

在OpenStack所有组件中,Ceilometer负责收集虚拟资源的详细使用数据,充当Metering的角色。CloudKitty做的事情就是从Ceilometer端获取计量数据,然后根据事先定义好的计费规则对这些使用数据进行Rating,为最终的billing提供数据支撑。如上图所示,CloudKitty在整个计费流程中充当的是Rating的角色。

CloudKitty的架构如下图所示:


主要包括四个部分:

  • Data collection (collector)
  • Rating processing
  • Storage
  • Report writer

分别说明如下:

  •  Collector:负责收集虚拟资源的原始使用信息并转化为CloudKitty能够识别的数据格式。Collector采用插件式设计,可以根据不同的计量组件或不同的meter数据获取方式装载不同的collecotr(理论上甚至可以为CloudStack开发一个collecotr让CloudKitty可以在CloudStack上工作),至于在运行时装载哪个collector可以在配置文件中进行配置。目前社区已实现ceilometer的collector。
  •  Rating processing:计费引擎, CloudKitty的核心组件,对外提供设定价格的API接口,对内负责计算所有虚拟资源使用记录的费用。它从collector获取原始的使用记录,然后根据事先设定好的价格及计价策略对这些记录进行费用的计算。同样该模块采用插件式设计,具有良好的可扩展性。现在社区实现了一个名为hashmap的rating module。我们可以根据自身的需求开发我们自己的rating module。还可以在同一时刻加载多个rating module,并且设置执行的先后顺序。最后该模块处理好的计费信息会传递给Storage和Report writer。
  •  Storage:负责把rating processing处理好的计费信息持久化存储到后端数据库。由于在设计的时候引入了ORM框架sqlalchemy所以支持多种类型的数据库,例如mysql、postgresql、sqlserver。另外查询计费信息和创建报表的API也封装在这个模块中。
  •  Report writer:最终的计费信息在存储到后端数据库的同时,还可以用文件的形式存储到磁盘上,方便与第三方系统交换数据。目前支持输出json格式的文件。

分析了CloudKitty的应用架构后,那我们对CloudKitty的内部数据处理流程就很好理解了。如下图所示,从分析计量组件产生的数据,到最终根据计价策略完成对资源使用数据的计费, 总共需要4步:


CloudKitty从Ceilomter获取资源的使用记录,根据admin用户预先设定的计费策略生成计费记录,然后end user就可以通过CLI或GUI查询到自己的计费信息。

Current status and Roadmap

相对于OpenStack的其它组件,CloudKitty算得上是一个比较年轻的项目了,去年8月才在社区注册。在今年6月份我们决定采用它做为公司内私有云的计费模块时它还是一个孵化项目,到今年十月底的时候就已经转变为OpenStack的正式项目了。之所以发展这么快我认为一个很大的原因就是上文提到的OpenStack计费方面的需求太强劲,社区太需要一个项目来填补metering和billing之间的空白了。CloudKitty加入Big Tent后,社区活跃度有了质的提升,根据社区统计数据,CloudKitty加入Big Tent两周后获得的contributions比加入前半年的总计还要多。CloudKitty近期(M cycle)主要的开发计划大致如下:

  • 添加Gnocchi支持

主要是性能/可伸缩性方面的考虑。当前的CloudKitty在架构上存在一个很大的性能方面的风险(其实问题根源在Ceilometer),由于CloudKitty需要调用Ceilometer的API获取虚拟资源的使用信息,但是大家都知道在数据规模比较大(数千台虚拟机)的情况下,Ceilometer在查询的时候会有很大的性能问题,这样就会导致CloudKitty的collector在收集数据的时候速度变慢,从而产生连锁反应使整个CloudKitty的处理速度慢下来。近期,Ceilometer社区为解决查询时的性能问题导入了一个名为Gnocchi的组件(Gnocchi是一个时间序列存储后端,它对存储和检索时间序列的数据有着天然的性能优势),专门向外提供Metric数据的查询服务。所以为了适配这个变化,CloudKitty正在开发一个工作在Gnocchi上的collector,希望利用Ceilometer的这个改进一劳永逸的解决获取计量数据时的性能瓶颈。

  •  增加名为pyscript的rating module

装载了这个rating module后,支持用户编写python代码来灵活定义自己的计费规则。以前要自定义计费策略你必须自己开发一个独立的rating module,在这个过程中你需要对CloudKitty的内部实现有一定程度的认识,但是有了pyscript计费模块后,你完全可以把CloudKitty当做一个黑盒,只要专注于用python来实现你自己的计费策略并上传到pyscript即可,这样就大大降低了CloudKitty的使用门槛。

  • 提升图形界面

CloudKitty在图形界面这一块还比较欠缺,社区最近主要是想提升统计报表的功能。



<think>首先,用户的问题是关于OpenStack计费系统的介绍、功能、使用方法等相关信息。我需要基于提供的引用信息来回答。 回顾引用: - 引用[1]:关于OpenStack架构的介绍,提到核心服务和交互。 - 引用[2]:专门讨论OpenStack计费服务CloudKitty,包括比喻解释和安装说明。 - 引用[3]:OpenStack的起源和历史。 - 引用[4]:OpenStack阶梯计价实战,涉及Hashmap模块创建命令。 最关键的是引用[2],因为它直接针对计费系统(CloudKitty)。其他引用提供背景信息。 用户要求介绍OpenStack计费系统的相关信息,包括: - 介绍 - 功能 - 使用方法 系统级指令要求: - 使用$...$格式表示行内数学表达式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 另外,用户提到:"上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。" 查看用户历史: - 用户上一次问题是关于OpenStack计费系统的介绍等。 - 在系统提示中,之前有示例回答,但没有直接的OpenStack上下文。所以,我应该基于当前引用回答。 回答结构: - 我需要结构清晰,逐步解决用户问题。 - 确保回答真实可靠,基于引用。 大纲回答: 1. **介绍OpenStack计费系统**:基于引用[2]和[^3],解释什么是CloudKitty,它的作用。 - 比喻:OpenStack如自助餐厅,CloudKitty如收银台[^2]。 - 历史背景:OpenStack起源于2010年[^3]。 2. **功能**: - 记录资源使用种类和数量。 - 根据计费规则计算费用(如阶梯计价)。 - 生成费用报告[^2]。 - 引用[4]提到阶梯计价和Hashmap模块。 3. **使用方法**: - 安装和配置控制器,如引用[2]提到的。 - 创建计费规则,如引用[4]中的命令:`openstack rating hashmap mapping create`。 - 可能涉及设置服务ID、组ID等。 添加引用标识: - 在相关句子末尾自然地添加[^数字]。 生成相关问题: - 结束时,基于内容生成相关问题,类似示例。 确保LaTeX:问题可能涉及数学表达式,比如计费规则中的计算。例如,阶梯计价可能有公式。 - 假设计费规则涉及数学,如$rate = f(usage)$。 - 在行内使用$...$。 - 如果需要独立公式,使用$$...$$。 例如,引用[4]提到阶梯计价: - 使用命令创建mapping。 - 可能涉及Threshold规则。 - 我可以解释阶梯计价模型。 功能描述中: - 计费规则:例如,对于用量$u$,费用$c = \sum rates based on thresholds$。 回答结构: - 先介绍。 - 然后功能。 - 最后使用方法。 - 结束时生成相关问题。 完整回答: - **介绍**:OpenStack计费系统主要由CloudKitty服务实现。CloudKitty是一个开源工具,用于监控云计算资源的使用并根据预定义的规则进行计费[^2]。它类似于自助餐厅的收银系统,跟踪用户选择的资源并计算费用。 - **功能**: - 资源监控:记录虚拟机、存储、网络等资源的使用数据。 - 计费规则:支持自定义规则,如阶梯计价(例如,当用量超过某个阈值$u_t$时,费率变化)[^4]。 - 报告生成:提供详细的费用报告,帮助用户理解资源消耗和成本。 - **使用方法**: - 安装:在OpenStack控制器上安装CloudKitty组件[^2]。 - 配置:设置服务参数,定义计费策略。 - 创建规则:使用命令行工具,例如创建Hashmap映射:`openstack rating hashmap mapping create -s <服务ID> -g <组ID> -t flat <单价>`[^4]。 - 生成相关问题。 添加数学表达式: - 在介绍阶梯计价时,使用$...$。例如:"阶梯计价意味着当资源用量超过某个阈值$t$时,费率$r$递增。" 如果需要更复杂,使用独立公式。 相关问题: - 基于内容,如: 1. 如何安装CloudKitty服务? 2. 如何自定义OpenStack计费规则? 3. OpenStack计费系统的优势和局限性是什么? 确保引用: - 在句子末尾添加[^2], [^4]等。 </think>### OpenStack计费系统介绍 OpenStack计费系统主要用于监控云计算资源的使用情况并生成详细的费用报告,帮助用户在云环境中实现成本控制和管理。核心服务是CloudKitty(开源计费工具),它通过预定义的规则计算资源费用,类似于自助餐厅的收银系统:OpenStack提供虚拟机、存储等资源“食物”,而CloudKitty负责记录用量并结算费用[^2]。OpenStack起源于2010年,由NASA和Rackspace等公司共同发起,旨在构建开放的云平台[^3]。CloudKitty作为其计费组件,支持灵活的计费模型,如阶梯计价(用量超过阈值$t$时,费率$r$递增),适用于企业级云部署。 #### 核心功能 CloudKitty提供以下关键功能: 1. **资源监控与记录**:自动跟踪用户使用的资源类型(如虚拟机、存储卷、网络带宽)和用量指标(例如CPU小时数或存储GB量),确保数据实时采集[^2]。 2. **计费规则定制**:用户可以定义多种计费策略: - **阶梯计价**:用量在区间$[u_1, u_2]$内时,费用$c = r_1 \times u$;当$u > u_2$,费用切换到$c = r_2 \times (u - u_2) + r_1 \times u_2$(其中$u$是资源用量,$r$是费率)[^4]。 - **Flat费率**:固定单价计算,如每GB存储$0.1$美元。 - **阈值规则**:设置用量上限$t$,超限时触发警告或费率调整[^4]。 3. **费用计算与报告**:基于规则自动生成费用账单,包括明细报告(如用户ID、资源类型、用量、费用等),支持导出为CSV或JSON格式,便于审计和成本分析[^2]。 4. **集成与可扩展**:兼容OpenStack核心服务(如Nova计算、Cinder存储),并通过API支持自定义插件(例如添加折扣规则或货币转换)[^1]。 #### 使用方法 CloudKitty的使用涉及安装、配置和规则定义步骤,需在OpenStack环境中操作(假设控制器节点已部署)。以下是基本流程: 1. **安装与配置**: - 在控制器节点上安装CloudKitty组件: ```bash sudo apt-get install cloudkitty-api cloudkitty-processor cloudkitty-dashboard # 基于Ubuntu系统[^2] ``` - 配置数据库和消息队列(如MySQL和RabbitMQ),编辑`/etc/cloudkitty/cloudkitty.conf`文件设置服务参数[^2]。 2. **创建计费规则**: - 使用OpenStack命令行工具定义计费映射: ```bash # 创建Flat费率规则(示例:存储服务,组ID为默认,单价$0.05/GB) openstack rating hashmap mapping create -s cinder -g default -t flat 0.05[^4] # 创建阶梯计价规则(示例:计算服务,阈值$t=100$小时) openstack rating hashmap threshold create -s nova -t 100 # 设置阈值 openstack rating hashmap mapping create -s nova -g default -t flat 0.1 # 基础费率 openstack rating hashmap mapping create -s nova -g default -t flat 0.15 --threshold-id <threshold_id> # 超阈值更高费率[^4] ``` - 规则创建后,CloudKitty会自动应用并监控资源。 3. **查询与报告**: - 查看费用报告: ```bash openstack rating summary show --project-id <project_id> # 显示指定项目的汇总费用 ``` - 通过Horizon仪表盘(OpenStack Web界面)可视化管理规则和下载报告[^2]。 **注意事项**:确保OpenStack核心服务(如Keystone认证)正常运行;计费数据采集依赖于Ceilometer(监控服务),需预先启用[^1]。实际部署时,建议测试规则以避免计费错误。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值