业务应用数据库压力解决方案
注意:原创文章,转载请注明出处。
引言
数据库炸了,加CPU加内存?或许还有更合适的方法,例如优化代码逻辑、合理利用中间件、横向扩展数据库配置。
之前在做业务应用系统压力测试项目的时候,发现性能不达标的应用,问题大多出在数据库上,服务器的资源才用了30%不到,数据库资源已经跑满的情况比比皆是。
应用系统数据库压力过大是每个业务经理都多多少少面临过的问题,那么解决的办法除了纵向提高数据库配置(扩容CPU、内存)之外,是否还有其他更高效的途径呢?
一、原因分析
众所周知,单台数据库实例配置的提升是有瓶颈的,特别是关系型数据库,当CPU和内存配置提高到一定程度后,性能就很难再有提高,即使对数据库的内核进行优化,也只能稍微抬高这个瓶颈线。
在我所经历过的应用系统压力测试工作中,发现大厂研发的应用产品,通常服务器压力和数据库压力是基本持平的,而中小型的软件开发商提供的产品,往往服务器还没体现出明显的压力,数据库却已经炸了。
有经验的软件开发工程师会思考如何在代码层面合理规划数据库和服务器所承受的压力,把一部分推拉数据库数据的功能模块转化为通过服务器缓存或计算来完成,从而将数据库压力转移到服务器上。
另外,我们还可以利用Redis、MQ等中间件的数据缓存、内容分发等功能,作为数据缓存站或中转站来分担数据库压力。
当已经无法再通过上述方案降低数据库压力后,我们还可以凭借分布式数据库、主从读写分离数据库支持横向扩展的能力,来提升数据库性能。理论上横向扩展数据库性能是可以无上限地提高数据