如何在 MySQL 中实现读写分离?
如何在 MySQL 中实现读写分离?
回答重点
做法一:代码封装
讲白了就是代码层面抽出一个中间层,由中间层来实现读写分离和数据库连接。
利用个代理类,对外暴露正常的读写接口,里面封装了逻辑,将读操作指向从库的数据源,写操作指向主库的数据源。
- 优点:简单,并且可以根据业务定制化变化,随心所欲。
- 缺点:如果数据库宕机了,发生主从切换了之后,就得修改配置重启。如果系统是多语言的话,需要为每个语言都实现一个中间层代码,重复开发。
做法二:使用中间件
中间件一般而言是独立部署的系统,客户端与这个中间件的交互是通过 SQL 协议的。
所以在客户端看来连接的就是一个数据库,通过 SQL 协议交互也可以屏蔽多语言的差异。
缺点就是整体架构多了一个系统需要维护,并且可能成为性能瓶颈,毕竟交互都需要经过它中转。
常见的开源数据库中间件有:官方的 MySQL-Proxy、360 的 Atlas、ShardingSphere、Mycat 等。
扩展知识
什么是读写分离
1)读写分离就是读操作和写操作从以前的一台服务器上剥离开来,将主库压力分担一些到从库。本质上是因为访问量太大,主库的压力过大,单机数据库无法支撑并发读写。然后一般而言读的次数远高于写,因此将读操作分发到从库上,这就是常见的读写分离。
2)读写分离还有个操作就是主库不建查询的索引,从库建查询的索引。因为索引是需要维护的,比如你插入一条数据,不仅要在聚簇索引上面插入,对应的二级索引也得插入,修改也是一样的。所以将读操作分到从库了之后,可以在主库把查询要用的索引删了,减少写操作对主库的影响。
Comments