这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记
高质量编程
什么是高质量——编写的代码能够达到正确可靠、简洁清晰的目标可称之为高质量代码
- 各种边界条件是否考虑完备
- 异常情况处理,稳定性保证·易读易维护 理想的设计特征
- 最小的复杂度
- 正交性
- 易于维护
- 松散耦合
- 可扩展性
- 可重用性
- 高扇入
- 低扇出
- 精简性
- 层次性
- 标准技术
编程原则
实际应用场景千变万化,各种语言的特性和语法各-不相同但是高质量编程遵循的原则是相通的
- 简单性
- 消除“侈余的复杂性”,以简单清晰的逻辑编写代码·不理解的代码无法修复改进
- 可读性
- 编写可维护代码的第一步是确保代码可读生产力
如何编写高质量的Go代码
- 代码格式
- 注释
- 命名规范
- 控制流程
- 错误和异常处理 工具gofmt\goimports
性能调优实战
性能调优原则
- 要依靠数据不是猜测
- 要定位最大瓶颈而不是细枝末节
- 不要过早优化
- 不要过度优化
性能分析工具pprof
pprof 是一个强大的性能分析工具,可以捕捉到多维度的运行状态的数据,下面简单介绍一下pprof的用法。 golang在语言层面集成了profile采样工具,在程序运行过程中可以获取cpu、heap、block、traces等执行信息,这些会涉及到runtime/pprof、net/http/pprof、runtime/trace等package。
性能调优案例-业务服务优化
- 建立服务性能评估手段
- 分析性能数据,定位性能瓶颈
- 重点优化项改造
- 优化效果验证
建立服务性能评估手段
服务性能评估方式
- 单独benchmark无法满足复杂逻辑分析
- 不同负载情况下性能表现差异 请求流量构造
- 不同请求参数覆盖逻辑不同
- 线上真实流量情况 压测范围
- 单机器压测
- 集群压测 性能数据采集
- 单机性能数据
- 集群性能数据
分析性能数据,定位性能瓶颈
- 使用库不规范
- 高并发场景优化不足
重点优化项改造
正确性是基础
向应数据diff
- 线上请求数据录制回放
- 新旧逻辑接口数据diff
优化效果验证
重复压测验证
上线评估优化效果
- 关注服务监控
- 逐步放量收集性能数据
总结与思考
性能调优原则是要依靠数据不是猜测。性能调优要保证正确性,定位主要瓶颈。要学会使用性能分析工具pprof。