导语丨本文将介绍我们是如何通过日志链路做整体分析压测,以应对比赛到来的峰值。
一、背景
为了应对大型比赛的峰值需求,我们针对 XP2P 日志系统做了一次临时的日志统计系统的部署,通过集群扩展同写入的方式,支持了近千万每分钟的日志流量。在总结了部署经验后,我们对日志系统进行了梳理,并通过容器化,对接入层进行了上云改造,对统计系统进行了迁移改造,并建设了备用统计系统。记录相关环节,谨供参考。
新架构如下:
二、容器化改造
旧接入reporter使用了cvm部署,每次有流量突发时,都需要对机器资源做评估,进行预先扩容,同时直播场景有明显的流量高峰(晚上)和低谷(凌晨),部署的机器容易空跑占用资源。在公司的容器平台(tke)稳定推广后,XP2P 这边也进行了接入改造。
镜像生成使用orangiCI,自动化生成,每个提交和合并请求,自动获取代码编译和打包。
工作负载,使用多地部署。
每一个负载对应创建一个service,这里使用了NodePort模式(后续了解到可以使用cmlb/l5,可以实现异地容灾)
每一个service,对应创建三网和cap接入的ingress。
支持http, https接入,https支持stgw自动接入,管理相关域名证书。
再通过gslb接入相关 vip,实现外网接入。
三、日志“全链路”压测
在部署了系统后,需要对链路的负载有一个清晰的认识,以应对峰值流量。针对日志链路,有消息队列,会起到解耦的作用,可以对消息队列kafka做好性能测试,分别测试上下游。
1.kafka 性能测试
先对kafka做性能测试,Kafka压测试工具如:
生产:
#少量
bin/kafka-producer-perf-test.sh --topic test_p2p --num-records 100 --record-size 100 --producer-props bootstrap.servers=XX:9092 --throughput 20000
#大量
bin/kafka-producer-perf-test.sh --topic test_p2p --num-records 100000 --record-size 100000 --producer-props bootstrap.servers=XX:9092 --throughput 20000
消费:
#少量
bin/kafka-consumer-perf-test.sh --topic test_p2p --new-consumer --fetch-size 100 --messages 100 --broker-list bootstrap.servers=XX:9092
#大量
bin/kafka-consumer-perf-test.sh --topic test_p2p --new-consumer --fetch-size 100000 --messages 10000 --broker-list bootstrap.servers=XX:9092
通过把测试脚本封装成镜像,自动部署到stke上,可以方便的对入流量进行控制。在测试中发现和kafka延迟不同,吞吐率相差很大:
上海的有70k/s~100K/s
广州1000K,1m44.458s, 9.6K/s
南京1000K,35, 29K/s
整体测试结果 :
写入单机0.9-3.8w/s,多机20w/s 消费性能(多机)1000w/min
2.kafka spark cdb性能测试
在接入spark后,提取线上数据,对统计链接进行测试,运行一整天。
晚高峰期写入,1100w/min~1200w/min
早低峰期写入,1300w/min, 1400km/min
运行稳定
3.reporter kafka spark cdb性能测试
加上reporter,使用测试数据,对数据进行写入测试。数据是json的加密格式,生成本地文件data.dat,使用ab测试如:
ab -c 10 -n 1000 -p datd.dat http://XX:6081/reporter/vlive
数据:
单机可以达到12k qps。
同时使用gprof工具对实例进行性能分析
# 调试heap
go tool pprof http://XX6085/debug/pprof/heap
# 调试goroutine
go tool pprof http://XX:6085/debug/pprof/goroutine
使用top, traces, list查看heap/goroutine占用:
火焰图:
收集信息,(30s)
go tool pprof http://XXX:6085/debug/pprof/profile
使用生成的数据,运行页面:
go tool pprof -http=:6000 ~/pprof/pprof.reporter-server.samples.cpu.002.pb.gz
查看:
127.0.0.1:6000
四、效果
通过上云和链路压测,了解日志系统链路性能指标,为应用比赛峰值做好准备,做到心中有数,一切尽在掌控。顺利支持 XP2P 流量再创新高。