Java-Interview-Advanced/docs/distributed-system/system-qps.md

43 lines
2.5 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

很常问很多人回来跟我说老师我不知道我们系统每秒钟请求有多少每天请求量有多大我都没任何的概念因为系统开发好直接部署根本不管这些东西有没有什么比较好的工具可以看到服务的访问量qps
每个服务每天多少请求量高峰期每秒钟多少请求量你完全可以在代码里稍微加一些metrics的代码如果你看过很多的开源项目的话开源的分布式系统eureka、hadoop、spark、hbase、kafkametrics机制
任何一个开源系统都需要对自己运行过程中各种请求量、每秒的请求量、成功次数、失败次数在内存里直接做一些计数他会给你开放一些端口号比如http端口号你只要请求他这个端口号他就会把这些metrics统计返回给你
在你负责的核心服务里核心接口开发一个简单的metric统计机制AtomicLong原子性并发下数据统计准确不会错误每个接口被调用的时候一个是可以对每个接口每分钟都做一个Metric统计
对每个接口每天的请求使用一个AtomicLong做一个计数统计出来每天的请求次数
计算一下每个接口从请求到执行完毕需要耗费多长时间算一下每个接口平均的请求延时TP99TP95TP90TP50TP9999%的请求耗费的时间在100ms以内但是1%的请求可能耗费的时间在100ms以上
**TP99 = 100ms**
**TP95 = 50ms95%的请求耗费的时间多在50ms以内但是5%的请求耗费的时间在50ms以上**
平均响应延时
你可以计算出来这个接口平均响应延时,把每次调用的耗时跟历史总耗时加起来,除以当前的请求次数,不就是最新的接口响应平均延时
你完全可以通过log4jlogback日志组件把每分钟每个接口被访问的次数直接打印到日志文件里去除以60不就知道高峰期每秒钟系统被访问的次数了吗每天每个接口访问的总次数打印到日志里去
压测工具百度一下java压测工具开源的可以用的模拟出来同时有多少用户发起多少请求每秒发起1000请求能抗住吗每秒钟发起2000请求能抗住吗
假设你的系统每秒钟最多抗800请求如果你的压测工具每秒发起了1000个请求此时他会发现最多只有800个请求同时可以被处理剩余200个请求需要进行排队被阻塞住了告诉你你的这个系统每秒钟最多抗800个请求