我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql读写分离在项目实践中的应用

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql读写分离在项目实践中的应用

mysql读写分离在项目实践中的应用

工程背景介绍:

我们开发了一个万能接口,用户通过这个接口中传入数据,我们拿到数据进行复杂的逻辑处理然后再将数据各种匹配展示分发等操作,处理的流程相当庞大,接口中我们只保留了接收数据和返回一个本次请求的id的操作,其余操作都是异步到其他程序中处理的。

返回id的操作是需要和数据库进行两次连接,一次读库得到最新的id 然后把id更新到数据库。

v2-4d5a5146e4cb1120114a4e26917d8222_720w.jpg

项目出现问题:

我们以为自己的程序就像上图中的那样运行,一次请求,读库,写库,返回id,其余异步处理。但是没有考虑高并发,强压力写的性能问题,在高并发下,多个接口线程同事访问数据库,这样的情况会出现并发同步的问题,当然这点我们是考虑到了 ,使用线程锁可避免数据的幻读,重复读等。可一旦这样大量的接口线程堆积,很快服务器cpu将扛不住发生宕机!

那如果不试用线程同步锁呢,很明显不只是数据的错乱问题将发生,数据库在极大线程的访问压力下也将抗不住,cpu使用率达到85%!程序面临着瘫痪的风险。

v2-87f40e3a447c72efd7f6327d44fa457f_720w.jpg

解决方式:

1.数据库集群?

好处:增加数据库服务器,压力随之分摊到几个服务器中,减小数据库压力

坏处:硬件成本大 数据库主从问题 哈希一致性问题 单点故障问题

2.接口服务器集群

好处:访问压力被分摊到几个服务器中 线程的堆积问题得到有效解决

坏处:硬件成本大 单点故障问题 nignx负载均衡服务器的搭建 操作复杂

 

以上两种方案都是增加硬件成本,加大了开发难度,难以真正实施

终极解决方案:读写分离的应用!

好处:硬件成本不变 释放了数据库压力 再也不用担心数据库和服务器压力了

坏处:无

实现思路:

1.对读库操作解耦合,增加缓存服务ecache(也可以是其它如redis),读不再直接面对数据库,只有缓存中没有数据时才把数据库中的数据读写到缓存之中,这样数据库的读压力完全被释放!

2.对写数据库进行异步操作,在更新数据库操作中增加消息中间件rabbitmq(也可以是其它如activemq,spring对前者支持较好),我们将更新后的id写入到rabbitmq中,单线程消费mq到数据库,由于此时跟新后的id已经返回给客户,写库的操作并不需要高时效性。这样数据库的写压力也完全被释放!

这个时候我们来看看整个操作,读写均不再直接面对数据库,但是数据库中的数据依然没有错乱,缓存的操作速度极快,接口服务器也不再有很多的线程挤压,我们在硬件成本不变的情况下解决了数据库和服务器压力过大,可以说是一种完美的解决方案

v2-93fb5dcaa468c2500f41fe25f056289d_720w.jpg

至此,压力的问题成功解决,当然问题的解决并非是一撮而就的,这里还有着一些其它的问题,比如分布式事务的解决,这里不再一一赘述,后面我们找机会仔聊聊这些分布式服务的经典问题!

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql读写分离在项目实践中的应用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql读写分离在项目实践中的应用

工程背景介绍: 我们开发了一个万能接口,用户通过这个接口中传入数据,我们拿到数据进行复杂的逻辑处理然后再将数据各种匹配展示分发等操作,处理的流程相当庞大,接口中我们只保留了接收数据和返回一个本次请求的id的操作,其余操作都是异步到其他程序中处理的。 返回id的
mysql读写分离在项目实践中的应用
2020-10-22

Linux MySQL的读写分离实践

在Linux环境下实现MySQL的读写分离,一般可以通过搭建主从复制的方式来实现。主从复制是指在一个MySQL数据库中,将数据同步到多个数据库实例上,其中一个实例作为主数据库负责写操作,其他实例作为从数据库负责读操作。以下是实现MySQL
Linux MySQL的读写分离实践
2024-08-16

ORM在MySQL读写分离中的应用

ORM(Object-Relational Mapping)在MySQL读写分离中的应用主要体现在通过框架或库来管理和优化数据库操作,以提升性能和扩展性。以下是一些ORM框架如何实现MySQL读写分离的方法:TypeORMTypeORM
ORM在MySQL读写分离中的应用
2024-10-05

SpringBoot项目中如何实现MySQL读写分离

这篇“SpringBoot项目中如何实现MySQL读写分离”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot
2023-07-06

SpringBoot项目中怎么实现MySQL读写分离

这篇文章主要介绍了SpringBoot项目中怎么实现MySQL读写分离的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot项目中怎么实现MySQL读写分离文章都会有所收获,下面我们一起来看看吧。1
2023-07-02

Python中如何实现MySQL的读写分离读写以提高性能?(在Python中如何配置MySQL实现读写分离读写?)

Python实现MySQL读写分离,将数据库划分为读写和只读服务器,提高性能和可用性。步骤包括:创建专用连接、使用游标、确定操作类型、选择适当连接和游标、执行数据库操作、关闭连接。优点包括提高性能、增加可用性、数据一致性。缺点是延迟和配置复杂性。
Python中如何实现MySQL的读写分离读写以提高性能?(在Python中如何配置MySQL实现读写分离读写?)
2024-04-02

怎么在java中利用spring实现读写分离

怎么在java中利用spring实现读写分离?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 背景我们一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较
2023-05-30

怎么在Mysql中实现主从复制与读写分离

这期内容当中小编将会给大家带来有关怎么在Mysql中实现主从复制与读写分离,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。文章思维导图为什么使用主从复制、读写分离主从复制、读写分离一般是一起使用的。目的很简
2023-06-14

PHP应用场景下实现MySQL读写分离的技术指南

PHP是一种广泛应用于Web开发的服务器端脚本语言,而MySQL则是一种流行的关系型数据库管理系统。在PHP应用场景下,为了提高系统的性能和可靠性,通常会采用MySQL读写分离的技术来分担数据库服务器的压力,提高系统的响应速度。本文将介绍在
PHP应用场景下实现MySQL读写分离的技术指南
2024-03-05

Django框架在大型项目中的应用实践

随着web应用程序的快速发展,许多企业和组织都会选择Django作为其web应用程序的框架。 Django框架拥有强大的功能,包括:快速开发、可重用性、安全性、灵活性和可扩展性等。本文将讨论Django框架在大型项目中的应用实践,并提供具体
Django框架在大型项目中的应用实践
2024-01-19

最新MySql8.27主从复制及SpringBoot项目中的读写分离实战教程

目录最新mysql8.27主从复制以及SpringBoot项目中的读写分离实战1、MySql主从复制2、配置-主库Master3、配置-从库Slave3、主从复制测试4、读写分离案例4.1、Sharding-JDBC框架介绍最新MySql8
2022-08-08

在spring中使用mybatis实现对mysql数据库进行读写分离

这期内容当中小编将会给大家带来有关在spring中使用mybatis实现对mysql数据库进行读写分离,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言 在网站的用户达到一定规模后,数据库因为
2023-05-31

如何在Spring中使用MyBatis实现数据的读写分离

如何在Spring中使用MyBatis实现数据的读写分离?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。其实现原理如下:通过Spring AOP对dao层接口进行
2023-05-31

编程热搜

目录