高质量编程与性能调优实战 | 青训营笔记

108 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记

高质量编程

什么是高质量——编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码

  • 各种边界条件是否考虑完备
  • 异常情况处理,稳定性保证·易读易维护 理想的设计特征
  • 最小的复杂度
  • 正交性
  • 易于维护
  • 松散耦合
  • 可扩展性
  • 可重用性
  • 高扇入
  • 低扇出
  • 精简性
  • 层次性
  • 标准技术

编程原则

实际应用场景千变万化,各种语言的特性和语法各-不相同但是高质量编程遵循的原则是相通的

  1. 简单性
  • 消除“侈余的复杂性”,以简单清晰的逻辑编写代码·不理解的代码无法修复改进
  1. 可读性
  • 编写可维护代码的第一步是确保代码可读生产力

如何编写高质量的Go代码

  • 代码格式
  • 注释
  • 命名规范
  • 控制流程
  • 错误和异常处理 工具gofmt\goimports

性能调优实战

性能调优原则

  • 要依靠数据不是猜测
  • 要定位最大瓶颈而不是细枝末节
  • 不要过早优化
  • 不要过度优化

性能分析工具pprof

pprof 是一个强大的性能分析工具,可以捕捉到多维度的运行状态的数据,下面简单介绍一下pprof的用法。 golang在语言层面集成了profile采样工具,在程序运行过程中可以获取cpu、heap、block、traces等执行信息,这些会涉及到runtime/pprof、net/http/pprof、runtime/trace等package。

性能调优案例-业务服务优化

  1. 建立服务性能评估手段
  2. 分析性能数据,定位性能瓶颈
  3. 重点优化项改造
  4. 优化效果验证 建立服务性能评估手段
    服务性能评估方式
  • 单独benchmark无法满足复杂逻辑分析
  • 不同负载情况下性能表现差异 请求流量构造
  • 不同请求参数覆盖逻辑不同
  • 线上真实流量情况 压测范围
  • 单机器压测
  • 集群压测 性能数据采集
  • 单机性能数据
  • 集群性能数据

分析性能数据,定位性能瓶颈

  • 使用库不规范
  • 高并发场景优化不足 重点优化项改造
    正确性是基础
    向应数据diff
  1. 线上请求数据录制回放
  2. 新旧逻辑接口数据diff 优化效果验证
    重复压测验证
    上线评估优化效果
  • 关注服务监控
  • 逐步放量收集性能数据

总结与思考

性能调优原则是要依靠数据不是猜测。性能调优要保证正确性,定位主要瓶颈。要学会使用性能分析工具pprof。