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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 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
相关文章
|
4天前
|
运维 监控
构建高效运维体系:从理论到实践
在当今快速发展的信息化时代,高效的运维体系是保障企业信息系统稳定运行的关键。本文旨在探讨如何构建一个高效、可靠的运维体系,通过分析当前运维面临的挑战,提出相应的解决策略,并结合实际案例,展示这些策略的实施效果。文章首先介绍了高效运维的重要性,接着分析了运维过程中常见的问题,然后详细阐述了构建高效运维体系的策略和步骤,最后通过一个实际案例来验证这些策略的有效性。
|
4天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
12天前
|
人工智能 运维 监控
构建高效运维体系:理论与实践的深度融合####
本文旨在探讨高效IT运维体系的构建策略,通过理论框架与实际案例并重的方式,深入剖析了现代企业面临的运维挑战。文章开篇概述了当前运维领域的新趋势,包括自动化、智能化及DevOps文化的兴起,随后详细阐述了如何将这些先进理念融入日常运维管理中,形成一套既灵活又稳定的运维机制。特别地,文中强调了数据驱动决策的重要性,以及在快速迭代的技术环境中保持持续学习与适应的必要性。最终,通过对比分析几个典型企业的运维转型实例,提炼出可复制的成功模式,为读者提供具有实操性的指导建议。 ####
|
14天前
|
机器学习/深度学习 人工智能 运维
智能运维:AIOps在大型系统运维中的实践与挑战
【10月更文挑战第28天】随着云计算、大数据和人工智能的发展,AIOps(人工智能运维)应运而生,旨在通过算法和机器学习提高运维效率和质量。本文探讨了AIOps在大型系统运维中的实践与挑战,包括数据质量、模型选择和团队协作等方面,并通过一个异常检测案例展示了其应用。尽管面临挑战,AIOps仍有望成为未来运维的重要方向。
46 5
|
11天前
|
运维 负载均衡 Ubuntu
自动化运维的利器:Ansible入门与实践
【10月更文挑战第31天】在当今快速发展的信息技术时代,高效的运维管理成为企业稳定运行的关键。本文将引导读者了解自动化运维工具Ansible的基础概念、安装步骤、基本使用,以及如何通过实际案例掌握其核心功能,从而提升工作效率和系统稳定性。
|
12天前
|
运维 资源调度 监控
提升运维效率的关键技术与实践
在当今快速发展的信息技术时代,运维工作面临着前所未有的挑战和机遇。本文旨在探讨如何通过采用先进的技术和实施最佳实践来提高IT运维的效率和效果。我们将深入分析自动化工具、监控策略、灾难恢复计划以及持续集成/持续部署(CI/CD)等关键领域,展示它们如何协同工作以优化运维流程。此外,文章还将提供一些实际案例研究,帮助读者更好地理解这些概念的应用。无论是对于初创公司还是大型企业,掌握这些技术都将是提升竞争力的关键。
|
16天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
33 2
|
8天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
22 4
|
6天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
19 1
|
15天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
77 1

热门文章

最新文章