zhaoyu@home:~$

性能和扩展

响应时间和吞吐量

一个完整的事务响应时间由下面几部分组成:

  • 数据库连接获取时间。
  • 通过线路发送sql语句花费的时间。
  • 所有sql执行的时间。
  • 将执行结果发送回客户端的时间。
  • 事务因为应用更高级别的计算占用,而在释放连接前空闲的时间。 其总时间计算公式如下:
    T = t(acq) + t(req) + t(exec) + t(res) + t(idle)
    

吞吐量是一段时间内处理事务的数量。通常来说增大连接数,系统的吞吐量也会呈现曲线增长。

数据库升级和扩展

分布式系统相对于中心化系统更加复杂,所以水平扩展往往比垂直扩展更具挑战。
facebook就是使用水平扩展mysql以适应巨大的访问流量。

主从复制

对于读写比高的系统,主从模式很适合增强系统性能。

所有的写操作都是通过master进行的。master的所有更改都会在slave上重复发生。由于主从复制有时间延迟,从节点的同步可能要慢于主节点,在主节点挂掉时, 集群的投票机制会选出一个新的master。同步复制也被称为热备份。
在主从复制策略中,从节点可以只接收只读事务,较少主节点的读取流量。在主从复制中,主节点无法满足日益增长的读写流量时,多主节点复制时一个更好地选择。

多主节点复制

在多主节点模式中,所有的节点是平等的,既可以接收读请求,也可以接收写请求。然而分布式系统都是寻求平衡,由于多主模式有多个数据源,确保数据一致性是 一个巨大挑战。相同的数据可能同时在多个节点被更改,可能引起修改冲突。可以通过使用自动冲突解决算法避免冲突。
为了避免冲突,可以使用两阶段提交协议,这种协议要求所有节点在一个时间段内同步,这会增加事务的响应时间。

分片

当数据大到超过复制多节点技术的限制时,分割数据是不可避免的。分片意味着分布式数据跨越多个节点, 每个节点维护所有数据的一个子集。
传统数据库在数据库内提供了水平分区来跨表分布数据。相对于水平分区,分片需要一个分布式系统技术让数据分布在多台机器上。分片直接的连接由于使用分布式锁的 成本和网络开销会导致事务响应时间变得很长,通常会被禁止。典型的分片系统如下:

在上面的图标中,country表在两个数据中心之间做镜像复制,分区只发生在user表中。为了减少分片间的数据传输,每个user只会被保存在一个数据中心中。 在增加系统容量的过程中,分片通常是用尽其他所有可能后,最后的策略。
Mysql Cluster提供了mysql自动分片的功能(使用主键hash算法),每个节点都是可读写的。如下图:

由于是集群负责分发数据,所以应用层不必提供数据分片路由器。SQL也可能跨分片实现连接查询。Mysql Cluster7.3使用NDB存储引擎,所以它缺少了InnoDB 提供的事务隔离性和MVCC(Multi-Version Concurrency Control)。