数据库扩展(一)——主从复制、读写分离

介绍:

主服务器——写操作;

从服务器——读操作;

反向代理(Mysql proxy)——可有效解决代码中何时操作主服务器、何时操作从服务器问题。

备注:

主从复制:Mysql支持使用一个服务器作为另外一个服务器的备份,即主服务器在提供服务的同时,会把所有的修改操作同步到从服务器。这样从服务器就成为了主服务器的一个实时备份。(这种增量备份的方式不会造成主服务器系统繁忙,由主服务器推送更新给从服务器带来的开销非常少,即可可以忽略不计。)在Mysql服务器上开启主从复制的功能只需简单两步即可完成:①开启主服务器上的二级制日志(log-in);②在主服务器和从服务器上分别进行简单的配置和授权。

读写分离:从服务器不能做数据更改操作,不然更改操作带来的数据更新不能反映到主服务器,客户端向主服务器查询这些数据时就不能得到最新的数据。为了使所有请求都能被正常处理,我们对主、从服务器做分工,主服务器只处理对数据有更改的写操作,从服务器只处理读请求,实现读写分离。Mysql的主从复制支持一主多备,这样可以把读请求分发到多个从服务器上,避免读请求过多导致单一备份负载高。

反向代理:如果配置好了数据库的主从复制和读写分离,则在对原来的代码进行修改以适应现在的数据库架构时会遇到一个困难,即需要维护多个数据库地址的配置,同时在访问数据的时候需要根据请求是读还是写来确定访问哪个数据库地址,这会使代码不好维护并且容易出错。使用数据库反向代理可以解决这个问题。使用mysql proxy之后的架构如下图:屏幕快照 2015-08-11 下午2.34.34

注意:读写分离的做法有个致命缺点:对于从服务器,写请求不能立即生效,需要完成相应写请求的主从复制之后才能在服务器上读到相应修改,从服务器越多,这种延迟越显著。这使得这种架构只能使用在对写请求实时性不强的应用,比如微博和博客。

在性能上,主从复制、读写分离的架构的读请求的负载是可以通过加从服务器来扩展的,但写请求是一个单点,当写请求多到主服务器无法胜任的时候,这种数据库加够就不合适了。(可以参考《数据库优化(二)——垂直划分、水平划分》)

摘自:机械工业出版社《微信公众平台应用开发实战》 钟志勇 著

发表评论