但是读写分离必然引发主从复制,试想一共有 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。虽然读服务器也需要隔一段时间更新一下,但只有更新时才需要加锁。
所以这种方案其实就是以数据的时效性,换取了读操作的吞吐率。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)