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

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

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

课程地址: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

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

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

相关文章
|
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
|
15小时前
|
NoSQL Java 数据库
优化基于阿里云的微服务架构下的数据库访问性能
在应对大型电商项目中数据库访问性能瓶颈问题时,团队通过阿里云工具分析发现高QPS、慢查询和不合理数据交互是关键。优化措施包括:1) 索引优化,针对慢查询添加或调整索引;2) 开启读写分离,使用RDS读写分离功能和DRDS进行水平拆分;3) 引入Redis缓存热点数据,减少直接数据库访问;4) 服务化数据访问,降低跨服务数据库调用;5) 使用Sentinel进行限流和熔断,保护数据库资源。这些改进显著提升了系统响应速度和用户体验。
|
1天前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
【6月更文挑战第24天】Java连接池技术优化数据库性能,减少连接开销,提高响应速度。常见库有HikariCP、C3P0、DBCP。选择时考虑性能、功能和稳定性。以HikariCP为例,配置包括设置URL、用户、密码和最大连接数。优化配置涉及最大连接数调整、连接超时及连接校验。连接池能提升应用效率,确保资源有效利用。