RSS

Database Replication与应用模型介绍

19 Sep

Database Replication是一个在冗余数据库之间分享数据,以维护多个数据一致的数据库副本(Replica)的方法,目的是提高可靠性、容错性和可访问性。其目的和方式,直白地说,是以冗余数据的方式提高容错能力,以实时维护数据库副本的方式保证宕机时热切换,同时分散数据查询的载荷以提高性能,而所有的一切对外部用户是透明的。当然,不同的应用背景对数据库的期望是不同的,可能偏重于上述的某些个能力,并不是兼有。

例如分支团队希望在远程得到一部分数据库数据,而不是实时访问主数据库,那么可通过Replication为其建一个主数据库中某些表的副本,这个副本中的数据可隔一定时间同步一次。

Replication不是数据库备份技术,数据库备份的要旨在于将某一个时间节点上的数据库状态备份起来,供未来的数据恢复或参考用;而Replication的数据库副本对所做的更新都是无条件执行的,至于执行之后的数据状态是好是坏,它们不关心。不过Replication有助于数据库备份,后文介绍master-slave模式时会提及。

从数据一致性的维护上讲,应用Replication要首先安排所有数据库副本的责任角色,谁能接收更改请求并分享出来,谁仅读取其他副本的数据更新。称前者为master,称后者为slave,通常有master-slave和multi-master两种应用模型,下面首先介绍这两种模型。

master-slave

一个server上的DB做master,其他所有server上的DB副本都作为slave。任何时候都由master接收更新请求并首先执行,然后将更新的信息传递给slave,slave上再应用更新。slave仅用来接收查询请求,当master宕机时会按照切换策略将一个slave升级为master,而原master在修复之后则作为slave重新加入。

借用来自MySQL Reference Manual的下图说明master-slave模型的Replication的应用场景。

图中的应用场景是一个大量数据库查询的web应用,使用master-slave的首要目的是分担载荷。

  1. 用户的request先由Load Balancer分派到某一较轻负载的web应用实例上;
  2. 根据request中对数据的不同操作类型,web应用实例将数据实时性要求较宽松的只读请求发给slave处理,而将数据实时性要求高的读操作或写操作发给master处理;
  3. 写操作的信息在master数据库上执行的同时,被Replicate给各个slave。

另外,上文提到Replication并不属于数据库备份技术,但数据库备份操作确实可从中受益。master-slave模型中,可在某一slave更新数据后将它从slave阵列中切出,暂时不再接受任何request或replication,这时可对此slave数据库进行备份。备份过程可专心进行,相比直接对服务中的数据库做备份,难度降低许多。备份完毕的这台server可主动请求master的数据,更新完毕后可重新作为slave加入阵列继续提供服务。

multi-master

“能够接收更新请求并首先执行”是具有master角色的标准,该应用模型中所有的server上的DB副本都是master,可接收更新请求或数据查询请求,因为宕机时的切换成本比master-slave要小。这种应用模型的在副本数据更新的信息来源上也分两种方式。

1. Active Replication

任何更新请求都分别发给各个副本执行,这种主动行为的好处在于简化了副本间的数据同步,却让负载同时发生,失去了副本间并发响应查询请求的性能。

2. Passive Replication

任何更新请求只发给某一个副本,它接收到之后会立即执行,然后将自己的状态传播给其他副本,其他副本在此过程中只被动等待。这种副本间传递信息的方式比master-slave更要复杂,因为这张网上的任一节点都能当做其他节点的信息来源,而且两条对临界数据的修改可能随时出现,所以需要分布式并发控制。常见的方法有两个,一个基于锁机制,将修改所涉及到的资源的加锁,以同步不同master上收到的更改的执行顺序;另一个基于时间戳和事务回滚,各副本先应用事物所描述的更新,在其他副本的信息到来后发现冲突时,再依时间戳为据选择是否回滚前面的更新。

Reference

  • Replication的解释,http://en.wikipedia.org/wiki/Database_replication
  • 在负载均衡上的应用,http://dev.mysql.com/doc/refman/5.6/en/replication-solutions-scaleout.html
  • 在宕机时切换上的应用,http://dev.mysql.com/doc/refman/5.6/en/replication-solutions-switch.html
 

About Wu Shaobo

@ThoughtWorks
Comments Off on Database Replication与应用模型介绍

Posted by in Uncategorized

 

Comments are closed.