OpenStack计费服务Cloudkitty分析 计费核心(二)

2023-05-16



计费模型是实现计费的核心,一般能允许用户根据实际需求设定计费规则并且根据收集到资源数据进行准确的费用计算。Cloudkitty实现了多种计费模型noop,hashmap和pyscripts,允许同时启动多个计费模型,并根据设置的优先级完成执行费用计算。Cloudkitty中的pyscripts计费模型使用门槛较高,hashmap计费模型成为了使用价值最高,易用性最强的计费模型,接下来将详细讲解。

上面那张图展示了hashmap计费模型的例子,可以将其看作简单的树形结构。其模型的核心是它的几个概念:Group,Service,Field,Mapping和Threshold,上面PPT中给了详细的例子做参考。



费用总和可由上面的公式验证。

计费模型计算出来的费用数据将由storage模块持久化存储下来,所需记录的核心字段包括begin,end,unit,qty,res_type,desc和tenant_id等,包含了时间信息,资源相关信息,属主信息。每个租户的各项服务费用数据会先缓存下来,最后再将当前租户的当前周期内所产生的费用数据一次性提交到存储后端。

Cloudkitty当前实现的SQLAlchemyStorage和GnocchiHybridStorage实际上都是基于SQL方式存储费用数据。随着云环境中需要计费的项目增多和时间的推移,在使用方面必将会存在于Ceilometer存储measure数据类似的性能瓶颈问题,故使用原生GnocchiStorage来归档费用数据:https://review.openstack.org/#/c/319425/

Collector所能收集的数据决定了Cloudkitty所能计费的资源/服务,包括compute,image,volume,network.bw.in,network.bw.out和network.floating。再细分,则计费源主要有两类,一类是静态资源,比如虚拟机实例,镜像,云硬盘,浮动IP,需根据其生命周期按使用时间长短计费;另一类是动态资源,比如网络流量,则需要统计计量情况进行计算费用。这就意味着完善的计费数据源应该包括event和measurement两类,而目前Cloudkitty并不支持event分析,这也是Cloudkitty不能达到秒级计费精度的根本原因。

由于Blueprint(https://blueprints.launchpad.net/cloudkitty/+spec/rating-for-second-level)基于事件分析的秒级计费实现(https://review.openstack.org/#/c/382127/)还未合并到社区,在此做下详细介绍和举例说明。Event模块预计实现三种插件ceilometer(默认) , noop(仅测试用)和  panko(等pankoclient完善后再具体实现)。

为了保证数据的一致性和不改变原有计费模型的代码,event模块在事件分析的过程中把从collector模块获得的数据进行分片,各个数据分片以时间为轴,保证了时间的连续性和事件的连贯性,过程中仅维护cur_period[\\\'begin\\\']和cur_period[\\\'begin_event\\\']字段即可。

new_item[\\\'vol\\\'][\\\'qty\\\']的值:create事件之前和delete事件之后均置为零,其余片段则按时间占比计算。rate = (generated - cur_period[\\\'begin\\\']) / self._collect_period;new_item[\\\'vol\\\'][\\\'qty\\\'] = item[\\\'vol\\\'][\\\'qty\\\'] * rate。

如果data一旦被分片则slice_flag标识为真,最后需要做分片后处理,否则返回空[]。

以上是裁剪的代码!另外对item分片的过程中,对于instance和volume需要额外维护desc中的一些字段并配合准确计算qty和适配field,例如volume需要维护size字段,instance需要flavor,vcpus和memory字段等,这些字段的值可以从事件的traits中取得。

上面是一个关于云主机是否使用“基于事件分析的秒级计费”模块,对比计费的例子。instance生命周期内相关的事件有create,resize,resize.revert和delete,跨越了两个计费周期00:00:00至01:00:00和01:00:00至02:00:00,注意cloudkitty.period.cutting事件的位置。

上面两张图来自http://stackalytics.com/统计的关于Cloudkitty在N版本的社区贡献情况。可见并不乐观,因此希望借助本次分享能吸引更多的开发者focus到计费项目中。

这里给出了一些实用的blueprints和参与Cloudkitty社区的一些tips。


本文转载自:http://www.zerotc.com/newsdetail/161.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenStack计费服务Cloudkitty分析 计费核心(二) 的相关文章

随机推荐

  • 数据结构实验之链表五:单链表的拆分

    数据结构实验之链表五 xff1a 单链表的拆分 Problem Description 输入N个整数顺序建立一个单链表 xff0c 将该单链表拆分成两个子链表 xff0c 第一个子链表存放了所有的偶数 xff0c 第二个子链表存放了所有的奇
  • 数据结构——二叉树的基本操作(不包括还原)

    小编没有写主函数 xff0c 你们需要用什么函数只需要自己写一个主函数调用一下就可以了 include lt stdio h gt include lt string h gt include lt stdlib h gt typedef
  • 数据结构实验之图论四:迷宫探索

    数据结构实验之图论四 xff1a 迷宫探索 Time Limit 1000 ms Memory Limit 65536 KiB Problem Description 有一个地下迷宫 xff0c 它的通道都是直的 xff0c 而通道所有交叉
  • 数据结构实验之图论七:驴友计划

    数据结构实验之图论七 xff1a 驴友计划 Time Limit 1000MS Memory Limit 65536KB Problem Description 做为一个资深驴友 xff0c 小新有一张珍藏的自驾游线路图 xff0c 图上详
  • 数据结构实验之排序一:一趟快排

    H 数据结构实验之排序一 xff1a 一趟快排 Problem Description 给定N个长整型范围内的整数 xff0c 要求输出以给定数据中第一个数为枢轴进行一趟快速排序之后的结果 Input 连续输入多组数据 xff0c 每组输入
  • 数据结构实验之排序二:交换排序

    include lt stdio h gt int s x void qsort int a int l int h int i 61 l j 61 h k 61 a l while i gt 61 j return while i lt
  • vs当前不会命中断点,还未为文档加载符号

    一般网上的解决办法是 xff1a A 工具 选项 调试 常规中的 要求源文件和原始版本完全匹配 的勾去掉 B 工具 选项 调试 常规中的 启用仅我的代码 的勾去掉 这种是治标不治本 xff0c 有的时候也不起作用 当前不会命中断点 xff0
  • 数据结构实验之排序三:bucket sort

    数据结构实验之排序三 xff1a bucket sort 作为桶排序的典型例题 xff0c 我们完全可以按照桶排序的思想来做这个题 但是本题完全不需要用太多的空间去换时间 xff0c 只需要一个空间为101的一维数组就好 Problem D
  • 数据结构实训——停车场系统

    这个程序是利用栈和循环队列实现的 xff0c 自己得先处理好逻辑关系就好了 由于题目没有要求 xff0c 这个程序就没加重复判断 xff0c 比如一辆车已经停在车位上或者便道上 xff0c 再来一辆就判断不了了 关于栈 xff0c 就是先进
  • 关于在linux下监测内存泄漏的问题

    小伙伴们 xff0c 会不会时常注意自己的程序会不会有内存泄漏的问题 xff1f 分享一个工具 1 安装valgrind 1 xff09 将安装包valgrind 3 8 1 9 el6 i686 rpm拷贝到虚拟中 2 xff09 yum
  • 计算机组成原理第二章测试题

    1 在定点机中执行算术运算时会产生溢出 xff0c 其原因是 C A 运算过程中最高位产生了进位或借位 B 参与运算的操作数超出了机器的表示范围 C 运算结果的操作数超出了机器的表示范围 D 寄存器的位数太少 2 某机器字长32位 xff0
  • MySQL操作语言汇总

    创建表数据 create table 表名 字段名 数据类型 约束条件 xff0c xff1b xff08 其中约束条件可选 xff09 注意 xff1a 1 必须给定表名 xff0c 且不能使用SQL语言中的关键字 2 必须给字段命名 x
  • 数据库第三次实验

    lt 实验要求 gt 每次实验前学生必须根据实验内容认真准备 在指导教师的帮助下能够完成实验内容 实验结束后总结实验内容 书写实验报告 遵守实验室规章制度 不缺席 实验学时内必须做数据库的有关内容 xff0c 不允许上网聊天或玩游戏 lt
  • 数据库第二次实验

    lt 实验要求 gt 每次实验前学生必须根据实验内容认真准备 在指导教师的帮助下能够完成实验内容 实验结束后总结实验内容 书写实验报告 遵守实验室规章制度 不缺席 实验学时内必须做数据库的有关内容 xff0c 不允许上网聊天或玩游戏 lt
  • 数据库第一次实验

    实验题目 xff1a 认识 DBMS xff08 Oracle xff09 xff0c SQL 数据定义功能实验目的 xff1a 理解数据库模式的概念 xff0c 通过使用 Oracle 的客户端 Oracle OraClient10g h
  • orcl的Windows下的配置

    理解数据库模式的概念 xff0c 通过使用 Oracle 的客户端 Oracle OraClient10g home1 Enterprise Manager Console 建立基本表 xff0c 实现模式对象与用户名之间的关联 熟悉 En
  • 数据库在线测试

  • WSL修改默认安装目录到其他盘eg d:

    1 查看WSL分发版本 在Windows PowerShell中输入如下命令 wsl l all v NAME STATE VERSION Ubuntu 18 04 Running 2 docker desktop Running 2 do
  • iOS 简单的贝塞尔(UIBezierPath)曲线使用

    在iOS中绘制矢量图或者路径的时候通常会用到 UIBezierPath xff0c 它在 UIKit 中 xff0c 是CoreGraphics对path的封装 使用 UIBezierPath xff0c 可以绘制直线 椭圆 多边形和贝塞尔
  • OpenStack计费服务Cloudkitty分析 计费核心(二)

    计费模型是实现计费的核心 xff0c 一般能允许用户根据实际需求设定计费规则并且根据收集到资源数据进行准确的费用计算 Cloudkitty实现了多种计费模型noop xff0c hashmap和pyscripts xff0c 允许同时启动多