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

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

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

课程地址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、本章节学习到通过只读库来降低数据库的压力,同时提升并发度,使得应用的访问速度大大提升,而且为一些业务分析的场景提供帮助。

相关文章
|
14天前
|
消息中间件 存储 缓存
十万订单每秒热点数据架构优化实践深度解析
【11月更文挑战第20天】随着互联网技术的飞速发展,电子商务平台在高峰时段需要处理海量订单,这对系统的性能、稳定性和扩展性提出了极高的要求。尤其是在“双十一”、“618”等大型促销活动中,每秒需要处理数万甚至数十万笔订单,这对系统的热点数据处理能力构成了严峻挑战。本文将深入探讨如何优化架构以应对每秒十万订单级别的热点数据处理,从历史背景、功能点、业务场景、底层原理以及使用Java模拟示例等多个维度进行剖析。
37 8
|
20天前
|
监控
SMoA: 基于稀疏混合架构的大语言模型协同优化框架
通过引入稀疏化和角色多样性,SMoA为大语言模型多代理系统的发展开辟了新的方向。
31 6
SMoA: 基于稀疏混合架构的大语言模型协同优化框架
|
6天前
|
消息中间件 运维 Cloud Native
云原生架构下的微服务优化策略####
本文深入探讨了云原生环境下微服务架构的优化路径,针对服务拆分、通信效率、资源管理及自动化运维等核心环节提出了具体的优化策略。通过案例分析与最佳实践分享,旨在为开发者提供一套系统性的解决方案,以应对日益复杂的业务需求和快速变化的技术挑战,助力企业在云端实现更高效、更稳定的服务部署与运营。 ####
|
18天前
|
存储 NoSQL 分布式数据库
微服务架构下的数据库设计与优化策略####
本文深入探讨了在微服务架构下,如何进行高效的数据库设计与优化,以确保系统的可扩展性、低延迟与高并发处理能力。不同于传统单一数据库模式,微服务架构要求更细粒度的服务划分,这对数据库设计提出了新的挑战。本文将从数据库分片、复制、事务管理及性能调优等方面阐述最佳实践,旨在为开发者提供一套系统性的解决方案框架。 ####
|
19天前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
36 4
|
21天前
|
SQL druid 数据库
如何进行数据库连接池的参数优化?
数据库连接池参数优化包括:1) 确定合适的初始连接数,考虑数据库规模和应用需求;2) 调整最大连接数,依据并发量和资源状况;3) 设置最小空闲连接数,平衡资源利用和响应速度;4) 优化连接超时时间,确保系统响应和资源利用合理;5) 配置连接有效性检测,定期检查连接状态;6) 调整空闲连接回收时间,适应访问模式并配合数据库超时设置。
|
29天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
40 7
|
25天前
|
SQL 缓存 监控
数据库优化
【10月更文挑战第29天】数据库优化
31 1
|
29天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
21 5
|
26天前
|
缓存 关系型数据库 MySQL
如何优化 MySQL 数据库的性能?
【10月更文挑战第28天】
51 1