初级
计算P50/P95/P99延迟分位数
未完成
初级参考
完整示例代码供参考,建议自己理解后重新输入
def solve():
from pyodide.http import open_url
from io import StringIO
request_logs_csv = open_url("https://data.zuihe.com/dbd/ms-shop/state_06/request_logs.csv").read()
metrics_csv = open_url("https://data.zuihe.com/dbd/ms-shop/state_06/metrics.csv").read()
import pandas as pd
from io import StringIO
logs = pd.read_csv(StringIO(request_logs_csv))
metrics = pd.read_csv(StringIO(metrics_csv))
def calc_percentiles(data, col='latency_ms'):
vals = data[col].dropna().sort_values()
n = len(vals)
if n == 0: return 0,0,0
def pct(p): return float(vals.iloc[int(n*p/100)])
return pct(50), pct(95), pct(99)
for path in logs['path'].unique():
grp = logs[logs['path']==path]
p50, p95, p99 = calc_percentiles(grp)
print(f"{path}: P50={p50:.0f}ms, P95={p95:.0f}ms, P99={p99:.0f}ms (n={len(grp)})")
print("预计算指标表:")
print(metrics[['service','path','total_requests','error_count','p50_ms','p95_ms','p99_ms']].to_string(index=False))
示例
输入
solve()
期望输出
/api/v1/orders: P50=161ms, P95=355ms, P99=355ms (n=16)
/api/v1/payments: P50=212ms, P95=423ms, P99=423ms (n=9)
/api/v1/products: P50=284ms, P95=457ms, P99=457ms (n=7)
/api/v1/search: P50=152ms, P95=438ms, P99=438ms (n=7)
/api/v1/users: P50=207ms, P95=473ms, P99=473ms (n=11)
预计算指标表:
service path total_requests error_count p50_ms p95_ms p99_ms
user-service /api/v1/users 100 8 231 486 496
product-service /api/v1/products 100 6 245 476 491
order-service /api/v1/orders 100 8 241 455 488
payment-service /api/v1/payments 100 6 264 472 498
👑
升级 VIP
解锁全部题目,畅通无阻地学习
- ✓ 解锁全部训练包所有题目
- ✓ 查看完整参考代码和提示
- ✓ 浏览器内直接运行 Python 代码
- ✓ 自动批改 + 进度追踪
30天
¥18
1年
¥99
2年
¥158
3年
¥199