3.6.2 数据库扩容
数据库可扩展性实现的手段包括:通过主从复制提高系统的读取能力,通过垂直拆分和水平拆分将数据分布到多个存储节点,通过主从复制将系统扩展到多个数据中心。当主节点出现故障时,可以将服务切换到从节点;另外,当数据库整体服务能力不足时,可以根据业务的特点重新拆分数据进行扩容。
如图3-7所示,假设数据库中有三张表格table1、table2以及table3,先按照业务将三张表垂直拆分到不同的DB中,再将每张表通过哈希的方式水平拆分到不同的存储节点。每个拆分后的DB通过主从复制维护多个副本,且允许分布到多个数据中心。如果系统的读取能力不足,可以通过增加副本的方式解决,如果系统的写入能力不足,可以根据业务的特点重新拆分数据,常见的做法为双倍扩容,即将每个分片的数据拆分为两个分片,扩容的过程中需要迁移一半的数据到新加入的存储节点。
图 3-7 数据库拆分示意图
传统的数据库架构在可扩展性上面临如下问题:
●扩容不够灵活。传统数据库架构一般采用双倍扩容的做法,很难做到按需扩容。假设系统中已经有16个存储节点,如果希望将系统的服务能力提高5%,只需要新增1个而不是16个存储节点。
●扩容不够自动化。传统数据库架构扩容时需要迁移大量的数据,整个过程时间较长,容易发生异常情况,且数据划分的规则往往和业务相关,很难做到自动化。
●增加副本时间长。如果某个主节点出现永久性故障,比如硬盘故障,需要增加一个副本,整个过程需要拷贝大量的数据,耗费的时间很长。
