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

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

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

课程地址:https://developer.aliyun.com/learning/course/503/detail/6746


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

我们在上章节提到了提高应用并发度的几个方式,例如应用层横向扩展,使用应用层缓存,同步转异步的一些操作。本章节我们介绍的是数据库处理能力及提高io能力。

众所周知,在整个互联网架构里,最难进行横向扩展的是数据库,主要是因为在数据库层所有数据库实例为了保证数据的 ACID 原则,它要进行统一的数据存储。最终的数据存储会成为数据库并发的瓶颈,所以现在很多数据库技术通过其他方式来降低一些访问压力。

其中一个手段是读写分离,即,对数据库的操作主要分为两类,一类是读:select,可能只是为了判断条件,最终都是通过 select 这个命令来获取它应用所需要的一些数据。

另外一类是写:insert,delete,update。在数据库的整体设计中,写操作一般并发度都比较低,因为为了数据的一致性和隔离性考虑,写操作的过程中要对数据严格的加锁操作,为了避免应用读到锁数据。当所的级别比较高时,就会影响到读的操作,甚至可能把数据库中的读操作悬挂或堵塞在一边,只有写的操作完成后,读的操作才能进行下去。例如库存扣减的交易,当应用表对库存进行更新时,若某一个商品的库存是100,当我们把它扣减成95时,在这个过程中,这条记录是被严格加锁的,其他应用来读取这个库存,需要等待库存更新。

所以我们可以看出,读操作和写操作在同一个数据上执行,他们相互之间是影响的,写操作会影响到堵车做的效率,当一个主库有大量的写操作的情况下,读操作的效率就无法提升,所以用户处理应用的整个性能就会有问题。所以在大型的互联网架构设计中,我们会通过一系列的技术将读操作和写操作进行分离。

图片1.png

如上图,我们可以看出据库的复制技术将主库的数据复制到只读库或备库的数据库中,通过应用的分解,只要涉及到读操作的一些应用逻辑都把它转到读库中去,只要涉及到写操作,如刚刚所提及到的更新,删除这些数据应用就会把它转发到主库上进行操作。

解决只读库和主库之间数据的复制需要一些技术的配合,主要保证数据的延时一定要低,否则在主库上做的一些写入操作,如更新,若没有及时的反馈到只读库,应用取过去就会导致应用逻辑上的一些错误。在这现在的一些数据库,如阿里云都有一些很成熟的技术,来保证主库可以快速的将数据复制到只读库中,主要是通过数据库的同做日志来同步到只读库上。

同时在一些访问并发度很大的应用场景中,只读库也会有多个,所以图库需要将变化的数据复制到多个存库中。通过数据库的读写分离,我们可以达到几个目的:

一是降低主库压力,提升应用处理速度;大量的并发查询访问都被转移到只读库上,所以主库的压力会降低,带来的好处是应用处理的速度会加快。例如过去的一个更新操作需要500毫秒,由于查询被转移到其他只读库上,他的更新速度可能会降低到100毫秒。

二是通过只读库提升应用查询速度。在以前没有只读库的情况下,所有的请求都需要在主库和更新操作进行混合的操作,会严重影响到查询的速度。有了只读库,其目的是为了查询使用,可以大大提升应用的响应速度,尤其是查询,例如,查询库存这样的操作都会有大大的提升。

甚至我们可以在只读库上进行一些比较复杂的查询,因为它不会影响到主的业务操作。所以读写分离也为一些场景进行业务分析的应用提供一些帮助。

这个架构也有一定的限制,三是适于能接受数据同步时有一定数据延迟的应用。

例如库存的场景,若我们一定限制的库存不能超慢,超慢指的是当库存中有100个商品,这样的场景在一定程度下不能用读写分离,当它允许超慢,读写分离是最佳的应用架构思路。

从阿里云场景视角,我们可以将只读库和主库分离这样的技术配置工作降低到最低,在阿里云的控制界面上有一个界面,若需要只读实例,

图片2.png

我们可以直接点击按钮进行只读实例的购买,后续的只读库和主库之间的数据同步工作,都已在底层完成,对应用非常简单,也降低了一些工作。

此章节我们学习了用只读库降低数据库的压力,同时提升并发度,使得应用的反应速度大大提升,为一些业务分析场景提供帮助。

相关文章
|
27天前
|
存储 缓存 监控
数据库优化技术:提升性能与效率的关键策略
【10月更文挑战第15天】数据库优化技术:提升性能与效率的关键策略
54 8
|
8天前
|
监控
SMoA: 基于稀疏混合架构的大语言模型协同优化框架
通过引入稀疏化和角色多样性,SMoA为大语言模型多代理系统的发展开辟了新的方向。
23 6
SMoA: 基于稀疏混合架构的大语言模型协同优化框架
|
6天前
|
存储 NoSQL 分布式数据库
微服务架构下的数据库设计与优化策略####
本文深入探讨了在微服务架构下,如何进行高效的数据库设计与优化,以确保系统的可扩展性、低延迟与高并发处理能力。不同于传统单一数据库模式,微服务架构要求更细粒度的服务划分,这对数据库设计提出了新的挑战。本文将从数据库分片、复制、事务管理及性能调优等方面阐述最佳实践,旨在为开发者提供一套系统性的解决方案框架。 ####
|
7天前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
25 4
|
9天前
|
SQL druid 数据库
如何进行数据库连接池的参数优化?
数据库连接池参数优化包括:1) 确定合适的初始连接数,考虑数据库规模和应用需求;2) 调整最大连接数,依据并发量和资源状况;3) 设置最小空闲连接数,平衡资源利用和响应速度;4) 优化连接超时时间,确保系统响应和资源利用合理;5) 配置连接有效性检测,定期检查连接状态;6) 调整空闲连接回收时间,适应访问模式并配合数据库超时设置。
|
17天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
25 7
|
13天前
|
SQL 缓存 监控
数据库优化
【10月更文挑战第29天】数据库优化
26 1
|
17天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
17 5
|
14天前
|
缓存 关系型数据库 MySQL
如何优化 MySQL 数据库的性能?
【10月更文挑战第28天】
37 1
|
16天前
|
XML Java 数据库连接
如何使用HikariCP连接池来优化数据库连接管理
在Java应用中,高效管理数据库连接是提升性能的关键。本文介绍了如何使用HikariCP连接池来优化数据库连接管理。通过引入依赖、配置参数和获取连接,你可以显著提高系统的响应速度和吞吐量。 示例代码展示了从配置到使用的完整流程,帮助你轻松上手。
58 3