背景介绍
计算巢服务是阿里云开放给企业应用服务商与其客户的服务管理PaaS平台。服务商在计算巢创建服务(可理解为云资源、软件编排后的集合)并发布上线后,用户便可通过此服务创建服务实例(基于计算巢服务创建的服务实体)以获取具体服务内容,即商家创建服务,用户通过商家发布的服务创建服务实例。
计算巢服务售卖时依托云市场。云市场商品依据售卖模式不同,分为按周期付费和按量付费,本文场景为按量付费。按量付费的使用方式为:服务商预先在云市场定义好计量项及其单价,同时云市场会提供上报接口PushMeteringData,服务商通过掉用此接口推送计量项数据,结合预定义好的价格,便可在用户的账号中出账收费。
针对依赖硬件资源计费的软件(如底层服务器的规格越好、数量越多,则其费用越高),需要获取云资源数据以计量计费。然而软件获取云资源数据存在一定难度,且不同厂商需要针对上报逻辑定制化开发软件,存在一定开发成本。此外,全托管服务由于资源开在服务商账号,服务商收费需包含资源费用,这部分费用现有流程较难收取。计算巢希望能解决以上问题,简化服务商计量上报流程并实现0代码自动上报。
具体方案
基于前述背景,计算巢提出计量项映射上报的方案,适用于全托管和私有部署场景。
服务商可在计算巢配置映射上报,即账单中某一项的值,通过映射表达式转换为云市场计量项值,以完成上报。如全托管服务A是以虚拟CPU作为计量项,服务商在云市场定义了计量项VitrualCpu(如5元/核/小时),则可在计算巢配置账单InstanceType的Cpu(ECS的CPU数)作为映射计量项,这样当在服务商账号出账时(如2台ECS、2核/台、时长一天),计算巢会读取服务商账单的信息,映射到云市场的计量项中,因此用户最终出账为 5元/核/小时 * 2 台 * 2核/台 * 24 = 480元。也就完成了服务商账单-用户账单 的映射,服务商便可收到费用。具体映射如何计算可看文章最后一部分。
通过此方案,依赖硬件资源的服务商可通过账单进而获取到资源量,通过映射方式向用户收费。全托管服务则也可通过账单获取用户在服务商账号开的资源量,将此部分资源费用加在计量项费用中,并作为云市场计量项上报向用户收费。
操作流程
前提:服务商发布计算巢服务至云市场,并定义按量付费收费模式。
- 配置计量项
点击 前往编辑 ,进入云市场计量项编辑页面
服务商上报:服务商手动掉用API上报数据,具体可参考:计算巢按量付费服务云市场上报数据说明,本文章不再赘述此功能,选择此项的数据将出现在计量绑定Tab页;
计算巢上报:计算巢映射上报计量数据,选择此项的计量项将出现在映射上报Tab页中。
注:
- 服务商上报和计算巢上报仅可二选一,若选择计算巢上报,则此计量项服务商无法手动上报;
- 针对Unit计量项,可用于按Pod数计费(非容器部署无需选择),若选择计算巢上报 - 按Pod数上报,则计量项将出现在商品绑定中,绑定至某一模板/套餐后,计算巢将自动上报Pod数,上报间隔为每小时一次。
- 配置映射上报
依据映射范围,可选:服务、模板、套餐。注:若模板中无多模板或无多套餐,对应映射范围将不可选择。
选择 服务,自动展示 计量上报中选择为计算巢上报的所有计量项。
选择 模板/套餐,则可自由添加具体计量项,但计量项范围仍为计量上报中选择为计算巢上报的所有计量项。
设置完成后点击确定即可。
- 用户场景服务实例将自动完成上报。
注:
- 若选择计算巢上报且选择按Pod数上报,则计量项将出现在商品绑定中,在绑定至某一模板或套餐后,计算巢将自动上报Pod数,上报间隔为每小时一次。
- 其他计量上报的频率为一天上报一次,即每天中午12点上报前一天数据。在服务实例删除后的第一天将会上报前一天(即删除当日)的数据。
附:云市场计量项与账单Code映射关系
当前计算巢官方预定义了如下映射关系。若有特殊需求,欢迎联系计算巢官方增加映射关系。
映射关系中Usage和ServicePeriod等参数为调用分账账单API DescribeSplitItemBill的返回值。例如,映射关系中的InstanceConfig.CPU * Usage表示返回值InstanceConfig中CPU的数量乘以返回参数Usage中的值。
云市场计量项 |
单位 |
账单Code(BillingItemCode) |
单位 |
产品Code(ProductCode) |
映射关系表达式 |
NetworkOut |
Bit |
NetworkOut |
GB |
ecs |
Usage * 1073741824 |
VirtualCpu |
- |
InstanceType |
- |
ecs |
InstanceConfig.CPU * Usage |
VirtualCpu |
- |
cpu |
- |
eci |
Usage |
Period |
秒 |
InstanceType |
秒 |
ecs |
ServicePeriod |
PeriodMin |
分钟 |
InstanceType |
秒 |
ecs |
ServicePeriod / 60 |
Storage |
Byte |
SystemDisk |
GB |
ecs |
Usage * 1073741824 |
Storage |
Byte |
Disk |
GB |
yundisk |
Usage * 1073741824 |
Storage |
Byte |
Storage |
GB |
rds |
Usage * 1073741824 |
Memory |
GB |
mem |
MB |
eci |
Usage / 1024 |
如下为API DescribeSplitItemBill 截取的部分返回值,举例计算云市场计量项PeriodMin的上报结果。
根据映射关系可知,该计量项的映射关系表达式为ServicePeriod / 60,从返回示例中可获取该参数的值为:54000,映射后值为5400 / 60 = 900。在云市场最终的上报结果为:[{"InstanceId":"xxxx","StartTime":"1xxxxxxxx","EndTime":"1xxxxxxxx","Entities":[{"Key":"PeriodMin","Value":"900","meteringAssit":"cmapi0006xxxx-Period-1"}]}]
{ "Message":"Successful!", "Data":{ "BillingCycle":"2023-12", "Items":[ { "ProductName":"云服务器 ECS", "InstanceConfig":"I/O 优化实例:I/O 优化实例;操作系统位数:64位;实例规格族:企业级实例 g6;实例规格:2核 8GB;操作系统的类型:Linux;体检服务:是;地域:乌兰察布;可用区:可用区A;CPU:2核;系统盘种类:高效云盘;镜像平台:linux;公网带宽:10240Kbps;虚拟交换机:vsw-0jlueyydpuekou6m1s1nn;网络类型:专有网络;系统盘大小:200GB;实例系列:系列 V;操作系统:centos_7_9_x64_20G_alibase_20231109.vhd;内存:8GBMB;是否是按流量计费:按使用流量;操作系统许可费用:付费;挂载点:/dev/xvdaGB;管家服务:是(管家)", "ProductCode":"ecs", "ServicePeriodUnit":"秒", "ServicePeriod":"54000", "UsageUnit":"台", "BillingItemCode":"InstanceType", "CommodityCode":"ecs", "Usage":"15.000000" } ] }, "Code":"Success", "Success":true }