最佳实践丨XP2P日志系统“上云”及“全链路”压测实践

2021-06-07 12:40:17 浏览数 (1)

导语丨本文将介绍我们是如何通过日志链路做整体分析压测,以应对比赛到来的峰值。

一、背景

为了应对大型比赛的峰值需求,我们针对 XP2P 日志系统做了一次临时的日志统计系统的部署,通过集群扩展同写入的方式,支持了近千万每分钟的日志流量。在总结了部署经验后,我们对日志系统进行了梳理,并通过容器化,对接入层进行了上云改造,对统计系统进行了迁移改造,并建设了备用统计系统。记录相关环节,谨供参考。

新架构如下:

二、容器化改造

旧接入reporter使用了cvm部署,每次有流量突发时,都需要对机器资源做评估,进行预先扩容,同时直播场景有明显的流量高峰(晚上)和低谷(凌晨),部署的机器容易空跑占用资源。在公司的容器平台(tke)稳定推广后,XP2P 这边也进行了接入改造。

镜像生成使用orangiCI,自动化生成,每个提交和合并请求,自动获取代码编译和打包。

工作负载,使用多地部署。

每一个负载对应创建一个service,这里使用了NodePort模式(后续了解到可以使用cmlb/l5,可以实现异地容灾)

每一个service,对应创建三网和cap接入的ingress。

支持http, https接入,https支持stgw自动接入,管理相关域名证书。

再通过gslb接入相关 vip,实现外网接入。

三、日志“全链路”压测

在部署了系统后,需要对链路的负载有一个清晰的认识,以应对峰值流量。针对日志链路,有消息队列,会起到解耦的作用,可以对消息队列kafka做好性能测试,分别测试上下游。

1.kafka 性能测试

先对kafka做性能测试,Kafka压测试工具如:

生产:

#少量

代码语言:javascript复制
bin/kafka-producer-perf-test.sh --topic test_p2p --num-records 100 --record-size 100 --producer-props bootstrap.servers=XX:9092 --throughput 20000

#大量

代码语言:javascript复制
bin/kafka-producer-perf-test.sh --topic test_p2p --num-records 100000 --record-size 100000 --producer-props bootstrap.servers=XX:9092 --throughput 20000

消费:

#少量

代码语言:javascript复制
bin/kafka-consumer-perf-test.sh --topic test_p2p --new-consumer --fetch-size 100 --messages 100 --broker-list bootstrap.servers=XX:9092

#大量

代码语言:javascript复制
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测试如:

代码语言:javascript复制
ab -c 10 -n 1000 -p datd.dat http://XX:6081/reporter/vlive

数据:

单机可以达到12k qps。

同时使用gprof工具对实例进行性能分析

# 调试heap

代码语言:javascript复制
go tool pprof http://XX6085/debug/pprof/heap

# 调试goroutine

代码语言:javascript复制
go tool pprof http://XX:6085/debug/pprof/goroutine

使用top, traces, list查看heap/goroutine占用:

火焰图:

收集信息,(30s)

代码语言:javascript复制
go tool pprof http://XXX:6085/debug/pprof/profile

使用生成的数据,运行页面:

代码语言:javascript复制
go tool pprof -http=:6000 ~/pprof/pprof.reporter-server.samples.cpu.002.pb.gz

查看:

127.0.0.1:6000

四、效果

通过上云和链路压测,了解日志系统链路性能指标,为应用比赛峰值做好准备,做到心中有数,一切尽在掌控。顺利支持 XP2P 流量再创新高。

0 人点赞