高性能编程
2019-07-25 09:56:34 0 举报
AI智能生成
高性能架构
作者其他创作
大纲/内容
什么是高性能
资源
cpu使用率、缓存命中率等
饱和度,排队长度或排队时间,如load15
错误
负载
低延时
接口级、用户级
百分位
大流量
支持多少用户、并发等
性能监控
工具
os
测试、分析工具
监控工具。指标、执行链路、日志。。。
原则
业务需求、实现逻辑上考虑更少资源的实现
设计20,实现3+,部署1.5+
合适,找出短板。如数据库,索引,io模型等
合理使用cpu
减少不必要的cpu使用率,比如快速排序算法
减少不必要的cpu消耗,比如上下文切换
尽量使用更快的硬件
寄存器>cpu缓存>内存>磁盘网络
缓存命中率
减少等待(阻塞)
并行、并发
nio
事件模型
异步处理
大概率预测
偏向锁
分支预测
乐观锁
降低数据量
数据结构本身
合理的字段数
合理的字段类型
序列化 pb>json>xml
压缩
jvm gc,堆越小越快
减少执行路径或次数
本地缓存,cdn
dma
服务依赖路径
jit
增加快速组件的命中率
java stream中的终结操作
边缘计算
批处理
扩展
水平
(横向)扩展
(横向)扩展
x扩展
(冗余,复制,并发,并行)
(冗余,复制,并发,并行)
减少数据竞争
、竞争范围
、竞争范围
单机
不竞争ThreadLocal
可见性
原子性
放宽事务级别
分布式
减少分布式事务,
特别是长事务
特别是长事务
放宽一致性级别
y扩展(功能模块、分库)
z扩展(分区、分表)
垂直(纵向)扩展
更强大的单件性能
复用(减少销毁、新建的消耗)
直接内存缓存,不gc
线程池、连接池
硬件如bios级别,os级别,中间件,软件级别调参调优。队列大小、缓存、特性、延时等。。
硬件性能
纵向(主要低延时)
cpu
主频、流水线
gpu、tpu
io
存储
cpu寄存器、缓存
内存
磁盘
机械(缓存)
ssd、闪存
指标
顺序
随即
网卡
网卡中断与CPU绑定
DMA(零拷贝)
其他io设备
横向(主要大流量)
cpu
多流水线、多cpu、多核、超线程
io
多实例
多磁盘(RAID)
内存多通道
数据总线宽度
分布式多实例
一致性
单机锁、信号量、同步
分布式线性、因果、最终
分布式逻辑时钟、向量时钟(可见性?)
软件
cpu
进程、线程
线程池
初始数、核心、队列类型/大小、拒绝策略
同步
锁
悲观、乐观(cas)
信号量
级别
自旋、偏向、轻量、重量
读写、可重入
juc
java内存模型
可见性与原子性
happen-before模型
cpu与内存特性(线程切换,伪共享,gc)
Unsafe
异步
回调通知
延时获取
消息队列组件
上下文切换
业务或业务实现设计上能否减少数据竞争
线程绑定
伪共享
存储
缓存(缓存无处不在,cpu,磁盘,arp)
客户端缓存
dns,浏览器本地缓存
中间节点缓存
cdn
服务端缓存
本地进程内存(可以继续细分,类似cpu的123级缓存)
本地磁盘缓存
缓存子系统
redis
缓存的局部性原理(空间、时间)
伪共享
大量缓存不命中
底部存储存不存在
缓存更新逻辑
缓存同时过期
存储的物理结构和逻辑结构+业务算法
大O
io
零拷贝
物理/逻辑/实现上减少中间步骤
io模型
多路复用(大流量)
nio、netty
非阻塞
序列化
json、protobuff。。。
批处理(大流量)
通信效率、运行时优化
时间换空间
压缩
编程模型
反应式编程
rxjava、reactor
分布式
微服务
拆分
无状态
池化技术
对象池、连接池、线程池
事务
vm,解释,编译,垃圾回收
子系统与组件
队列
kafka、pulsar、rabbitmq
数据库
关系
关系(btree)
文档
时序
存储
按页
行
列
适合大范围小列查询分析场景
日志(lsm)
模型
关系
文档
时序
图
介质(机械、ssd、mem)
流处理
flink
cap
一般强一致性的设计性能会低一点
spark stream
缓存
redis、memcache
cdn
负载均衡
硬件、lvs、haproxy、nginx等
2、3、4、7层,理论上层数越低性能越好,配置越负载
2、3、4、7层,理论上层数越低性能越好,配置越负载
算法(轮询、随即、hash等)
jvm
jvm本身的优化、jit、
参数调优
特性
运行时内存区域
GC
性能监控工具
版本升级,可能会有免费的性能提升
云平台
特殊场景优化
mpsc
jctools
disruptor
...
0 条评论
下一页