文章目录
1、读写分离
读写分离的基本原理是将数据库读写操作分散到不同的节点上。
读写分离的基本实现:
- 数据库服务器搭建主从集群,一主一从、一主多从都可以。
- 数据库主机负责读写操作,从机只负责读操作。
- 数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据。
- 业务服务器将写操作发给数据库主机,将读操作发给数据库从机。
2、读写分离的分配实现
将读写操作区分开来,然后访问不同的数据库服务器,一般有两种方式:程序代码封装 和 中间件封装。
● 程序代码封装
程序代码封装指在代码中抽象一个数据访问层(所以有的文章也称这种方式为 “中间层封装” ),实现读写操作分离和数据库服务器连接的管理。例如,基于 Hibernate 进行简单封装,就可以实现读写分离:
目前开源的实现方案中,淘宝的 TDDL (Taobao Distributed Data Layer, 外号:头都大了)是比较有名的。
● 中间件封装
中间件封装指的是独立一套系统出来,实现读写操作分离和数据库服务器连接的管理。中间件对业务服务器提供 SQL 兼容的协议,业务服务器无须自己进行读写分离。
对于业务服务器来说,访问中间件和访问数据库没有区别,事实上在业务服务器看来,中间件就是一个数据库服务器。
3、主从复制
- master 数据写入,更新 binlog
- master 创建一个 dump 线程向 slave 推送 binlog
- slave 连接到 master 的时候,会创建一个IO线程接收binlog,并记录到 relay log 中继日志中
- slave 再开启一个sql线程读取 relay log 事件并在 slave 执行,完成同步
- slave 记录自己的 binglog
4、主从同步延迟
● 原因
一个服务器开放 N个链接给客户端来连接的,这样有会有大并发的更新操作, 但是从服务器的里面