性能度量
- TPS和RT
好的性能从设计开始
设计思路
- 分而治之:分层,分区,分模块,可以针对性做优化
- 应用无状态:水平扩展
- 有效使用缓存:关注缓存读写比,命中率
- 异步通信
- nosql:非结构化,非关系型数据,热点数据
- 多核并发设计:使用线程池,copyonwrite,concurrenthashmap,volatile,reentrantlock,readwritelock,condition,threadlocal
- 考虑使用性能更好的加密算法
- 考虑使用更好的序列化工具:protobuf,thrift
- tpc选择:http调用每次都需要建立链接,消息头比较大,性能比不上thrift
- 合并请求:循环调用某服务,考虑批量调用接口,可以合并请求
- 对象池化:避免每次都new一个
- 合理分配集合大小,避免频繁扩容及浪费
- 限制IO读写大小,避免oom
- 单例模式,减少GC
- 内存泄漏:压测程序,通过jmap,btrace分析GC
- NIO由于非阻塞,可以极大提高吞吐量,Netty
- 压缩:减少网络传输数据大小
- 异步化:提高并发能力,将耗时操作异步化,不影响主流程
- 线程数:控制合理线程数,线程过多导致系统CPU忙于线程切换,降低应用处理能力
- 减少锁竞争:否则线程过多,线程之间切换频繁