数据库读写分离架构详解
RD:数据量太大,数据库扛不住了,帮忙申请一个从库,读写分离。
DBA:数据量多少?
RD:5000w左右。
DBA:读写吞吐量呢?
RD:读QPS约200,写QPS约30左右。
额,数据库读写分离虽然不难,但并不是所有的“数据库扛不住”的场景,都应该用读写分离。今天花1分钟简单介绍下这个场景。
什么是数据库读写分离?
一主多从,读写分离,主动同步,是一种常见的数据库架构,一般来说:
主库,提供数据库写服务
从库,提供数据库读服务
主从之间,通过某种机制同步数据,例如mysql的binlog
一个组从同步集群通常称为一个“分组”。
分组架构究竟解决什么问题?
大部分互联网业务读多写少,数据库的读往往最先成为性能瓶颈,如果希望:
线性提升数据库读性能
通过消除读写锁冲突提升数据库写性能
此时可以使用分组架构。
一句话,分组主要解决“数据库读性能瓶颈”问题,在数据库扛不住读的时候,通常读写分离,通过增加从库线性提升系统读性能。
什么是数据库水平切分?
水平切分,也是一种常见的数据库架构,一般来说:
每个数据库之间没有数据重合,没有类似binlog同步的关联
所有数据并集,组成全部数据
会用算法,来完成数据分割,例如“取模”
一个水平切分集群中的每一个数据库,通常称为一个“分片”。
水平切分架构究竟解决什么问题?
大部分互联网业务数据量很大,单库容量容易成为瓶颈,如果希望:
线性降低单库数据容量
线性提升数据库写性能
此时可以使用水平切分架构。
一句话总结,水平切分主要解决“数据库数据量大”问题,在数据库容量扛不住的时候,通常水平切分。
我为什么不喜欢读写分离?
对于互联网大数据量,高并发量,高可用要求高,一致性要求高,前端面向用户的业务场景,如果数据库读写分离:
数据库连接池需要区分:读连接池,写连接池
如果要保证读高可用,读连接池要实现故障自动转移
有潜在的主库从库一致性问题
如果面临的是“读性能瓶颈”问题,增加缓存可能来得更直接,更容易一点
关于成本,从库的成本比缓存高不少
对于云上的架构,以阿里云为例,主库提供高可用服务,从库不提供高可用服务
所以,上述业务场景下,建议使用缓存架构来加强系统读性能,替代数据库主从分离架构。
当然,使用缓存架构的潜在问题:如果缓存挂了,流量全部压到数据库上,数据库会雪崩。因此,对缓存,一般也会做水平切分,确保不会同一时间全挂。
总结
读写分离,解决“数据库读性能瓶颈”问题
水平切分,解决“数据库数据量大”问题
对于互联网大数据量,高并发量,高可用要求高,一致性要求高,前端面向用户的业务场景,微服务缓存架构,可能比数据库读写分离架构更合适
数据库读写分离架构详解相关推荐
- 读写分离 mysql_详解MySQL实现主从复制过程及mycat读写分离步骤
一.什么是主从复制 将主数据库中的DDL和DML操作通过二进制日志(BINLOG)传输到从数据库上,然后将这些日志重新执行(重做):从而使得从数据库的数据与主数据库保持一致. 二.主从复制的作用 1. ...
- mysql数据库字段变形_详解如何利用amoeba(变形虫)实现mysql数据库读写分离
摘要:这篇MySQL栏目下的"详解如何利用amoeba(变形虫)实现mysql数据库读写分离",介绍的技术点是"MySQL数据库.数据库读写分离.amoeba.MySQL ...
- Python开发之:Django基于Docker实现Mysql数据库读写分离、集群、主从同步详解 | 原力计划...
作者 | Pythonicc 责编 | 王晓曼 出品 | CSDN博客 简介 1.什么是数据库读写分离 读写分离,基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELET ...
- ceph集群和数据库到底是储存数据_Python开发之:Django基于Docker实现Mysql数据库读写分离、集群、主从同步详解 | 原力计划...
作者 | Pythonicc责编 | 王晓曼出品 | CSDN博客简介1.什么是数据库读写分离读写分离,基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELETE),而从 ...
- 一文详解高性能数据库:读写分离
虽然近十年来各种存储技术飞速发展,但关系数据库由于其 ACID 的特性和功能强大的 SQL 查询,目前还是各种业务系统中关键和核心的存储系统,很多场景下高性能的设计最核心的部分就是关系数据库的设计. ...
- 史上最强大型分布式架构详解:高并发+数据库+缓存+分布式+微服务+秒杀
分布式架构设计是成长为架构师的必备技能,涵盖的内容很广,今天一次打包分享,文末有:最全分布式架构设计资料获取方式~ 负载均衡 负载均衡的原理和分类 负载均衡架构和应用场景 分布式缓存 常见分布式缓存比 ...
- 基于 EntityFramework 的数据库主从读写分离架构(1) - 原理概述和基本功能实现...
回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目录: src\ NDF.Data.EntityFramework\Maste ...
- 基于 EntityFramework 的数据库主从读写分离架构(2)- 改进配置和添加事务支持...
回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目录: src\ NDF.Data.EntityFramework\Maste ...
- java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...
原标题:笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解 Java开发网站架构演变过程,到目前为止,大致分为5个阶段,分别为单体架构.集群架构.分布式架构.SOA架构和微服务架构.下 ...
最新文章
- MySQL数据库锁构建_MySQL数据库InnoDB存储引擎中的锁机制
- javacript实现不被浏览器拦截打开新窗口
- ai入门视频,亲测有效
- Html5 Game - SpaceWar
- 上传到GitHub或者码云中README文件无法显示图片
- div动态消失的动画效果
- python计算函数转公式(转Latex公式)
- mysql 查看当前使用的配置文件my.cnf的方法
- OCJP考试习题(1z0-808)(一)
- java api1.8中文版(由谷歌,百度,有道,必应翻译)
- Java 常见异常以及处理方式
- Windows2003 企业版支持红外
- 7月上热搜50次!周杰伦新专辑1天1.5亿!歌手新歌爆红的营销路径
- 投射电子显微镜(TEM)
- 2020美容师(初级)操作证考试及美容师(初级)作业模拟考试
- android判断字符中是否包含表情符
- Codeforces Round #784 (Div. 4)#蒻枸题解
- 网络红人斌少最新资料
- Netron 可视化
- Vue.js基础(极简、自用)