IO优化
1、缓存、缓冲技术
2、数据组织结构优化
3、应用合理的RAID策略提升磁盘I/O。
WEB前端调优
减少网络交互的次数(多次请求合并)
减少网络传输数据量的大小(压缩)
尽量减少编码(尽量提前将字符转化为字节,或者减少从字符到字节的转化过程。)
使用浏览器缓存
减少Cookie传输
合理布局页面
使用页面压缩
延迟加载页面
CSS在最上面,JS在最下面
CDN
反向代理
页面静态化
异地部署
服务降级(自动优雅降级)
拒绝服务和关闭服务
幂等性设计
(注:幂等性是系统的接口对外一种承诺(而不是实现), 承诺只要调用接口成功, 外部多次调用对系统的影响是一致的. 声明为幂等的接口会认为外部调用失败是常态, 并且失败之后必然会有重试.)
失效转移
若数据服务器集群中任何一台服务器宕机,那么应用程序针对这台服务器的所有读写操作都需要重新路由到其他服务器,保证数据访问不会失败,这个过程叫失效转移。
失效转移包括:失效确认(心跳检测和应用程序访问失败报告)、访问转移、数据恢复。
失效转移保证当一个数据副本不可访问时,可以快速切换访问数据的其他副本,保证系统可用。
性能优化
根据网站分层架构,性能优化可分为:web前端性能优化、应用服务器性能优化、存储服务器性能优化。
- web前端性能优化
浏览器访问优化:减少http请求;使用浏览器缓存;启用压缩;css放在页面最上面、javaScript放在页面最下面;减少Cookie传输
CDN加速
反向代理
- 应用服务器性能优化
分布式缓存(Redis等)
异步操作(消息队列)
使用集群(负载均衡)
代码优化
- 存储性能优化
机械硬盘vs固态硬盘
B+树 vs LSM树
RAID vs HDFS
代码优化
多线程
(Q:怎么确保线程安全?:某些类是线程安全的,某些不是线程安全的,非线程安全的类在多线程实现中要考虑线程同步。无锁机制有哪些?:synchronized是最简单的一种实现线程安全的机制,但是开销很大,线程从运行态到阻塞状态,需要从用户态到内核态,也就是上下文切换;)
资源复用
单例模式、线程池、连接池
数据结构
垃圾回收
负载均衡算法
轮询 Round Robin
加强轮询 Weight Round Robin
随机 Random
加强随机 Weight Random
最少连接 Least Connections
加强最少连接
源地址散列 Hash
15. 流控(流量控制)
流量丢弃
通过单机内存队列来进行有限的等待,直接丢弃用户请求的处理方式显得简单而粗暴,并且如果是I/O密集型应用(包括网络I/O和磁盘I/O),瓶颈一般不再CPU和内存。因此,适当的等待,既能够替身用户体验,又能够提高资源利用率。
通过分布式消息队列来将用户的请求异步化。
网友评论