互联网高并发设计的手段:架构、算法、代码

2023年 10月 31日 86.3k 0

性能优化目标

1、缩短响应时间

2、提高并发数(增加吞吐量)

3、让系统处于合理状态

图片图片

性能优化手段

1、空间换时间

系统时间是瓶颈: 缓存复用计算结果,降低时间开销,因为cpu时间较内存容量更加昂贵。

2、时间换空间   

  • 数据大小是瓶颈
  • 网络传输是瓶颈,使用系统时间换取传输的空间,使用HTTP的gzip压缩算法    
  • app的请求分类接口,使用版本号判断哪些数据更新,只下载更新的数据

3、找到系统瓶颈

  • 分析系统的业务流程,找到关键路径并分解优化
  • 调用了多少RPC接口,载入多少数据,是用什么算法,非核心流程是否异步化。

性能优化层次

1、架构设计层次

如何拆分系统 如何使用部分系统整体负载更加均衡   充分发挥硬件设施性能优势  减少系统内部开销等

2、算法逻辑层次

关注算法选择是否高效,算法逻辑优化,空间时间优化任务执行吃力,使用无锁数据结构。

空间换时间:ThreadLocal

时间换空间:采用压缩算法压缩数据,更复杂的逻辑减少数据传输。

3、代码优化层次

关注代码细节优化,代码实现是否合理,是否创建了过多的对象,循环遍历是否高效,cache使用是否合理 

优化层次:从整理到细节,从全局角度到局部视角。

代码优化层次(1)

  • 循环遍历是否合理高效,不要在循环里调RPC接口,传输分布式缓存 执行SQL等
  • 先调用批量接口组装好数据,再循环处理
  • 代码逻辑避免生成过多的对象和无效对象
  • 输出Log时候的log级别判断  避免new无效对象
  • ArrayList、HashMap初始容量设置是否合理
  • 对数据对象是否合理重用 比如RPC查到的数据能复用则必须复用,根据数据访问特性选择合适数据结构,比如读多写少考虑  CopyOrWriteArrayList(写时copy副本),会否正确初始化数据,有些全局共享的数据,饿汉式模式,在用户使用之前先初始化好。

代码优化层次(2)

  • CPU Cache结 构
  • 速度越来越高:内存 - >L3->L2->L1多级缓存
  • 本质上内存是一个大的一维数组,二维数组在内存中按行排列,先存放a[0]行,再存放a[1]行
  • 第一种遍历方式,是行遍历,先遍历完一行再遍历第二行,符合局部性原理Cache Hit  (缓存命中率高)
  • 第二种遍历方式,是列遍历,遍历完第一列遍历第二列,由于下一列和 上 一 列的数组元素在内存中并不是连续的,很可能导致Cache  Miss ( 缓 存 未 命 中 ) , CPU 需要去内存载入数据,速度较CPU    L1Cache的速度降低 了很多(主存100ns,L1  cache  0.5ns)

图片图片

数据优化层次

select count(*)from table where add  time

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论