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

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

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

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

相关文章
|
17天前
|
缓存 监控 关系型数据库
优化数据库查询性能的五个技巧
在当今互联网时代,数据库查询性能是开发人员面临的重要挑战之一。本文将介绍五个有效的技巧,帮助开发人员优化数据库查询性能,提升系统的响应速度和稳定性。
|
6天前
|
SQL 缓存 监控
✅系统日活递增,如何优化提升大规模数据库
数据库性能优化涵盖硬件升级(如SSD、内存)、数据库设计简化、SQL查询优化、索引管理、缓存利用(如Redis)、负载均衡(读写分离、集群)、分区分片、备份恢复策略及性能监控。综合调整这些方面可提升系统性能和可用性。[MySQL索引设计][1]和[SQL优化实践][2]是深入学习的好资源。
|
8天前
|
机器学习/深度学习 设计模式 人工智能
人工智能和机器学习技术来优化微服务架构
人工智能和机器学习技术来优化微服务架构
20 1
|
8天前
|
消息中间件 SQL 关系型数据库
数据库如何实现读写分离以应对高并发?
【6月更文挑战第17天】数据库如何实现读写分离以应对高并发?
12 1
|
11天前
|
存储 Cloud Native 物联网
数据库技术前沿探索:架构、优化与行业实践
一、引言 在信息化和数字化的浪潮中,数据库技术作为企业核心竞争力的关键要素,其重要性不言而喻
|
17天前
|
数据可视化 Linux 数据库
探索 Linux 命令 `db_tuner`:优化数据库性能的利器
`db_tuner` 是一个假设的 Linux 工具,用于数据库性能优化,提供状态检查、查询分析、配置调优、索引建议及报告生成等功能。虽然不是真实命令,但类似工具如 `mysqltuner` 可实现这些功能。通过安装和运行 `db_tuner`,DBA 可以提升数据库性能,解决瓶颈问题。
|
14天前
|
存储 缓存 前端开发
单页应用(SPA)的架构与优化:深度探索与实践
【6月更文挑战第11天】本文探讨了单页应用(SPA)的架构与优化,包括前后端分离、路由管理和状态管理基础,以及加载性能、路由和状态管理的优化策略。通过合理设计与优化,SPA能提供流畅体验,同时应对加载性能、路由导航和状态管理的挑战。文章旨在帮助读者理解并提升SPA应用的性能和用户体验。
|
19天前
|
存储 SQL 关系型数据库
MySQL数据库——SQL优化(1/3)-介绍、插入数据、主键优化
MySQL数据库——SQL优化(1/3)-介绍、插入数据、主键优化
232 1
|
16小时前
|
NoSQL Java 数据库
优化基于阿里云的微服务架构下的数据库访问性能
在应对大型电商项目中数据库访问性能瓶颈问题时,团队通过阿里云工具分析发现高QPS、慢查询和不合理数据交互是关键。优化措施包括:1) 索引优化,针对慢查询添加或调整索引;2) 开启读写分离,使用RDS读写分离功能和DRDS进行水平拆分;3) 引入Redis缓存热点数据,减少直接数据库访问;4) 服务化数据访问,降低跨服务数据库调用;5) 使用Sentinel进行限流和熔断,保护数据库资源。这些改进显著提升了系统响应速度和用户体验。
|
1天前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
【6月更文挑战第24天】Java连接池技术优化数据库性能,减少连接开销,提高响应速度。常见库有HikariCP、C3P0、DBCP。选择时考虑性能、功能和稳定性。以HikariCP为例,配置包括设置URL、用户、密码和最大连接数。优化配置涉及最大连接数调整、连接超时及连接校验。连接池能提升应用效率,确保资源有效利用。