Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
岳巧源
/
my-awesome-project
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
a7893f6b
authored
Jun 25, 2024
by
岳巧源
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
api count design
parent
70c44012
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
87 additions
and
0 deletions
api_count.txt
api_count.txt
0 → 100644
View file @
a7893f6b
开放平台目前的统计机制,会在limit函数中处理接口限流,还有接口调用信息的统计。
接口每次调用都会被记录到redis当中,分别是按照天数和按照分钟。
另外,接口每天的调用情况,也会被写到mysql中持久化存储起来。
所以,考虑目前建设 开放平台接口信息统计看板,应该这样设计
对于当天的信息,我们直接从redis中获取就可以,但是对于当天之前的接口调用信息的统计,我们则直接从mysql中获取。
后期考虑不仅仅要把开放平台的接口信息统计进来,也可以加入其他平台的统计信息,用于运维和开发。
现在主要是现在获取开放平台的接口的调用情况,此平台目前考虑内部使用。
而且此平台以后还可以用来干其他的事情,比如dev-ops开发
接口设计:
1. 接口信息列表
有以下字段需要展示:
1) api名称。
2) 版本
3) URI
4) 请求方式(get, post, delete等)
5)当日请求次数
api列表的分页查询功能,page,limit两个参数需要传入,limit用于限制每页多少条,page表示第几页
page默认值为1, limit默认值为 10条
------------------------------------------------------------------
前端api列表设计
前端先请求 获取api的列表,
先请求 /api/list , 获取上面的信息
如果想查看接口的详情,可以点击list列表的右边的 "详情" 按钮,获取该接口更具体的调用次数
比如一分钟之内的调用次数,昨天,前天,几天前的调用次数等等。
详情接口稍后涉及,今天先把 /api/list设计完 重点可以放在前端这一块。
------------------------------------------------
mongodb这块儿先放一放,现在搞接口查询,查询接口的调用次数。
获取接口的
--------------------------------------------------------------
+----------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| apikey | char(40) | NO | | | |
| user_name | varchar(40) | YES | | | |
| biz_date | int(10) unsigned | NO | | NULL | |
| interface_name | varchar(20) | NO | | | |
| add_time | int(10) | NO | | NULL | |
| update_time | int(10) | NO | | NULL | |
| call_num | int(10) unsigned | NO | | 0 | |
+----------------+------------------+------+-----+---------+----------------+
---------------------------------------------------------------------
看一下openplatform统计接口数据的逻辑
首先不是所有的接口都会被统计,例如token接口就不会被统计。
redis逻辑:
首先拼接daycallKey:
API_INTERFACE_DAYCALLMAX_STATISTICS_KEY ("api_apiKey_interface_dayCallMax_key") + "_" + day_str + "_" + apiKey
例子:api_apiKey_interface_dayCallMax_key_2024-06-24_MQTVB8A9UARWEVWAI5Q7788V78MVPRFB
从redis拿上面的这个key对应的value值,拿到的值代表该apikey下当日的请求总数。
这个阈值目前设置的是 1万次每天。
minCallKey:
这个key维护的 每一个apiKey每分钟的调用次数。 阈值设置的是10次。
API_INTERFACE_MINCALLMAX_STATISTICS_KEY + "_" + apikey
这个key的有限期是1分钟。
----------------------------------------------------------
上面对天数校验和分钟校验完成之后,将统计数据按照接口名称统计。
key为
API_INTERFACE_DAYCALL_STATISTICS_KEY + "_" + day_str + "_" + apiKey
对应的value是哈希表 这个哈希表的其中的一个属性是 接口名, 接口名实际上是url去掉 “/” 拼出来的。
--------------------------------------------------
当日接口数据,从redis中取,不论是分钟级别的,还是天级别的。
往日的数据,则从mysql中取。
---------------------------------
先按照 group_id == 337来查所有的开放平台的项目
获取到结果中所有的 _id字段。 这个_id代表的是某个项目的id (例如品牌相关)。
db.project.find({group_id:337}).pretty().count()
拿到上面所有的 _id字段之后,再去interface里面查,上面得到的_id传给 project_id
db.interface.find({"project_id": 706}).pretty()
-----------------------------------------
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment