一种基于加权响应的组合API计次计费装置的制作方法

文档序号:32056034发布日期:2022-11-04 21:28阅读:58来源:国知局
一种基于加权响应的组合API计次计费装置的制作方法
一种基于加权响应的组合api计次计费装置
技术领域
1.本发明属于api调用技术领域,具体涉及一种基于加权响应的组合api计次计费装置。


背景技术:

2.api的主要目的是提供应用程序与开发人员以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。提供api所定义的功能的软件称作此api的实现。api是一种接口,故而是一种抽象。应用程序接口(application programming interface,简称:api),又称为应用编程接口,就是软件系统不同组成部分衔接的约定。
3.由于近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。
4.组合api是一种需要api调用者根据api提供方调用手册,将多个api组合在一起调用以完成一次业务调用的一组api组合。当前只能针对单一api计费或者多个api组合计费模糊、收费方式粗放、无法精细化运行。
5.加权响应计次计费算法是一种计费算法,其计费逻辑包含api权值、api接口响应状态和api调用次数三个计算因子。


技术实现要素:

6.本发明所要解决的技术问题是针对上述现有技术的不足,提供一种基于加权响应的组合api计次计费装置。
7.为实现上述技术目的,本发明采取的技术方案为:
8.一种基于加权响应的组合api计次计费装置,用于获取基于加权响应的组合api计次计费算法所需要的计费参数,包括:
9.接口追溯模块,用于基于全局唯一标识号traceid、消费者帐号标识userid和业务能力标识bizid追溯一次业务调用所涉及的多个api;
10.总前控制模块,用于从内存数据库或本总前控制模块内存中查询消费者帐号标识userid和和业务能力标识bizid对应的消费者付费类型,并进行相应的请求转发处理;
11.网关模块,用于转发消费者的业务接口调用;
12.消息队列模块,用于以异步方式收集api接口调用信息;
13.接口调用消息处理模块,用于从消息队列模块接收api接口调用消息,并按照统一业务要求对调用消息进行预处理;
14.接口调用信息存储模块,用于将预处理后的api接口调用消息按照调用数据存储要求存储至数据库中。
15.接口元数据存储模块,用于接口基础数据维护;
16.计算模块,用于执行基于加权响应的组合api计次计费算法进行基于加权响应的组合api计次计费。
17.为优化上述技术方案,采取的具体措施还包括:
18.上述的接口追溯模块在当消费者发起一次业务请求后,为本次请求生成一个全局唯一标识号traceid,并将生成的traceid添加到本次请求的所有api请求头中,该traceid将和请求中携带的消费者帐号标识userid、业务能力标识bizid确定本次调用的调用者、调用业务、调用接口组的唯一性。
19.上述的总前控制模块预存储消费者帐号标识userid、业务能力标识bizid和消费者付费类型的对应关系。
20.上述的总前控制模块中,如果消费者付费类型为后付费类型,则将后付费接口请求放行网关模块;如果消费者付费类型为预付费类型,则计算消费者的账户余额,余额不足时将消费者请求直接返回,消费者余额充足时,执行扣费并将请求转发至网关模块。
21.上述的网关模块等待本次api请求的响应,将请求响应状态、全局唯一标识号traceid、消费者帐号标识userid、业务能力标识bizid、请求接口apiid和apiid接口响应状态异步发送至消息队列模块。
22.上述的接口调用信息存储模块中存储一次业务全链路调用涉及的多个组合api的接口调用消息,维护一次业务调用的全局唯一标识号traceid、消费者帐号标识userid、业务能力标识bizid、api接口标识apiid、请求接口响应状态s的对应关系。
23.上述的接口调用信息存储模块中存储一次业务全链路调用traceid的调用起始时间、调用结束时间。
24.上述的接口元数据存储模块中维护消费者账号标识userid的业务能力标识bizid订阅数据;维护业务能力标识bizid的多个组合api接口标识apiid;维护组合api中每个api接口标识apiid的加权值k,该加权值k默认值为1。
25.上述的基于加权响应的组合api计次计费算法包括:
26.(1)消费者userid订阅后付费业务bizid一次traceid调用链路的计费算法,具体公式如下:
[0027][0028]
其中,是消费者userid订阅后付费业务bizid一次traceid调用链路的调用费用;
[0029]
1≤j≤m是业务bizid的m个组合api;
[0030]
k是bizid业务中api接口的加权值,从apiid和接口加权值配置关系获取;
[0031]
c是业务bizid中api接口的调用次数,所述调用次数c具体从接口调用信息存储模块以userid、bizid、traceid为查询条件获取;
[0032]
s是接口调用的响应结果,响应成功为1,响应失败为0;即,一次业务调用中只要有一个接口调用失败,本次业务调用失败,本次业务调用不计费。
[0033]
(2)计费周期内消费者userid对一个订阅业务bizid的t次调用计费算法,具体公式如下:
[0034][0035]
其中,是计费周期内消费者userid对一个订阅业务bizid的t次调用的调用费用;
[0036]
t表示计费周期内消费者userid对周期内一个bizid的t次traceid调用,1≤t≤n;
[0037]
计费周期由一个bizid的所有traceid的调用起始时间、调用结束时间确定,traceid的调用起始时间、调用结束时间从调用信息存储模块查询获取;
[0038]
(3)计费周期内消费者userid的计费算法,具体公式如下:
[0039][0040]
其中,f
user id
是消费者userid在计费周期内对周期内所有bizid的调用费用;
[0041]
b表示计费周期内消费者userid对周期内b次bizid调用,1≤b≤p。
[0042]
本发明具有以下有益效果:
[0043]
本发明可实现api调用中业务由多api组合而成的复杂api调用的计费,可用于复杂业务场景下对开放api进行精细化计费以支持开放api的精细化运营。
附图说明
[0044]
图1为本发明中计费装置实施原理图。
具体实施方式
[0045]
以下结合附图对本发明的实施例作进一步详细描述。
[0046]
本发明在多api组合的计费算法中,基于常规的计次计费算法,额外引入了api接口加权和api接口响应状态两个计算因子对费用进行精确计算。
[0047]
在组成一个业务的多个api中,各个api对算力的需求各不相同,有cpu密集型api接口,有高内存占用接口,有直接从缓存获取结果的接口;
[0048]
通过对各类异构任务api提供一个加权值,可以实现对资源消耗各异的计算任务的精确化计费描述。
[0049]
权重值高的api接口,资源消耗大,需要适当提高其费用;
[0050]
权重值低的api接口,资源消耗小,需要适当降低其费用;
[0051]
通过给api接口提供加权值,多api接口组合业务的计费就不是一个通过估算和运营经验的模糊值,而是准确体现了业务各个接口资源消耗的精确值。
[0052]
在组成一个业务的多个api中,各个api的响应结果共同组成一个多api组合业务的业务响应结果,这些api的响应结果具有业务不可分割性,当一个业务的多个api中只要有一个api的响应失败,整个业务的业务相应对api调用者来说已经没有意义。将组合api的响应结果引入组合api计费,存在响应失败api的业务不计费,去除对消费者的不合理收费、提升消费者体验,提高组合api业务的计费准确度。
[0053]
在多api组合的计费算法中,为了采集基于加权响应的计次计费算法参数,本发明提出了一套通过各类标识进行接口调用以及数据存储的数据采集流程,基于该采集流程,提供了一套数据采集装置。
[0054]
基于上述采集流程、采集装置和计费算法,本技术公开了一种组合api计费装置、方法和算法,如下分别从计费装置和计费算法两方面进行介绍。
[0055]
第一、二方面,本技术公开了一种基于加权响应的组合api计次计费流程及装置,如图1所示,所述流程及装置如下:
[0056]
接口追溯模块,用于追溯一次业务调用所涉及的多个api;
[0057]
当消费者发起一次业务请求(即api调用者发起接口调用)后,本模块将为本次请求生成一个全局唯一标识号traceid,并将生成的traceid添加到本次请求的所有api请求头中,该traceid将和请求中携带的消费者帐号标识userid、业务能力标识bizid确定本次调用的调用者、调用业务、调用接口组的唯一性。
[0058]
在一种可能的实施方式中,接口追溯模块以sidecar模式或中间件模式在api调用侧按照统一的生成规则生成调用全局唯一标识traceid。
[0059]
在一种可能的实施方式中,traceid生成包括消费者agent地址、id产生时间、消费者自增序列、消费者进程号,如df682c33165458759500010936,其中df682c33为消费者ip地址的十六进制表示形式,1654587595为请求时间时间戳,0001为消费者api请求自增序列,0936位消费者api请求应用的进程号。
[0060]
生成的traceid以自定义参数名traceid添加到本次业务请求的http header中。
[0061]
api调用者发起接口调用,需要将分配的消费者账号标识userid以自定义参数名userid添加到http header中。在一种可能的实施方式中,userid为一个自增的正整数,如100002。
[0062]
api调用者发起接口调用,需要将待调用的业务能力标识bizid以自定义参数名bizid添加到http header中。在一种可能的实施方式中,bizid为一个自增的正整数,如2001。
[0063]
总前控制模块,从内存数据库或本模块内存中查询所述消费者帐号标识userid对应的消费者付费类型;
[0064]
如果为后付费类型,总前控制模块将对uerid的bizid接口调用进行部分业务控制,总前控制模块在本装置中负责消费者付费类型控制,后付费接口请求会直接被总前控制模块放行。
[0065]
在一种可能的实施方式中,需要在总前控制模块处存储消费者帐号标识userid、业务能力标识bizid和消费者付费类型的对应关系。
[0066]
如果为预付费类型,需要计算消费者的账户余额,余额不足时消费者请求被总前模块直接返回,消费者余额充足时,总前模块执行扣费并将请求转发至网关模块。
[0067]
网关模块,负责转发消费者的业务接口调用,网关模块等待该次api请求的响应,将请求响应状态、全局唯一标识traceid、消费者帐号标识userid、业务能力标识bizid、请求接口apiid和apiid接口响应状态异步发送至消息队列模块。
[0068]
消息队列模块,负责以异步方式收集api接口调用信息,以应对在高并发接口调用下可能的并发压力。
[0069]
在一种可能的消息队列模块实施中,模块基于开源消息队列如kafka、rabbitmq等,提供消息可靠发送、消息可靠消费机制。
[0070]
接口调用消息处理模块,从消息队列模块接收api接口调用消息,并按照统一业务要求对调用消息进行预处理。
[0071]
在一种可能的接口调用消息处理模块实施中,模块能以可靠的方式从消息队列模块接收消息,并按照业务约定对消息进行预处理。
[0072]
为了能够及时处理消息,一种可能的实施方式是构建接口调用消息处理模块为分布式应用。
[0073]
接口调用信息存储模块,预处理后的api接口调用消息按照调用数据存储要求存储至数据库中。
[0074]
在一种可能的实施方式中,接口调用信息存储模块需要存储一次业务全链路调用涉及的多个组合api的接口调用消息,维护一次业务调用的全局唯一标识号traceid、消费者帐号标识userid、业务能力标识bizid、api接口标识apiid、请求接口响应状态s的对应关系。
[0075]
在一种可能的实施方式中,接口调用信息存储模块需要存储一次业务全链路调用traceid的调用起始时间、调用结束时间。
[0076]
以traceid、userid、bizid、apiid、调用开始时间、调用结束时间多个维度存储接口请求和响应结果信息。
[0077]
在一种可能的接口调用信息存储模块实施中,本模块需要考虑大数量的接口请求信息存储。
[0078]
接口元数据存储模块,接口基础数据维护。
[0079]
在一种可能的实施方式中,元数据模块需要维护消费者账号标识userid的业务能力标识bizid订阅。
[0080]
在一种可能的实施方式中,元数据模块需要维护业务能力标识bizid的多个组合api接口标识apiid。
[0081]
在一种可能的实施方式中,元数据模块需要维护组合api中每个api接口标识apiid的加权值k,默认值为1。
[0082]
在一种可能的接口元数据存储模块实施中,模块需要存储userid、bizid、apiid、接口权值间的关联关系。
[0083]
上述模块主要用于获取计算模块执行计费算法所需要的计费参数。
[0084]
计算模块,用于执行基于加权响应的组合api计次计费算法进行基于加权响应的组合api计次计费。
[0085]
第三方面,本技术公开了一种基于加权响应的组合api调用计次计费算法,所述算法,计算过程如下:
[0086]
(1)消费者userid订阅后付费业务bizid一次traceid调用链路的计费算法如下:
[0087][0088]
其中,
[0089]
是消费者userid对bizid的一次traceid调用费用
[0090]
1≤j≤m是业务bizid的m个组合api
[0091]
k是bizid业务中api接口的加权值,从apiid和接口加权值配置关系获取
[0092]
c是业务bizid中api接口的调用次数,所述调用次数c需要从接口调用信息存储模块以userid、bizid、traceid为查询条件获取;
[0093]
说明:对于入参响应完全一致接口重复调用,计费算法不去重,如有所述需求,消费者需自行缓存重复接口结果
[0094]
s是接口调用的响应结果,响应成功为1,响应失败为0;即,一次业务调用中只要有一个接口调用失败,本次业务调用失败,本次业务调用不计费
[0095]
(2)计费周期内userid对订阅业务bizid的t次调用计费算法如下:
[0096][0097]
其中,
[0098]
是消费者userid在计费周期内对一个bizid的t次traceid调用费用
[0099]
1≤t≤n是计费周期内消费者userid对周期内一个bizid的t次traceid调用
[0100]
计费周期内一个bizid的所有traceid调用根据计费周期开始时间、计费周期结束时间;traceid调用开始时间、traceid调用结束时间从调用信息存储模块查询获取。
[0101]
(3)计费周期内userid的计费算法如下:
[0102][0103]
其中,
[0104]fuser id
是消费者userid在计费周期内对周期内所有bizid的费用
[0105]
1≤b≤p是计费周期内消费者userid对周期内b次bizid调用
[0106]
计费周期内一个userid的所有bizid调用根据计费周期开始时间、计费周期结束时间、traceid调用起始时间、traceid调用结束时间从调用信息存储模块查询获取
[0107]
以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1