阿里P8架构师带你玩转数据库 “读写分离”
想用数据库“读写分离” 请先明白“读写分离”解决什么问题
有一些技术同学可能对于“读写分离”了解不多,认为数据库的负载问题都可以使用“读写分离”来解决。
这其实是一个非常大的误区,我们要用“读写分离”,首先应该明白“读写分离”是用来解决什么样的问题的,而不是仅仅会用这个技术。
什么是读写分离?
其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构。
一个组从同步集群,通常被称为是一个“分组”。
数据库分组架构解决什么问题?
大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用“分组架构”(读写分离架构)。
用一句话概括,读写分离是用来解决数据库的读性能瓶颈的。
但是,不是任何读性能瓶颈都需要使用读写分离,我们还可以有其他解决方案。
在互联网的应用场景中,常常数据量大、并发量高、高可用要求高、一致性要求高,如果使用“读写分离”,就需要注意这些问题:
数据库连接池要进行区分,哪些是读连接池,哪个是写连接池,研发的难度会增加;
为了保证高可用,读连接池要能够实现故障自动转移;
主从的一致性问题需要考虑。
在这么多的问题需要考虑的情况下,如果我们仅仅是为了解决“数据库读的瓶颈问题”,为什么不选择使用缓存呢?
为什么用缓存
缓存,也是互联网中常常使用到的一种架构方式,同“读写分离”不同,读写分离是通过多个读库,分摊了数据库读的压力,而存储则是通过缓存的使用,减少了数据库读的压力。他们没有谁替代谁的说法,但是,如果在缓存的读写分离进行二选一时,还是应该首先考虑缓存。
为什么呢?
缓存的使用成本要比从库少非常多;
缓存的开发比较容易,大部分的读操作都可以先去缓存,找不到的再渗透到数据库。
当然,如果我们已经运用了缓存,但是读依旧还是瓶颈时,就可以选择“读写分离”架构了。简单来说,我们可以将读写分离看做是缓存都解决不了时的一种解决方案。
当然,缓存也不是没有缺点的
对于缓存,我们必须要考虑的就是高可用,不然,如果缓存一旦挂了,所有的流量都同时聚集到了数据库上,那么数据库是肯定会挂掉的。
对于常见的数据库瓶颈是什么呢?
其实是数据容量的瓶颈。例如订单表,数据量只增不减,历史数据又必须要留存,非常容易成为性能的瓶颈,而要解决这样的数据库瓶颈问题,“读写分离”和缓存往往都不合适,最适合的是什么呢?
数据库水平切分
什么是数据库水平切分?
数据库水平切分,也是一种常见的数据库架构,是一种通过算法,将数据库进行分割的架构。一个水平切分集群中的每个数据库,通常称为一个“分片”。每一个分片中的数据没有重合,所有分片中的数据并集组成全部数据。
水平切分架构解决什么问题呢?
大部分的互联网业务,数据量都非常大,单库容量最容易成为瓶颈,当单库的容量成为了瓶颈,我们希望提高数据库的写性能,降低单库容量的话,就可以采用水平切分了。
而有少部分程序员,会没有分析数据库的性能瓶颈是什么,就贸贸然的使用“读写分离”,殊不知“水平切分”才是正道。
欢迎工作一到五年的Java工程师朋友们加入Java填坑之路:860113481
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
基于超大规模集群的本地存储系统优化
京东大数据平台部一直致力于优化基础架构,为用户提供稳定、高可靠、高性能、高利用率的超大规模Hadoop集群。本文与大家分享大规模分布式存储集群的基石——本地存储系统优化的点点滴滴。 在介绍主要内容前,先熟悉一下高可用Hadoop分布式文件系统HDFS的核心架构,如下图: HDFS将大文件切分为多个数据块( Block )存储到多个 DataNode (以下简称DN)。 NameNode (以下简称NN)主要用于储存分布式文件系统的元数据,元数据包括文件系统目录树、文件与数据块的对应关系、数据块与DN 的对应关系。NN除了存储元数据外,还需要管理大量的DN,同时要对外提供元数据的服务接口。 DN 是用于存储数据块的节点,HDFS上的所有文件的数据都存储在DN上。 HDFS上文件的访问文件数据的流程,简单来说,是 Client 先从NN获取到文件数据所在DN位置,然后与DN通信访问实际的数据。 为了保证NN的高可用,衍生出Active NN和Standby NN,依托 ZooKeeper (以下简称ZK)实现NN的状态切换。ActiveNN对外提供服务,Standby NN在Active ...
- 下一篇
月薪80k阿里架构师漫谈他是如何从一名小码农走到架构师的
01 刚当程序员时,我是属于那种勤勤恳恳类型的员工,工作态度用认真来形容不为过,每天我几乎是团队里最早到公司,又最晚下班的一个。而组员张工一般情况下都是准时上下班的,即使项目进度比较紧急,他也很少加班,除非是有特殊情况,他才加班。 要是按勤奋程度和工作时间长短来衡量,我想我比张工积极多了。按理说,我这么积极,工作量应该比张工多才对,其实不然,领导安排给我的工作任务和张工的任务相比,我比他还要少。 张工之前是做java服务端的,后来自学了Android移动开发,再后来又自学了iOS移动开发,那时他就是一位多能手,项目安排他做什么他就能做什么。 从张工提交的代码看,他的代码不仅规范而且很优雅,大的不说,就他能对一些基本控件进行封装处理,还做了拓展,方便给其他开发人员调用,就已经很让我敬佩不已了。 而我所谓的工作时间长,其实大多时间是在重复地造轮子,一个相同的功能重复做,不仅没有做封装处理,导致冗余代码还多,有时候刚好碰到需求改动,我就把自己累得够呛,现在想想,真的活该啊。 02 类似这样的情况不知你身边有没有: 读书的时候,有的同学上课时眼睛睁得特别大,还做笔记,一节课下来,笔记本里密密麻...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)