iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >如何理解数据库集群读写分离
  • 186
分享到

如何理解数据库集群读写分离

2024-04-02 19:04:59 186人浏览 安东尼
摘要

本篇内容介绍了“如何理解数据库集群读写分离”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!“灵魂拷问:解决数

本篇内容介绍了“如何理解数据库集群读写分离”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

“灵魂拷问:

  • 解决数据库读写瓶颈有哪些解决方案呢?

  • 这些方案解决了什么问题呢?

  • 这些方案有那些优势和劣势呢?

一个可以抵抗高并发流量系统的背后必定有一个高性能的数据库集群,就像每一个成功的男人背后总有一个强势的女人一样。数据库集群在部署模式上属于分布式,但是CAP原则却不适用于分布式数据库。

分库分表作为一种普遍的解决方案,几乎已经成为面试者吹水的利剑,却很少有人在意它所带来的副作用。其实分库分表是利用了分治的思路来解决数据库的瓶颈问题,这种方案同时解决了并发读和并发写的瓶颈,利用数据分片的方式,以堆积硬件的方式来抵抗了高流量的冲击,当然带来了某些业务需要跨库查询,跨表join等问题,不过这些问题总能以别的解决方案来应对。

数据库读写分离是解决数据库性能瓶颈的另外一个方案,和分库分表方案相比较,他们有着本质的区别。分库分表会把数据分散在多个库表中,然后利用数据分片的规则来读取和写入数据,而读写分离是利用“冗余”的方式来应对大流量的冲击。

读写分离原理

读写分离的基本原理是将数据读写分散到不同的数据库节点上,写操作一般只发生在主节点,可以接受少量延迟的读操作发生在从节点上

如何理解数据库集群读写分离

image

至于读写分离的实现方式:

  • 多台数据库服务器组件成集群,并配置主从关系

  • 主节点负责读写操作,从节点只负责读操作

  • 主节点通过数据复制机制,把数据从主节点同步到所有的从节点

  • 业务方利用程序或者中间件把写操作发送给主节点,将读操作发送给从节点

读写分离优势

一般的系统都会满足28原则,既:80%的操作是读操作,20%的操作是写操作。系统的读操作占比越大,读写分离的优势就越发明显,因为读操作可以通过简单的增加数据库从节点来解决,当然从节点的增加并不是毫无限制,当从节点到达一定数量的时候,必然会影响主从同步的效率,会降低主节点的性能,这个时候需要考虑一致性和可用性的平衡问题了。

另外一点,在很多业务中都会有一定的数据统计需求,单机数据库的时候,这些统计需求执行的sql和业务sql混合在一起,在一定程度上会影响正常业务的运行,尤其是那些数据量比较大的业务场景。在做了读写分离的策略之后,统计业务完全可以独占一个从库来进行统计,就算是比较耗时的操作,也不会影响正常的业务运行。

数据库的读写分离方案在所有读操作场景中,发挥了最大优势

读写分离劣势

数据库读写分离有一个很多系统都会遇到的问题,那就是有些业务在写操作成功之后需要实时的读取到数据,可是数据从主节点同步到从节点是有一定时间延迟的,所以很多情况下业务方在从节点并不能实时的读取到正确的数据,这种业务场景其实就是主节点也需要提供读操作的典型场景,当然如果系统架设的有缓存模块,在主节点写操作成功之后可以同步更新缓存,以达到业务需要实时数据的要求。

路由机制

读写分离在写操作上有着严格的要求,写操作必须发生在主节点上,因为读写分离是基于中心化的思想来建立的集群,中心化的思想要求主节点上的数据必须是最新且最全的。这就要求调用方必须要区分出主节点才可以。

  • 代码封装

用程序代码封装读写分离逻辑需要在代码中抽象出一个数据访问层,在这一层中实现操作分离以及数据库的连接管理等。

如何理解数据库集群读写分离

image

用代码封装读写分离逻辑在落地上并非易事,需要经过很长时间的测试才可以上生产环境。如果公司内部存在多个语言的开发团队,每个语言可能都需要实现一次,开发量还是比较大的。但是在针对不同的业务中,可以做到定制化的需求,在落地过程中还需要考虑如果主从发生切换,代码中必须要有类似选举的过程。

  • 数据库中间件

数据库中间件是指基于数据库提供的SQL协议来开发的一套和具体业务无关的系统,它的作用也是实现操作分离和数据库的连接管理等,它同样也是对读写分离的一个抽象层,但是这个抽象层是基于数据库协议的,对于业务的使用方来说,就像访问单个数据库一样方便。

如何理解数据库集群读写分离

image

同步延迟

任何分布式的系统都逃不过一致性的问题。数据库的主从架构也是一样,发生在主节点的操作需要同步给每个从库。像Mysql的主从复制是依赖于binlog的,主从复制就是将binlog中的数据从主库复制到从库上,一般这个过程都会采用异步的方式,因为在网络延迟的情况下,如果采用同步方式会大大降低主库的可用性。

在binlog的复制过程中,极低的概率会发生binlog还没有来得及刷新到磁盘就出现磁盘坏掉或者down机的情况,最终的效果就是主从数据的不一致,但是这种不可抗拒的因素,一般是可以容忍的。

还有一种现象,一般数据从主节点复制到从节点会开启单线程模式,如果主库产生新数据的速度大于同步的速度,那有可能会进一步加大主从同步的延迟时间,这个是否可以考虑开启多线程或者利用缓存模块来屏蔽同步延迟的问题呢?

主备方案

说到数据库主从的架构部署方式,还有一种类似的方案:主备。主备是利用冗余一个节点来做备用节点,但是这个节点在主节点正常运行的情况下,不会对外提供服务,做了一个真正的“备胎”。当主节点挂掉,备用节点会代替主节点的位置,并成为主节点开始对外提供服务。

主备方式可以利用简单的类似keepalive机制来实现自动化,理论上不需要进行选举操作。利用主备方式来实现数据库高可用有哪些特点呢?

  • 可用性是利用keepalive机制来保证的,这个切换过程对业务是透明的,业务方无需修改任何代码

  • 读写都在主库上进行,很容易产生单点的瓶颈问题,由于没有其他节点的数据同步过程,所以数据可以保证一致性

  • 主备架构中,备库只是单纯的备份,整体的资源利用率50%,因为备库一直在被闲置

  • 扩展性比较差,无法做到横向扩展,但是可以利用分库分表来解决扩展性问题

一主一备或者一主多备方案在资源的利用率上很低,所以后来出现了多主的架构,多主架构是指,会存在多个主库,每个主库都提供读写功能,这就涉及到多个主库之间数据同步的方式,虽然性能上要比一主要高,但是数据一致性上很难搞。所以很多互联网公司并不推荐使用这种方案。

“如何理解数据库集群读写分离”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: 如何理解数据库集群读写分离

本文链接: https://www.lsjlt.com/news/62037.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解数据库集群读写分离
    本篇内容介绍了“如何理解数据库集群读写分离”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!“灵魂拷问:解决数...
    99+
    2024-04-02
  • 如何理解数据库读写分离架构?
    如何理解数据库读写分离架构?,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。RD:数据量太大,数据库扛不住了,帮忙申请一个从库,读写分离。D...
    99+
    2024-04-02
  • Mycat如何实现Mysql集群读写分离
    这篇文章给大家分享的是有关Mycat如何实现Mysql集群读写分离的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。MySQL 读写分离的概述MySQL 作为目前世界上使用最广泛的免...
    99+
    2024-04-02
  • DM7搭建读写分离集群
    读写分离集群 环境说明 下列机器事先都安装了DM软件,安装路径为/dm7,执行程序保存在/dm7/bin目录中,数据存放路径为/dm7/data 机器名    &nb...
    99+
    2024-04-02
  • Redis如何实现数据库读写分离详解
    前言 Redis是一种NoSQL的文档数据库,通过key-value的结构存储在内存中,Redis读的速度是110000次/s,写的速度是81000次/s,性能很高,使用范围也很广。Redis是一个key-...
    99+
    2024-04-02
  • MySQL数据库之读写分离
    一、概述:    MySQL数据库主从结构配置以后,正常情况下数据库的所有读写操作全部都在主数据库上面,从数据库仅仅作为数据备份使用,显然无法有效的使用服务器资源,那...
    99+
    2024-04-02
  • MySQL-数据库读写分离(中)
    ♥️作者:小刘在C站 ♥️个人主页: 小刘主页  ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏:云计算技术 ♥️小刘私信可以随便问,只要会...
    99+
    2023-08-31
    数据库 mysql sql
  • 怎么做数据库读写分离
    这篇文章主要讲解了“怎么做数据库读写分离”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么做数据库读写分离”吧!实现方式对于读写分离的使用,主要分为两种方式...
    99+
    2024-04-02
  • 分析型数据仓库中如何实现读写分离
    这篇文章主要为大家展示了“分析型数据仓库中如何实现读写分离”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“分析型数据仓库中如何实现读写分离”这篇文章吧。和以 My...
    99+
    2024-04-02
  • 如何利用mycat实现mysql数据库读写分离
    这篇文章主要介绍了如何利用mycat实现mysql数据库读写分离,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是MyCAT一个彻底开源的...
    99+
    2024-04-02
  • Mycat中间件实现Percona Cluster集群读写分离
    Mycat实现读写分离架构图: Mycat主从自动切换架构图: Mycat下载地址:http://dl.mycat.io/1.6.7.3/20190828135747/Mycat-server...
    99+
    2024-04-02
  • 数据库读写分离的坑有哪些
    这篇文章主要讲解了“数据库读写分离的坑有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库读写分离的坑有哪些”吧!前言事情是这样的,刚入职的时候接到了...
    99+
    2024-04-02
  • Linux下如何使用MaxScale实现数据库读写分离
    这篇文章主要介绍Linux下如何使用MaxScale实现数据库读写分离,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以...
    99+
    2023-06-27
  • 数据库的读写分离能解决什么问题
    数据库的读写分离能解决什么问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。有一些技术同学可能对于“读写分离”了解不多,认为数...
    99+
    2024-04-02
  • mysql如何读写分离
    mysql 读写分离是一种数据库架构,将数据库分为主库和从库,主库负责写入操作,从库负责读操作,以降低主库负载和提高并发读能力。实现 mysql 读写分离需要:搭建主从复制环境、修改应用...
    99+
    2024-04-14
    mysql
  • Spring如何实现多数据源读写分离
    这篇文章主要介绍“Spring如何实现多数据源读写分离”,在日常操作中,相信很多人在Spring如何实现多数据源读写分离问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spri...
    99+
    2024-04-02
  • MySQL数据库主从复制与读写分离
    目录一.主从复制主从复制三线程主从复制的过程:主从复制的策略:主从复制高延迟二.读写分离读写分离概念读写分离原因与场景总结一.主从复制        主从复制:在实际的生产中,为了解...
    99+
    2024-04-02
  • redis如何读写分离
    redis 通过主从复制和客户端配置实现读写分离。优点包括提高读吞吐量、保证写入一致性和提高可用性。需要注意数据一致性、配置复杂性和适用于高读写负载场景。 Redis 如何实现读写分离...
    99+
    2024-04-19
    redis
  • 怎么理解Mycat读写分离
    这篇文章主要介绍“怎么理解Mycat读写分离”,在日常操作中,相信很多人在怎么理解Mycat读写分离问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解Mycat读写分离”...
    99+
    2024-04-02
  • redis集群读写不一致如何解决
    要解决Redis集群读写不一致的问题,可以考虑以下几种方法:1. 一致性哈希算法(Consistent Hashing):通过将键值...
    99+
    2023-09-06
    redis
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作