1.高并发系统设计三大目标
高并发 | 高可用 | 可扩展 |
---|---|---|
概念 | 通过设计手段让系统处理更多用户请求,承载更大流量,是一切架构设计的背景和前提 | |
设计考虑因素 | 性能+可用性 性能:反映用户的使用体验 可用性:系统可以正常服务用户的时间 |
流量=平时流量+峰值流量 应对峰值流量时的快速扩展 |
2.性能优化原则
- 性能一定不能是盲目的,一定是问题导向的
- 盲目的优化增加系统复杂度,浪费时间
- 可能有损业务
- 性能遵循八二原则
- 用20%的精力解决80%的性能问题
- 一定要抓住主要矛盾
- 性能优化需要数据职称
- 及时了解优化指标
- 性能优化是持续的
- 出现性能问题的原因是很多方面的,持续优化
3.性能度量指标
有了数据才能明确目前存在的性能问题,明确性能的度量指标非常重要
吞吐量(请求数量)+响应时间(单次请求的开始至结束耗时)
度量性能指标通常是系统接口的响应时间,需要通过特征值代表一段时间的性能情况
平均值 | 可以反应一段时间的性能 | 敏感度较差 | 平均值只作为度量性能的参考 |
---|---|---|---|
最大值 | 单位时间内请求最大值 | 过于敏感 | |
分位值 | 将单位时间内的所有请求时间排序 90位的响应时间就是90分位 实际工作中使用最多 |
很好的反应这段时间的性能情况 分位越大,对慢请求就约敏感 |
经验:
接口在200ms以内感受不到延迟
1s以内,可以感受到延迟,但是能够接受
接口耗时不要超过1s
4.高并发下的性能优化
提供系统核心数:增加系统并行处理能力,一味的增加,可能会导致性能下降
压力测试时,需要找到系统的拐点,找到系统的瓶颈,持续优化系统性能
[图片上传失败...(image-d42c7a-1633760715912)]
减少单次任务响应时间:将任务划分成cpu密集型+io密集型
CPU密集型:高效算法+减少运算次数 工具:Profile+peff+eBPF
IO密集型:磁盘IO+网络IO 工具:Linux工具集+语言专属的内存分析工具+监控性能问题
找到性能瓶颈点后,对齐进行优化(对阵下药):
如果是数据库访问慢,那么就要看是不是有锁表的情况、是不是有全表扫描、索引加的是否合适、是否有 JOIN 操作、需不需要加缓存
如果是网络的问题,就要看网络的参数是否有优化的空间,抓包来看是否有大量的超时重传,网卡是否有大量丢包等
5.小结
任何优化需要数据优先
掌握性能优化的工具与方法,在工作中不断积累
基础知识很重要,可以在优化过程中抓住性能问题的关键
银弹:万金油,应对所有场面,解决所有问题