阿里面试:什么是读写分离?读写分离的底层如何实现?

阿里面试:什么是读写分离?读写分离的底层如何实现?什么是读写分离读写分离就是将数据库分为主从库 一个主库 Master 用于写数据 多个从库 Slaver 进行轮询读取数据的过程 主从库之间通过某种通讯机制进行数据的同步 是一种常见的数据库架构 为什么要读写分离呢

大家好,欢迎来到IT知识分享网。

阿里面试:什么是读写分离?读写分离的底层如何实现?

什么是读写分离

读写分离就是将数据库分为主从库,一个主库(Master)用于写数据,多个从库(Slaver)进行轮询读取数据的过程。

阿里面试:什么是读写分离?读写分离的底层如何实现?

主从库之间通过某种通讯机制进行数据的同步,是一种常见的数据库架构。

为什么要读写分离呢?

因为数据库的“写”,比如:10000条数据到oracle可能要3分钟,操作是比较耗时的。

但是数据库的“读”,比如:从oracle读10000条数据可能只要5秒钟,相对应写就没有这么耗时。

所以读写分离解决的是:把数据库的写入与查询,在服务器上分开来,从而可以极大的提升查询效率。

什么时候要读写分离?

数据库不一定要读写分离,但是如果程序使用数据库较多时,而更新少,查询多的情况下就可以考虑使用。

这样可以减少数据库压力,提高性能,当然数据库也有其它优化方案,比如:分库分表,或是搜索引擎等都是解决方法。

读写分离的原理

读写分离基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。

读写分离是为了将请求流量分散到不同的数据库节点上,将写入数据的请求分发到主数据库,读取数据的请求分发到从数据库,从数据可以有多台,即一主多从。

整体架构如下图:

阿里面试:什么是读写分离?读写分离的底层如何实现?

从上图可看出,有个关键技术就是主从复制,每次写入数据的时候,需要将主服务器数据复制到从服务器中,用来确保数据一致性。

下面我以MySQL的主从复制为例,如下图所示:

阿里面试:什么是读写分离?读写分离的底层如何实现?

主从复制

  1. 从服务器连接上主服务器,启动复制的时候,则会自身创建一个IO线程去像主数据库服务器拉取binlog的更新信息。
  2. 把拉过来的binlog信息写到自己服务器的一个relay log日志文件中。
  3. 从数据库服务器创建一个SQL线程,是为了将relay log的所有日志信息,进行sql回写到自己的数据库中,这样就和主库的数据一模一样了。
  4. 当主数据库有数据更新的时候,比如新插入了一条或者update了一条数据,这时候主库会将这些数据更新到binlog二进制文件中,同时,主库会创建一个binlog dump线程,这个线程将更新了的binlog信息发送到从库的IO线程,需要注意的是,这个过程是异步的,如果等着从库接受完成,是不是特别慢,且影响性能。

读写分离总结

在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的,无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。

因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力,即可以解决可用性的问题,又解决了数据库性能问题。

-end-

关于作者

陈睿|mikechen 10年+大厂架构经验,专注于互联网架构技术。

文章来源:https://mikechen.cc

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/166703.html

(0)
上一篇 2025-01-08 10:26
下一篇 2025-01-08 11:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信