性能优化之数据库操作异步化

最近在做一个系统优化的项目,经排查发现程序存在大量数据库操作并且是同步的,导致性能急剧下降。因相关数据库操作对实时性要求不是很强,所以打算部署一个数据库操作模块,负责异步化系统所有数据库操作请求。

下面是项目一些注意点的简单总结。

 

1、当只有一个线程抢占锁时,加解锁的性能开销可以忽略不计(不精确)。

 

2、当操作网络IO(如tcp一发一收的情况),会消耗10ms以上,qps为6000个请求每分钟,性能急剧下降(不精确)。

 

3、数据库对同一个表做插入操作时可适当的合并(如insert into XXX values(),(),(),(),()…),数据库单表一次insert操作大概消耗300微妙(不精确)。

 

4、请求超时时间要设置合理,避免同步等待过长时间(最好异步化)。

 

5、协议制定要有可扩展,兼容新旧版本(如带版本号)。

 

6、buf分配及大小关系(静态变量注意多线程加锁问题,栈变量注意大小问题,堆变量注意内存泄露问题)。

 

7、cpu密集型注意适当sleep让出cpu

 

8、容灾方案要考虑好,做到多机部署,故障时自动切换逻辑(如回包统计、超时换侧等)

 

9、适当打印日志,合理调整日志级别。

 

10、充分检测异常条件,及时告警,做好保护。

 

11、对于小包,可以采取攒包策略,减少网络io次数。tcp也可使用长连接,减少握手消耗。

 

12、CPU线程或主线程和IO线程如无需同步操作可以通过队列通信,实现异步化。

 

13、队列大小设置得当,起到缓冲作用。

 

14、部署规范化(如接入公司相关发布系统等)。

 

15、增加灰度逻辑,必要时设置动态开关,及时回退老逻辑。



你可能感兴趣的:(系统架构,优化)