如何在OpenStack中启用计费功能?
我们都知道云计算是一种按需付费的服务模式,在OpenStack 中完成计费服务的组件是Cloudkitty,很高兴能在今天晚上与大家交流探讨OpenStack计费服务--Cloudkitty。
谈到计费就不得不先说说OpenStack的计量服务,虽然前期在计量服务上走了些“弯路”,但现在ceilometer、gnocchi、aodh、panko项目的稳步并进算是峰回路转。这其中Ceilometer负责采集计量数据并加工预处理;Gnocchi主要用来存储时序计量数据和提供资源索引;Panko主要提供事件存储服务;aodh主要提供预警和计量通知服务。Ceilometer一分为四,各司其职,因此计费服务的数据源就有了保障(说明:Cloudkitty并非仅能用于OpenStack计费,这取决于collector的具体实现)。
Gnocchi的一个核心功能是资源索引器,通过资源也可以快速知道此资源的基本信息和其所具有的metric(例如instance资源具有cpu_util, memory.usage等metric)。另一个功能是存储计量数据即所有metric的measures(<时间,值>)信息。而metric的measures信息在使用上面会涉及到大量的查询过滤和聚合操作,早期Ceilometer将measures数据存于SQL数据库中的一张表里,由此所带来的延迟在实际使用中是不能忍受的,但在Gnocchi中得到了解决,并且不会随着云环境中资源和时间的增加而产生新的性能瓶颈。
Gnocchi的数据归档策略解释了其中的原因:归档策略决定了points的数量,而每个point的存储空间为9字节,所以每个metric对应文件的存储空间是可预知的;Gnocchi在收到新的measures时,会动态根据预先定义的聚合方法进行聚合操作,并维护存储在文件中的points信息;在使用API获得某个metric的计量信息时,这些计量信息会直接从metric所对应的文件中读取得到points,故时间复杂度为O(1)不存在性能瓶颈。
由此可见,类似于Ceilometer计量数据存储的问题都可以采用gnocchi,那么计费服务产生的费用数据的存储也类似。
Cloudkitty Official包括cloudkitty, cloudkitty-dashboard, python-cloudkittyclient三个部分,Cloudkitty是核心功能组件,包含Tenant fetcher,Collector,Rating和Storage四大核心模块;cloudkitty-dashboard为管理员提供简洁的操作设定界面和为用户提供直观的视图界面;python-cloudkittyclient为管理员提供命令行交互接口。
当然,我们关注的核心是Cloudkitty,基本可以用上面的二十四行代码描述。整体上Cloudkitty计费引擎以定时(CONF.collect.period)task的形式执行计费任务;每一轮计费任务之初要知道需要为哪些租户进行计费get_tenants(),再依次对每个租户的每一项服务进行计费;首先会通过collector模块从计量数据源中获得计费数据data;其次将数据交给计费模型根据定价规则完成费用计算;最后使用storage模块将费用数据持久化存储保存。
下面将依次详细介绍Cloudkitty的四大核心模块。每个模块都使用了stevedore,即插件形式的多种实现,均具有良好的可配置性,拓展性和灵活性。
Tenant Fetcher模块是要告诉Cloudkitty此轮计费任务应该为谁计费。可以从cvs文件(FakeFetcher)和keystone(KeystoneFetcher)中知道需要对谁的资源/服务进行计费。其中广泛使用keystone,支持V2和V3版本。所以对于想要计费的租户需要执行命令’keystone user-role-add --user cloudkitty --role rating --tenant xxx’,将cloudkitty用户加入xxx租户并赋予rating角色。
Collector和Transformer模块是收集和格式化计费源数据。从collector的实现上来看,Cloudkitty不仅仅能为OpenStack计费,而且能为其它有计费需求的平台计费,仅需实现和配置相应的collector模块即可。常用的collector模块是CeilometerCollector和GnocchiCollector,分别使用Ceilometer和gnocchi的API获取计量数据,而在OpenStack环境中GnocchiCollector必将成为核心的收集器。
由Collector的retrieve方法获得计费所需要的计量数据形如item格式,再由Transformer将之格式化为data格式,最终交付给计费模块处理。
推荐阅读
-
如何在 Edge 浏览器中启用翻译功能
-
TMC5160 步进电机驱动器芯片开发和使用说明-1-1.工作原理 TMC5160 提供三种基本工作模式:模式 1 :全功能运动控制和驱动器 所有步进电机逻辑完全由 TMC5160 控制。模式 2 :脉冲和方向驱动器 外部高性能 S-ramp 运动控制器或 CPU(如 TMC 4361)生成脉冲和方向信号,这些信号与系统中的其他组件(如电机)同步。 TMC5160 控制电流和运动模式,并反馈电机状态。microPlyer 会自动平滑运动。模式 3 :简单步进和方向驱动器 TMC5160 根据步进和方向信号控制电机。无需 CPU; 配置由硬件引脚完成。固定保持电流控制由 TMC 5160 完成。可选反馈信号用作错误检测和同步标志的输出。 SPI_MODE 接地,SD_MOD 为高电平以启用该模式。 1.1 关键概念
-
如何在WPS中启用宏功能?
-
如何在WPS中打开并启用JavaScript功能?
-
如何在微信小程序中启用无缝扫码功能(使用uniapp开发)
-
如何在minikube中启用dashboard的外部访问功能
-
如何在PyTorch中启用autograd的anomaly detection功能:torch.autograd.set_detect_anomaly(True)指南
-
如何在 Gitlab 中启用 Pages 功能
-
如何在NCBI、UniProt和RCSB PDB中利用部分功能,如查看蛋白质的三维结构、氨基酸序列以及基因序列,并进行序列比对?
-
简易指南:如何在内置Tomcat中启用JMX功能