读写分离
基本架构
读写分离基于数据的主从复制的架构,数据库写的操作都在主库执行,读取的操作都在从库执行
架构图如下:
从该系统架构中,可以看出: 数据库从之前的单节点变为多节点提供服务 主节点数据,同步到从节点数据 应用程序需要连接到2个数据库节点,并且在程序内部实现判断读写操作
这种架构存在2个问题: 应用程序需要连接到多个节点,对应用程序而言开发变得复杂 这个问题,可以通过中间件解决
主从之间的同步,是异步完成,也就意味着这是 弱一致性
可能会导致,数据写入主库后,应用程序读取从库获取不到数据,或者可能会丢失数据,对于数据安全性 要求比较高的应用是不合适的 该问题可以通过PXC集群解决
考虑负载均衡的架构
在应用程序和中间件之间增加proxy代理,由代理来完成负载均衡的功 能,应用程序只需要对接到proxy即可。
PXC集群架构
在前面的架构中,都是基于MySQL主从的架构,那么在主从架构中,弱一致性问题依然没有解决,如果在需要强一 致性的需求中,显然这种架构是不能应对的,比如:交易数据。 PXC提供了读写强一致性的功能,可以保证数据在任何一个节点写入的同时可以同步到其它节点,也就意味着可以存 其它的任何节点进行读取操作,无延迟。 架构如下:
混合架构
在前面的PXC架构中,虽然可以实现了事务的强一致性,但是它是通过牺牲了性能换来的一致性,如果在某些业务场 景下,如果没有强一致性的需求,那么使用PXC就不合适了。所以,在我们的系统架构中,需要将这两种方式综合起 来,这样才是一个较为完善的架构。
主从复制架构
mysql主(称master)从(称slave)复制的原理:
1、master将数据改变记录到二进制日志(binary log)中,也即是配置文件log-bin指定的文件(这些记录叫做二进制日 志事件,binary log events)
2、slave将master的binary log events拷贝到它的中继日志(relay log)
3、slave重做中继日志中的事件,将改变反映它自己的数据(数据重演)
主从复制架构存在的问题
从服务器未及时同步、主机宕机 – 主从同步之间异步未完成,数据丢失等问题,属于 弱一致性 – 解决方案:PXC集群,2PC(半同步的方式)