企业运维训练营之数据库原理与实践— AliSQL和读写分离基本原理—读写分离

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 企业运维训练营之数据库原理与实践— AliSQL和读写分离基本原理—读写分离

二、 读写分离

 

如果数据库没有设置读写分离,在少写多读的应用场景下,大量读操作会对主实例造成巨大的读取压力,进而影响业务。因此,启用读写分离功能,可以使查询请求自动转发到只读实例上,写请求转发到主实例上,各司其职,实现了读写分离、自动分流,减轻主实例的压力,能够为数据库带来非常大的优势。

 

读写分离提供了统一的读写分离地址,便于维护。如果不开通读写分离,配置读与写操作时需要在应用程序里分别配置主实例与每个只读实例的连接地址,维护地址的工作非常繁杂,容易出错。RDS读写分离功能能够提供代理地址,连接代理地址以后,可对主实例与只读实例进行读写操作。请求自动转发,写请求转发到主实例,读请求转发到只读实例,降低了维护成本。

 

原生链路支持可以提高数据库性能,减少维护成本。

 

可以设置只读实例的权重与阈值,可在多场景下使用。

 

可以进行实例健康检查,提升数据库性能的可用性。

 

在设置读写分离为主实例创建只读实例时,建议客户至少创建两个只读实例,可以避免只读实例单点故障。

 

 image.png

 

高可用实例有主实例与备实例,在同一可用区、同一region下。当主实例意外宕机或卡住时会进行 HA 切换,备实例会立即切换为主实例继续为客户提供业务。

 

只读实例可以与主实例在同一地域,可以在不同可用区。只读实例主要承担只读请求,只读实例也有高可用架构,也可以有只读实例的备实例。

 

灾备实例一般用于要求高可靠或高可用性的客户场景。比如客户希望在极端情况下,主region所有数据库都无法提供服务时,备region可以继续提供服务,灾备实例往往建在备region。

 image.png


 

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

 

数据库代理适用于以下几类场景:

 

事务内有大量请求导致主实例负载过高。此时可能需要将只读请求进行拆分。

接数过多导致主实例负载过高。

短连接为主的业务。

纯只读或有隔离需求的业务。

 


 image.png

数据库代理支持事务拆分,默认情况下,RDS数据库独享代理会将事务内所有请求发送到主实例,保证事务的正确性,但是某些框架会导致主实例负载过大。此时可以使用事务拆分功能,将事务里的只读请求发送到只读实例上,提升性能。需要注意,显示事务当前不支持拆分,对于全局一致性有要求的事务也不支持拆分。

 

 

 image.png

客户在业务端可以通过设置连接池进行读写分离。当前RDS支持事务级连接池(默认)和会话级连接池。

 

事务级连接池主要用于减少直接连接到数据库业务的连接,减少短连接的频繁建立连接带来的负担。开启事务级连接池以后,客户端与独享代理之间可能会存在上千个连接,但是代理与数据库后端可能仅存在几十、几百个连接。

 

独享代理本身并没有最大连接数的限制,主要由后端数据库节点的规格决定。没有开启事务级连接池时,每条由客户端发起的连接都会在后端主节点与所有只读节点创建对应连接。

 

开启了事务级连接后,客户端发送请求时,会先与独享代理建立连接判断是否存在可用连接,如果不存在,代理会与数据库创建新连接;如果存在,则直接从连接池里取出并使用,能够减少频繁建立连接的过程。

 


 image.png

会话级接池主要用于减少短连接业务频繁建立新连接带来的实例负载。某个客户端断开时,系统会判断当前连接是否为闲置连接。如果是,系统会将其保留一段时间。重新建立连接时,如果连接池中有可用连接,则直接使用;如果没有,则通过正常流程再次建立连接。

 

会话级连接池并没有减少数据库的并发连接数,而是通过降低应用与数据库建立连接的速率来减少MySQL开销,从而更好地处理业务请求。但是闲置连接会短暂地占用客户端连接数,而且会话级连接池无法解决由于大量慢SQL 导致的堆积问题。

如何选择事务级连接池与会话级连接池?

 

如果业务连接数较多(比如有上万)或使用Serverless服务导致连接数随着业务端服务器的扩容而线性增加,则建议使用事务级连接池。

 

如果短连接占比较大,则建议使用会话级连接池。

 

如果业务使用多维长连接且连接数比较少,或业务本身已经具备较好的连接池,则不建议再使用RDS连接池。

 

image.png

 

阿里云RDS支持使用SQL hint语法,执行SQL时可以在前面加上hint操作,将SQL语句发往不同的数据库节点。具体例子如上图。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 负载均衡 安全
高效管理大型数据库:分片与复制的策略与实践
在当今数据驱动的世界中,管理和优化大型数据库系统是每个企业的关键任务。特别是在面对数据量迅速增长的情况下,如何确保系统的高可用性和性能成为重要挑战。本文探讨了两种核心技术——分片(Sharding)和复制(Replication),以及它们在实际应用中的策略与实践。通过对比这两种技术的优缺点,并结合具体案例分析,本文旨在为数据库管理员和开发者提供一套高效管理大型数据库的综合方案。
|
18天前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与实践
随着微服务架构的普及,如何高效管理和优化数据库访问成为了关键挑战。本文探讨了在微服务环境中优化数据库访问的策略,包括数据库分片、缓存机制、异步处理等技术手段。通过深入分析实际案例和最佳实践,本文旨在为开发者提供实际可行的解决方案,以提升系统性能和可扩展性。
|
23天前
|
JavaScript 前端开发 数据库
数据库测试场景实践总结
本文介绍了数据库超时和应用锁表SSDB测试场景的验证方法,通过锁定数据表模拟写入失败情况,并利用SSDB进行重试。测试需开发人员配合验证功能。同时,提供了SSDB服务器登录、查询队列数量及重启服务等常用命令。适用于验证和解决数据库写入问题。
22 7
|
2月前
|
消息中间件 Kafka 数据库
深入理解Kafka的数据一致性原理及其与传统数据库的对比
【8月更文挑战第24天】在分布式系统中,确保数据一致性至关重要。传统数据库利用ACID原则保障事务完整性;相比之下,Kafka作为高性能消息队列,采用副本机制与日志结构确保数据一致性。通过同步所有副本上的数据、维护消息顺序以及支持生产者的幂等性操作,Kafka在不牺牲性能的前提下实现了高可用性和数据可靠性。这些特性使Kafka成为处理大规模数据流的理想工具。
47 6
|
22天前
|
存储 负载均衡 数据库
探索后端技术:从服务器架构到数据库优化的实践之旅
在当今数字化时代,后端技术作为支撑网站和应用运行的核心,扮演着至关重要的角色。本文将带领读者深入后端技术的两大关键领域——服务器架构和数据库优化,通过实践案例揭示其背后的原理与技巧。无论是对于初学者还是经验丰富的开发者,这篇文章都将提供宝贵的见解和实用的知识,帮助读者在后端开发的道路上更进一步。
|
2月前
|
人工智能 关系型数据库 分布式数据库
DB+AI会擦出怎样的火花?一站式带你了解阿里云瑶池数据库经典的AI产品服务与实践!
从 DB+AI 精选解决方案、特惠权益等,一站式带你了解阿里云瑶池数据库经典的AI产品服务与实践。
|
2月前
|
存储 缓存 运维
优化数据库查询性能的关键技巧与实践
在当今软件开发中,高效的数据库查询是保证系统性能的重要因素之一。本文将探讨如何通过优化查询语句、索引设计以及服务器配置等多方面手段,提升数据库查询效率,从而实现更快速和可靠的数据检索和处理。
|
2月前
|
存储 NoSQL 关系型数据库
Web中的数据库:原理、应用与代码实现
Web中的数据库:原理、应用与代码实现
|
15天前
|
机器学习/深度学习 运维 Prometheus
构建高效运维体系:从自动化部署到智能监控的全方位实践
在当今数字化时代,企业对运维效率和稳定性的要求越来越高。本文将探讨如何构建一个高效的运维体系,从自动化部署、持续集成与持续交付(CI/CD)、智能监控、故障管理以及数据驱动决策等方面进行深入分析和实践指导。通过这些方法,企业可以实现更快速、更可靠的软件发布和问题解决,提升整体运营效率。
|
11天前
|
敏捷开发 运维 Prometheus
构建高效运维体系:从基础架构到自动化管理
本文探讨了如何通过优化基础架构、引入自动化工具和流程,以及加强团队协作,构建高效的运维体系。通过案例分析和实践建议,帮助运维人员实现系统的稳定性、可靠性和可维护性。
下一篇
无影云桌面