数据库架构设计优化-读写分离|学习笔记

简介: 快速学习数据库架构设计优化-读写分离

开发者学堂课程【企业级互联网分布式系统应用架构学习:数据库架构设计优化-读写分离】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/369/detail/4394


数据库架构设计优化-读写分离


内容介绍:

一、读写分离

二、读写分离目的


一、读写分离

1、在之前章节介绍了提高应用并发度的几个方式,比如说应用层横向扩展、使用应用层缓存,还有就是把大量的同步的操作,或者一些请求访问转成异步的处理。本章节主要介绍数据库层的一些处理能力,在相同资源的情况下如何提高数据库的处理能力,还有提高 IO 的能力。整个应用架构或者互联网应用架构里面最难进行横向扩展的就是数据库。主要是因为在数据库层,所有的数据库实例为了保证数据的 ACID 这几个原则,一定要进行统一的数据存储。最终数据存储会成为数据库的并发的一个平面,所以现在很多数据库技术都会通过其他的方式来降低数据库的访问压力,其中一个手段就是进行读写分离。

2、下面对读写分离这个词进行一个详细的阐述,对数据库的操作主要分为两类,一类是读,读就是 select,可能只是判断条件不一样,最终都是通过 select 这样的命令 sql 语句获取应用所需要的一些数据。另外一类就是和数据库写相关的操作,比如说 insert,比如 delete,或者是 update 这样一系列的操作,都把它归结到写操作上。

3、在数据库的整体设计中,写操作一般并发度都比较低,因为为了数据的一致性,或者叫隔离性考虑,写操作的过程中要对数据进行严格的加锁操作,这样避免应用读到脏数据。一旦锁的级别比较高的时候,就会影响到读的一些操作,甚至可能把数据库读的一些操作悬挂或者阻塞在一边,只有写操作完成以后,读的操作才能进行下去。比如说以一个银行的取款交易或者库存扣减的交易举例,应用对库存表进行更新的时候,比如说某一个商品的库存现在是100,当把他扣减成95的时候,在这个过程中,这条记录是被严格加锁的,其他应用要来读这个库存,就需要等待库存更新的语句执行完。

4、如果读操作和写操作在同一个数据库上执行,他们之间相互是有影响的,写操作会影响到读操作的效率,这样当一个主库有大量的写操作的情况下,读操作的效率就无法提升上去,那整个用户或者应用的整个性能会有严重的问题。所以在大型的互联网应用架构设计中,会通过一系列的技术,将读操作和写操作分离。从下图中可以看到

image.png

可以通过数据库的复制技术,将主库的数据复制到只读库,或者备库。通过应用的分解,只要涉及到读操作的一些应用逻辑,或者一些 sql 请求,都把他转到只读库上去。而只要涉及到写操作的,比如说更新、插入、删除这些数据,应用会把他转发到主库上进行操作。

5、解决只读库和主库之间的数据复制也是需要一些技术的配合,主要是要保证数据的延迟一定要很低,否则在主库上做的一些写入操作,比如更新,如果没有及时的返回到只读库,应用取过去可能就会导致应用逻辑上的错误。现在一些数据库,比如说 mysql,包括阿里云上的rds 数据库,都有很成熟的技术来保障主库可以很快地将变化的数据复制到只读库上去。主要是通过数据库的重做日志,来同步到只读库上。同时,在有些访问并发量特别大的应用场景上,只读库也会有多个,这样主库只需要将变化的数据复制到多个从库上。


二、读写分离目的

1、通过数据库读写分离,可以达到以下目的。第一个就是降低主库压力,提升应用处理速度,因为大量的并发查询访问都被转发到了只读库上,所以主库的压力就会降低很多,因为主库的压力降低带来的好处,就是整个应用的处理速度会加快。过去一个更新操作可能需要500毫秒,由于查询被转移到其他只读库上,他的更新速度可能就会降低到100毫秒。

2、第二,通过只读库可以提升应用的查询速度,以往没有只读库的状况下,所有的请求都要在主库上和更新操作进行符合的或混合的一些操作,会严重影响到查询速度,但有了只读库,只读库的目的就是为查询使用,所以可以大大提升应用的响应速度,尤其是针对查询的,比如说查询库存,这样的操作都会有大大的提升,甚至可以在只读库上进行一些比较复杂的查询,因为它不会影响到主的业务的操作。

3、读写分离,在有些场景下也为业务分析人员或者业务分析的一些应用,提供一些帮助。这个架构也有一些限制,他主要是用于能够接受数据同步有一定延迟的应用。比如说查库存场景,如果一定限制的库存不能超卖,所谓超卖就是库存里面有100个商品,就只能卖100个。这样的一些场景可能在一定程度下就不能使用读写分离,但如果他允许超卖,读写分离是最佳的一个场景,或是最佳的一个应用架构设计思路。从阿里云产品视角可以将只读库和主库的分离技术配置工作降到最低,在阿里云的控制界面上,rds 数据库有一个界面,如果需要一个只读实例,可以直接点击一个按钮来进行只读实例的购买。

image.png

后续的只读库和主库数据同步的工作都在底层完成,这对应用非常简单,也降低了运维的一些工作。

4、本章节学习到通过只读库来降低数据库的压力,同时提升并发度,使得应用的访问速度大大提升,而且为一些业务分析的场景提供帮助。

相关文章
|
4月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
140 1
|
2月前
|
机器学习/深度学习 存储 人工智能
RAG系统文本检索优化:Cross-Encoder与Bi-Encoder架构技术对比与选择指南
本文将深入分析这两种编码架构的技术原理、数学基础、实现流程以及各自的优势与局限性,并探讨混合架构的应用策略。
163 10
RAG系统文本检索优化:Cross-Encoder与Bi-Encoder架构技术对比与选择指南
|
6月前
|
机器学习/深度学习 人工智能 文件存储
Llama Nemotron:英伟达开源基于Llama架构优化的推理模型,253B参数持平DeepSeek R1!
NVIDIA推出的Llama Nemotron系列推理模型,基于Llama架构优化,包含Nano/Super/Ultra三款,在数学推理、编程和工具调用等任务中展现卓越性能。
185 5
Llama Nemotron:英伟达开源基于Llama架构优化的推理模型,253B参数持平DeepSeek R1!
|
16天前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
205 4
|
16天前
|
SQL 弹性计算 关系型数据库
如何用读写分离构建高效稳定的数据库架构?
在少写多读业务场景中,主实例读请求压力大,影响性能。通过创建只读实例并使用数据库代理实现读写分离,可有效降低主实例负载,提升系统性能与可用性。本文详解配置步骤,助你构建高效稳定的数据库架构。
|
6月前
|
数据采集 运维 Serverless
云函数采集架构:Serverless模式下的动态IP与冷启动优化
本文探讨了在Serverless架构中使用云函数进行网页数据采集的挑战与解决方案。针对动态IP、冷启动及目标网站反爬策略等问题,提出了动态代理IP、请求头优化、云函数预热及容错设计等方法。通过网易云音乐歌曲信息采集案例,展示了如何结合Python代码实现高效的数据抓取,包括搜索、歌词与评论的获取。此方案不仅解决了传统采集方式在Serverless环境下的局限,还提升了系统的稳定性和性能。
160 0
|
3月前
|
机器学习/深度学习 SQL 运维
数据库出问题还靠猜?教你一招用机器学习优化运维,稳得一批!
数据库出问题还靠猜?教你一招用机器学习优化运维,稳得一批!
104 4
|
2月前
|
数据采集 机器学习/深度学习 运维
从数据感知到决策优化:MyEMS 开源能源管理系统的技术架构与实践效能解析
MyEMS 是一款开源能源管理系统,采用分层解耦与模块化设计,支持多能源协同监测与智能优化调度。系统具备数据采集、分析、预警、碳核算等功能,助力企业实现节能降耗、安全管控与低碳转型,已在百余家全球企业落地应用,具备自主可控、成本低、安全性强等优势,面向虚拟电厂、数字孪生等未来场景持续演进。
116 0