【从 0 开始学架构】学习笔记 Day2 数据库集群读写分离

一、高性能数据库集群的两种方式

高性能数据集群通常采用以下两种方式:

  • 1)读写分离
  • 2)分库分表

二、读写分离原理

1)定义

将访问压力分散到集群中的多台机器上,但是,存储压力并没有改变

2)基本实现

数据库服务器搭建主从集群,一主一从,或者一主多从
数据库主机负责读写操作,从机只负责读操作
数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有相同的业务数据
业务服务器将写操作发给数据库主机,将读操作发给数据库从机

基本实现需要注意两个细节点:

  • 主从复制延迟
  • 分配机制

3)主从集群与主备集群的区别

从机,需要提供数据访问功能

备机,仅仅提供数据备份功能,不提供访问功能

4)什么情况下该采取读写分离

当系统性能出现问题,首先应该进行优化,如优化慢查询、调整不合理的业务逻辑、引入缓存等,只有确定系统没有优化空间之后,才考虑读写分离或者集群

三、复制延时

1)定义

主机将数据复制到从机时,发生了延时问题,导致业务服务器从从机上读取的数据与主机不一致

2)解决方法

  • 写操作后的读操作指定发给数据库主服务器

该方式与业务强绑定,对业务的侵入和影响较大

  • 读从机失败后再读一次主机

二次读取和业务无绑定,只需要对底层数据库访问的 API 进行封装即可,实现代价较小,不足之处在于如果有很多二次读取,将大大增加主机的读操作压力

  • 关键业务读写操作全部指向主机,非关键业务采用读写分离

从字面就可以理解,无须过多赘述

3)复制延时无法避免

从解决方法可知,在面对主从复制延时问题上,这是没有办法避免的事情,因为网络等各种因素

四、分配机制

1)程序代码封装

在代码中抽象一个数据访问层,实现读写操作分离和数据库服务器连接的管理

开源实现方案,淘宝TDDL(Taobao Distributed Data Layer,外号: 头都大了),一个通用数据访问层,所有功能封装在 jar 包中提供给业务代码调用。其基本原理是一个基于集中式配置的 jdbc datasource 实现,具有主备、读写分离、动态数据库配置等功能

2)中间件封装

中间件封装指的是独立一套系统出来,实现读写操作分离和数据库服务器连接的管理

开源数据库中间件,MySql Proxy、MySql Router、奇虎 360 数据库中间件 Atlas

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值