视频 -AliSQL 和读写分离基本原理(二)| 学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 快速学习视频 -AliSQL 和读写分离基本原理。

开发者学堂课程【企业运维训练营之数据库原理与实践课程 :视频 -AliSQL 和读写分离基本原理(二)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1201/detail/18284


视频 -AliSQL 和读写分离基本原理


三、读写分离

1、读写分离简介

在少写多读的应用场景下,如果原来的数据库没有设置读写分离,只是一个主实例,在少写多读的应用场景下大量的读操作会造成巨大的读取压力,进而影响到业务。用读写分离这个功能可以是查询的这些请求自动的转换到只读实例上,写请求转化到主实例上,各司其职,实现读写分离的自动分流来减轻主实例的压力。通过这样的设置,会给数据库带来非常大的优势,读写分离会提供统一的读写分离的地址变用,如果不开通读写分离的时候,假如需要配置读和写的操作,会需要在应用程序里面分别配置一个主实例,和每一个只读实例连接地址,这样维护的地址会非常繁杂,容易出错。RDS 读写分离的功能第一个就是会提供一个代理地址,连接这个代理地址之后可对主实例和只读实例进行读写操作,请求是自动转发的,写请求转发到主实例上,读请求转发到只读实例上,降低了维护成本。第二个是原生链路支持可以提高数据库性能,减少维护成本。第三个是可以设置只读实例的权重和阈值,可以符合在多场景下进行使用。第四个可以进行实例健康检查,提升数据库性能的可用性。在设置读写分离的时候,为主持与创建只读实例的时候,建议客户至少创建两个只读实例,避免只读实例的单点故障。

2、只读实例

image.png

(1)高可用实例一般有一个主实例和一个备实例,都是在同一个可用区,同一个 region 下。备实例是针对高可用性这个范畴来讲,当主实例经过一些意外的因素,例如宕机或者是实例卡住,必须要进行 aj 的切换,这个时候备实例会立马切换为主实例,继续为客户提供服务。只读实例可以跟主实例在不同的可用区,只读实例主要承担一些只读请求,业务端可能发来一些 select 查询的请求,发到只读实例上。只读实例也有高可用的架构,也可以有只读实例的备实例,这是只读实例的作用。灾备实例一般要求高可靠或高可用性的客户场景可能在其他地域,比如说原来的主实例和备实例在北京 region,希望在极端的情况下北京 region 的所有数据库无法提供服务的时候,备 region 可以继续提供服务,灾备实例往往建在备 region 里面,灾备实例也可以有自身的主实例和备实例。

(2)在对数据库有少量写请求,但有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压力,可以创建一个或多个只读实例,利用只读实例满足大量的数据库读取需求,增加应用的吞吐量。

只读实例、备实例和灾备实例三者之间的区别:

•只读实例和主备实例在同一地域,可以在不同可用区;备实例和主实例在同一个地域;灾备实例和主备实例在不同地域。

•只读实例可以根据需要创建最多10个;备实例数量是固定的1~2个,高可用版1个,三节点企业版(原金融版)2个;灾备实例是不同地域的一主一备。

•只读实例创建并设置读权重后就会持续提供服务;备实例和灾备实例在主实例正常运行时都不会提供服务。

3、数据库代理

RDS MySQL 数据库代理又分独享代理和共享代理,是位于数据库服务端和应用服务端之间的网络代理服务,用于代理应用服务端访问数据库时的所有请求,具有高可用、高性能、可运维、简单易用等特点。独享代理还提供自动读写分离、事务拆分、连接池等高级功能。

image.png

数据库代理适用的有以下几个场景,第一个是事物内有大量请求导致主实例负载过高的应用场景,这时候可能需要把一些只读的请求拆分出来;第二个是连接处过多导致主实例负载过高的场景;第三个是短连接为主的业务;第四个是纯只读或隔离需求业务。

(1)数据库代理—事务拆分

•默认情况下,RDS数据库独享代理会将事务内的所有请求都发送到主实例以保障事务的正确性,但是某些框架会将所有请求封装到非自动提交的事务中(通过 set autocommit=0;关闭自动提交),导致主实例负载过大,可以使用事物拆分的功能将事物里面只读的请求发送到只读实例上,来提升性能。但是也有一些要求,第一点显示事物在存储过程或事物块里面用 begin 或 start transaction 标明这是一个显示的事物,这时候是暂时不支持拆分的;第二点是可能某些业务对全局一致性有要求,把事物拆分后将不满足全局一致性,这时候事物拆分是受到限制无法使用的。

•事务拆分功能默认开启,在默认的 Read Committed 隔离级别下,当 RDS 关闭事务自动提交后,仅会在发生写操作时才正式开启事务,正式开启事务前的读请求会通过负载均衡模块分流至只读实例。

image.png

(2)数据库代理—设置连接池

事务级连接池:

事务级连接池主要用于减少直接连接到数据库的业务连接数,以及减少短连接场景下频繁建连带来的负载。开启事物级连接池以后客户端与独享代理之间可能会存在上千个连接,但是代理与数据库后端可能存在几十或几百的连接,主要是客户端与连接池的连接比较多。独享代理本身没有最大连接数的限制,连接数的限制主要是在后端数据库的节点规格决定的,没有开启事物级连接池的时候,每条由客户端发起的连接都会在后端主节点和所有只读节点各创建一个对应的连接。当开启事务级连接池的时候,客户端发送请求的时候会先与独享代理进行建联,连接会去判断是否有可用的连接,如果不存在的话,代理会与数据库会创建一个新的连接,如果存在的话直接从连接池里面拿走并使用,这样会减少频繁建联的过程。

image.png

(3)数据库代理—设置连接池

会话级连接池:

会话级连接池适用于短连接场景。会话级连接池主要用于减少短连接业务频繁建立新连接带来的实例负载。当某客户端连接断开时,系统会判断当前连接是否为闲置连接,如果是闲置连接,系统会将该连接放到代理的连接池中并保留一小段时间。当客户端重新发起新连接时,若连接池中有可用的连接(命中的条件包括 user、clientip 和 dbname等),则可直接使用,从而减少与数据库的建连开销。如果连接池内没有可用的闲置连接,则走正常连接流程,与数据库重新建立新连接。

image.png

会话级连接池不能减少数据库的并发连接处,而是通过降低应用和数据库建立的连接速率来减少 MySQL 的开销,更好地处理业务请求,但是连接池闲置的连接会短暂的占用客户端的连接数,而且会话级连接池不能够解决由于存在大量 MySQL 导致的堆积的问题,这种情况下需要客户首先去解决 MySQL 的问题。基于以上数据库连接池的不同的方式,选择连接池第一点,事物级连接池的应用场景是业务的连接数比较多,可能连接数有上万或者更多,或者使用 Seventies 的服务,连接数会随着业务端服务器的扩容而线性增加,建议使用事物级连接池。如何选择会话级连接池,业务上如果是纯短连接或者短连接占比比较大,业务场景可以考虑使用会话级连接池。还有一种情况是业务的使用多为长连接,且连接数比较少,或者业务本身已经具备较好的连接池,就不建议再使用 RDS 的连接池。

(4)数据库代理—使用 Hint 语法

在执行 SQL 的方式可以在前面加上 Hint 的操作,让 SQL 语句发往不同的数据库节点。

image.png

限制:Hint 语法仅支持读写分离地址,不支持只读地址

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
3月前
|
SQL 算法 Java
(二十六)MySQL分库篇:Sharding-Sphere分库分表框架的保姆级教学!
前面《MySQL主从原理篇》、《MySQL主从实践篇》两章中聊明白了MySQL主备读写分离、多主多写热备等方案,但如果这些高可用架构依旧无法满足业务规模,或业务增长的需要,此时就需要考虑选用分库分表架构。
2490 4
|
3月前
|
SQL canal 关系型数据库
(二十四)全解MySQL之主从篇:死磕主从复制中数据同步原理与优化
兜兜转转,经过《全解MySQL专栏》前面二十多篇的内容讲解后,基本对MySQL单机模式下的各方面进阶知识做了详细阐述,同时在前面的《分库分表概念篇》、《分库分表隐患篇》两章中也首次提到了数据库的一些高可用方案,但前两章大多属于方法论,并未涵盖真正的实操过程。接下来的内容,会以目前这章作为分割点,开启MySQL高可用方案的落地实践分享的新章程!
1616 1
|
存储 SQL 运维
视频 -AliSQL 和读写分离基本原理(三)| 学习笔记
快速学习视频 -AliSQL 和读写分离基本原理。
视频 -AliSQL 和读写分离基本原理(三)| 学习笔记
|
SQL 存储 缓存
视频 -AliSQL 和读写分离基本原理(一)| 学习笔记
快速学习视频 -AliSQL 和读写分离基本原理。
视频 -AliSQL 和读写分离基本原理(一)| 学习笔记
|
存储 SQL 缓存
PostgreSQL 复制原理及高可用集群(一)|学习笔记
快速学习 PostgreSQL 复制原理及高可用集群(一)
408 0
PostgreSQL 复制原理及高可用集群(一)|学习笔记
|
Oracle 关系型数据库 数据库
PostgreSQL 复制原理及高可用集群(二)|学习笔记
快速学习 PostgreSQL 复制原理及高可用集群(二)
244 0
PostgreSQL 复制原理及高可用集群(二)|学习笔记
|
SQL 监控 关系型数据库
ShardingSphere -读写分离(概念)| 学习笔记
快速学习ShardingSphere -读写分离(概念)。
ShardingSphere -读写分离(概念)|  学习笔记
|
SQL 运维 NoSQL
复制集使用及原理介绍(二)|学习笔记
快速学习复制集使用及原理介绍
244 0
复制集使用及原理介绍(二)|学习笔记
|
运维 NoSQL 数据可视化
复制集使用及原理介绍(一)|学习笔记
快速学习复制集使用及原理介绍
150 0
复制集使用及原理介绍(一)|学习笔记