API实时QPS统计!PS:群内问答!

walkor,QPS你说不是用的数据库那如果统计以前的访问数据怎么办? 还有是不是内存开辟变量,每访问一次自增 ,每秒清0?
已邀请:

walkor

赞同来自: muyu Qmore泽 yunwalker

整个分布式统计系统包括
1、API进程,提供API业务服务,也就是业务接口,统计数据的生产者
2、API服务器的本地统计进程,统计本地服务器API调用数据,次数、耗时等
3、汇总服务器,接收各个API服务器统计进程的数据汇总,定时(1秒)发给浏览器渲染QPS曲线

流程:
1、API进程每收到一个请求就给本地统计进程发一个udp包,包含这次调用的接口名、耗时、错误日志等信息,统计进程将对应的请求接口请求次数+1。
2、每个统计进程定时(1秒)将统计进程内统计数据发送给汇总服务器,然后将QPS数据清零
3、汇总服务器也是类似的逻辑,收到各个统计进程的统计数据后汇总计算,定时(1秒)推送给浏览器,然后数据清零。
4、浏览器收到汇总服务器的推送数据,渲染各个接口QPS曲线图

性能瓶颈分析:
1、假设1000台API服务器定时(1秒)给汇总服务器发送QPS数据,那么汇总服务器QPS仅为1000请求每秒,仅仅是内存计算,完全没问题
2、每台API服务器上的统计进程仅仅统计本机API调用量,单进程处理udp请求可达几万PQS,所以统计进程本身不会有瓶颈
3、所以这种架构的QPS统计可以支持上千台甚至上万台API的实时QPS统计不会有任何性能瓶颈。

其它数据统计:
以上是QPS实时统计,实际还有统计进程还做了请求耗时、请求来源、失败日志等等的统计,这些统计数据经过加工缓存到内存中,数据每一分钟存储一次磁盘。

查看历史统计
当我们要看某个时间段的统计数据时,利用IO复用技术给所有API服务器的统计进程发送一个统计请求,每个API服务器将本地对应的磁盘数据读出(因为经过预处理数据量很小),经过简单的计算加工,发给汇总服务器,汇总服务器同样利用IO复用,并发批量接收每个服务器的统计数据,然后汇总展示。整个过程实际就是分布式计算,结果汇总展示。

验证
以上是QPS曲线图+统计服务的架构,这种架构已经在高并发系统验证过了,600-700台workerman服务器,每天几十亿的请求量,能够实时查看系统各个接口调用量曲线,各个维度查询接口调用情况,快速排查错误日志,非常稳定好用。

配几个图:

C9BD4EBA-E4BE-4C7D-BAB1-FBF49630B19C.png
QPS曲线,请求量最大的接口 11W/S


400256B2-5A0E-492C-AEEC-08EA3FE2C064.png

失败QPS,哪些接口上一秒报错量多少,错误日志调用栈一目了然

shibai.png
接口失败分布

shibai2.png
请求来源

workermen - 业余PHPER

赞同来自:

付费求开源

要回复问题请先登录注册