PerfLabs:以Cloud Native的姿势进行应用测试和调优 乐鸿辉

Razor

2019/10/19 发布于 技术 分类

文字内容
1. PerfLabs: 以 Cloud Native 的姿 势进⾏应⽤测试和调优 乐鸿辉 携程 高级研发经理
2. 自我介绍
3. 自我介绍 2017~ 携程云平台 Cloud Container&Service团队 高级研发经理 • K8s平台和调度体系研发 • Cloud Native Infrastructure改造 • 成本优化,效率提升 2012~2017 优酷土豆 基础系统 资深研发工程师 • 点播直播CDN研发 • UGC自动化审核系统研发
4. 目录 动机 用户调研 产品目标 技术方案 落地效果 未来规划
5. 携程容器云现状 Capacity Efficiency Performance CI/CD Unified Control Plane Coding PAAS 混合云、基于Kubernetes 10W Pod,快速增长 Cloud Native Infrastructure BareMetal VM Network Private/Public IDC Storage
6. 动机-排障日常 Support & Troubleshooting
7. 动机-排障日常 为什么程序发布时响应延迟这么高? 为什么我的CPU这么高? 我的内存为什么这么高?为什么OOM? 为什么这个实例有问题,其它实例没问题? 是不是你们容器的问题! 能帮我看看这样改效果怎么样吗?
8. 动机-小愿望 自己动手,丰衣足食 内心OS: 别来烦我~
9. 用户调研-为什么不能自助诊断? 不懂,不知道怎么弄 操作太麻烦了 有些工具影响性能,不敢在生产操作,怕出事 容器内没有权限,很多操作没法儿做 引用的Native包的问题,现有工具看不到
10. 用户调研-为什么不线下做测试调优? 测 试 数 据 构 造 维护复杂 构造成本高 失真 流 量 录 制 回 放 实时性差 场景受限 效果差 用得少
11. 产品目标 环境构造 性能诊断 分析展示 生产环境为中心 打造从环境构造、性能诊断到结果分析展示的性能优化闭环
12. 环境构造-流量动态加压 可控的流量负载测试 (Canary,Linkedin Redliner...) Group A Dependencies • 动态调整流量分配权重 • 对部分实例加压 • 观察调整被测实例 Load Balancer Requests Controller /Monitor Group B
13. 环境构造-流量动态加压 • 操作简单 • 可以处理有副作用请求 • 流量可能有损 大部分内部用户不太能接受流量损失
14. 环境构造-流量镜像 可控的流量镜像 Source Group • 复制流量到对比集群 • 流量可控 • 观察调整被测实例 Copy Requests Load Balancer Mirror Group: 自由的实验环境 Mirror Group Dependencies Controller /Monitor
15. 环境构造-流量镜像-风险 流量副作用? 手段 • 流量过滤 • Mirror Group环境变量标识 Source Group Filter 典型性能调优应用读多写少 • 查询引擎 • 接口渲染 Requests Load Balancer Env: PAAS_APP_IS_MIRROR_GROUP Mirror Group Dependencies Controller /Monitor
16. 环境构造-流量镜像-风险 Tracing混乱? Source Group 手段 • 清空Tracing相关的http header drop tracing header Requests Load Balancer Mirror Group Dependencies Controller /Monitor
17. 环境构造-流量镜像-技术方案 PAAS 自研流量镜像Sidecar Redir • • • • • • pcap包复制 SOA/HTTP协议解析 自定义规则请求过滤 抽样/放大系数 多Endpoint Load Balancing Config自动热加载 group inject Kube-Api injector Source Group Mirror Group Copy Sidecar管理与控制 • K8s自动管理Source Group的Sidecar注入 • Configmap实时控制Sidecar行为 Configmap Sidecar Sidecar Sidecar Dependencies Prod Env
18. 环境构造-流量镜像-技术方案 K8s通用Sidecar管理方案 • 通用的Sidecar模板治理 • 通用的Sidecar配置和渲染治理 • LabelSelector匹配 apiVersion: perflabs.cloud.ctrip.com/v1 kind:'>kind: SidecarBinding metadata: creationTimestamp: "2019-09-27T09:21:56Z" generation: 1 labels: perflabs.ctrip.com/appid: "100019954" perflabs.ctrip.com/env: PRO perflabs.ctrip.com/groupid: "21024912" ... sidecarTemplateRef: apiGroup: perflabs.cloud.ctrip.com kind:'>kind: SidecarTemplate name: redir spec: config: RedirectAMPRatio: "0.1" RedirectDstAddrs: '["xx.xx.xxx.xxx:8080"]' RedirectPatterns: '["getxxxinfo"]' RedirectTimeoutMs: "1000" namespace: xxx
19. 环境构造-流量镜像-技术对比 PerfLabs vs Istio Traffic Mirroring 旁路Copy,无侵入 流量放大缩小 Mesh未来趋势 自定义方便(私有协议、复杂过滤规则...) Proxy模式可以处理加密流量 容易落地(Mesh未落地)
20. 性能诊断-问题 jprofiler、JFR • 商业产品 低门槛 hprof • safepoint、profiling不准 dump(thread、heap) • 只能看到snapshot • 只能看到Java层 • heap dump可能导致进程OOM jvm-profiling-tools(perf-map-agent、 async-profiler) • 使用难度高 • 容器内权限问题 • 无集成 低损耗 多语言 简单易用
21. 性能诊断-CPU FlameGraph perf record JIT/VM? No generate stacksfile Yes get SymbolTable • C/C++: gcc -g -fno-omit-frame-pointer • Java: -XX:+PreserveFramePointer + perf-map-agent • Node.js: --perf-basic-prof generate flamegraph
22. 性能诊断-CPU FlameGraph • brendangregg/FlameGraph • http://www.brendangregg.com/Fla meGraphs/cpuflamegraphs.html
23. 性能诊断-CPU FlameGraph perf record 性能损耗 • 中断处理 • ring buffer • context switch PMC save/load mmap perf_event_open PMU init 正相关 • event数量 * thread数量 * 核数 * 采样频率 • thread活跃度 PMC reset 一般sample 99HZ损耗够小 ring buffer capture states overflow PMI handler
24. 性能诊断-Java Heap Allocation Eden JVMTI & TLAB • • TLAB refill(sampling) allocated outside of TLAB size too big 轻量、低损耗 jvm-profiling-tools/async-profiler Allocating small size Thread Local new TLAB
25. 性能诊断-Java锁竞争 JVMTI_EVENT_MONITOR_CONTENDED_ENTER JVMTI_EVENT_MONITOR_CONTENDED_ENTERED jvm-profiling-tools/async-profiler
26. 性能诊断-技术实现 如何做到简单易用?
27. 性能诊断-技术实现
28. 性能诊断-技术实现 • 可创建CPU、Heap、Lock诊断任务 • 失败重试 • 可Abort任务 apiVersion: perflabs.cloud.ctrip.com/v2 kind: PerfJob xxx spec: xxx perfSeconds: 30 perfShouldStop: false podInfo: name: xxx maxRetries: 5 status: message: Perf Succeeded phase: Succeeded retryTime: 3 url: http://xx.xx.xx.xx/swift/xxx/xxx.svg
29. 性能诊断-技术实现 PAAS group inject Kube-Api PerfJob/PerfTask PerfOperator PerfAgent Host • • • • Profiling任务CRD抽象 PerfOperator自动管理任务 PerfAgent任务执行 Ceph存储任务结果 PerfAgent与Host共享pid namespace
30. 落地场景-ABTest 流量镜像环境 技术改造A/B Testing Rxjava技术改造线程死锁
31. 落地场景-troubleshooting 生产环境 troubleshooting gc日志异常轮转触发cat CPU busy BUG
32. 未来规划-诊断工具 • eBPF • iovisor/bcc • iovisor/bpftrace 低损耗、可编程
33. 未来规划-诊断方式 60 异常点捕获 30 15 13 19:00:00 19:01:00 19:02:00 19:03:00 自动启动诊断 16 17 19:04:00 19:05:00
34. 未来规划-诊断结果 结果展示 问题分析 智能建议
35. 未来规划-开源 开源准备中... https://github.com/perflabs
37. 更多技术细节关注 携程技术中心@微信公号