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

2016/09/01 - 优化

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

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

  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. 增加灰度逻辑,必要时设置动态开关,及时回退老逻辑。


如果文章对您有帮助,欢迎扫描下方二维码赞助(一分也是爱噢),谢谢

Search

    一分也是爱噢 一分也是爱

    目录