一:数据库瓶颈的出现
随着数据库负载的增大,对数据库读写性能的要求成为瓶颈。
一般情况下,用户对数据库的操作,70%是读,30%是写,因此数据库的性能瓶颈大多出现在读上,想办法提高读取速度也是解决数据库瓶颈的第一手段。
二:数据库调优
一般情况下,很多性能问题不是真的因为硬件造成的,而是开发阶段过于追求开发效率,导致索引没建好、sql语句没写好或者循环嵌套查询等。
因此,当出现系统性能问题时,应该第一时间检查代码,进行优化。
三:缓存
我们一般采用缓存中间件进行尝试,利用redis或memcache集群来承担大部分的数据读取任务。
一般情况下,到这一步已经足以满足大部分中小型项目的读取需求了。
注意:缓存方案仅适用于对一致性没有强要求的业务场景,对于传统企业ERP系统等流程环节紧密相扣的情况,不适用。
四:读写分离
对数据库进行“一主多从”的架构模式进行部署,将写操作集中在主数据库,读操作分派到从数据库上进行。
数据库读写分离的实现有多种:在代码中自己实现算法进行分派,或者使用Mycat、Atlas等中间件进行分派,或者在数据库主从部署时数据库本身就提供此特性。
注意:主从数据库之间的备份存在一定延迟,因此对于业务流程紧密关联的场景下也不适应,对于传统ERP系统,可以将报表、BI分析等业务功能进行读写分离,但是生产业务单据还是要在主数据库进行操作。
代码实现读写分离:https://www.cnblogs.com/ya-qiang/p/9405480.html
Atlas实现读写分离:https://blog.csdn.net/weixin_41488238/article/details/80196108
ProxySQL实现读写分离:https://blog.csdn.net/jolly10/article/details/80391404
Mycat实现读写分离:https://blog.csdn.net/thundermeng/article/details/80578971
五:分库分表
面对 写操作密集型 系统,单纯的主从备份读写分离并没有解决 写操作 造成的性能问题。
此时需要进行分库分表。
六:集群
todo。