数据库负载问题的架构思路

一:数据库瓶颈的出现

  随着数据库负载的增大,对数据库读写性能的要求成为瓶颈。

  一般情况下,用户对数据库的操作,70%是读,30%是写,因此数据库的性能瓶颈大多出现在读上,想办法提高读取速度也是解决数据库瓶颈的第一手段。

二:数据库调优

  一般情况下,很多性能问题不是真的因为硬件造成的,而是开发阶段过于追求开发效率,导致索引没建好、sql语句没写好或者循环嵌套查询等。

  因此,当出现系统性能问题时,应该第一时间检查代码,进行优化。

三:缓存

  我们一般采用缓存中间件进行尝试,利用redis或memcache集群来承担大部分的数据读取任务。

  一般情况下,到这一步已经足以满足大部分中小型项目的读取需求了。

  注意:缓存方案仅适用于对一致性没有强要求的业务场景,对于传统企业ERP系统等流程环节紧密相扣的情况,不适用。

四:读写分离

  对数据库进行“一主多从”的架构模式进行部署,将写操作集中在主数据库,读操作分派到从数据库上进行。

  数据库读写分离的实现有多种:在代码中自己实现算法进行分派,或者使用Mycat、Atlas等中间件进行分派,或者在数据库主从部署时数据库本身就提供此特性。

  注意:主从数据库之间的备份存在一定延迟,因此对于业务流程紧密关联的场景下也不适应,对于传统ERP系统,可以将报表、BI分析等业务功能进行读写分离,但是生产业务单据还是要在主数据库进行操作。

  代码实现读写分离:

  Atlas实现读写分离:

  ProxySQL实现读写分离:

  Mycat实现读写分离:

五:分库分表

  面对 写操作密集型 系统,单纯的主从备份读写分离并没有解决 写操作 造成的性能问题。

  此时需要进行分库分表。

六:集群

  todo。

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