mysql的读写分离和主从复制的区别在哪里

mysql的读写分离和主从复制的区别在哪里,第1张

读写分离的意思是,写入的时候向 a 服务器写入,而读出的时候从 b c d 甚至更多的服务器读出;这样的架构适合于读多写少的应用,最典型的就是火车购票系统,一般我们买票的时候要先查询好多次,包括车次啊,时间啊,这都是读操作,而最后可能只买一张车票,这是写操作;做了读写分离之后,可以将资源分配到最合理的地方,不会使某些资源闲置,而另一些资源不够用;

但是读写分离必然引发主从复制,试想一共有 10 张票,买了 1 张票,读的时候如果还是读到 10 张余票就不对了,因此需要主从复制,再读的时候,就只能读到 9 张余票了;

之所以说读写分离能够提高性能,是因为读写分离采用这样的机制:

假设我们现在有数据库服务器1,对外提供一切操作,还有数据库服务器2,仅仅保存数据库服务器1的数据备份,定时同步,以便服务器1意外崩溃后能够尽量的弥补损失。

但是服务器2原本能够提供增删改查服务,这样以来服务器2的资源就产生了极大的浪费,因此我们希望服务器2也做一些事情,而不是仅仅作为一个备份。

显然增删改都是不能够交给服务器2去完成的,因为如果这样做就失去了服务器1的意义,所以服务器2仅仅提供查询操作,增删改都留给服务器1去完成,这就是所谓的读写分离。

读写分离机制使得两个服务器分担原本属于一个服务器的压力,因此性能有所提高,同时有数据备份的存在,其稳定性高于单服务器。

读写分离主要目的是提高系统吞吐量。某些网站同一时间有大量的读操作和较少的写操作。同时,读操作对数据的实时性要求并没有那么高。在此前提下,可以这么设计解决方案。

所以你问题里“数据仍然需要同步”这个理解是不对的。事实上,正是由于允许用户读到几秒钟甚至几分钟前的数据,才可以使用读写分离的。

数据库里面concurrency control是最复杂的组件之一。因为transaction是原子性的,但要保证原子性就得上锁,要不然读写操作之间就有inconsistency。为了减少锁的代价,数据库往往会提供多种consistency level供选择。

而如果读写分离了,那么只读操作的那些服务器就完全不需要考虑锁的问题了,完全可以选哪个最低代价的consistency level。只有执行写操作的服务器需要用强的consistency level。虽然读服务器也需要隔一段时间更新一下,但只有更新时才需要加锁。

所以这种方案其实就是以数据的时效性,换取了读操作的吞吐率。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/499160.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-15
下一篇2023-06-15

发表评论

登录后才能评论

评论列表(0条)

    保存