当前位置: 首页 > 科技观察

我天天用MySQL开发,你知道数据库能承受多大的并发压力吗?

时间:2023-03-20 16:18:48 科技观察

今天给大家分享一个关于MySQL数据库架构演进的知识点,因为很多兄弟天天做基于mysql的系统开发,但是他们写的系统都是那种并发压力小,体积小的数据量大,所以即使上线也只是正常运行,但是你知道你连接的MySQL数据库能承受多大的并发压力吗?如果MySQL数据库无法承受压力,你知道它应该如何进化吗?通用业务系统运行流程图首先,我们先来看看最基本的java业务系统连接数据库的运行架构。其实简单来说,我们平时开发java业务系统一般都是使用springboot+ssm技术栈,使用springboot嵌入tomcat对外提供http接口,顶多现在会加上nacos+dubbo来调用其他系统接口,所有数据都可以通过连接mysql数据库进行粗制,如下图所示。以上架构的系统,估计是很多兄弟每天做的最多的系统架构了。有的兄弟把它弄高了一点。一般来说,加一些es、redis、rocketmq等中间件可能会很简单。使用了一段时间,但总的来说,也就那么回事,言归正传。你知道你上面说的系统下连接的数据库能承受多大的压力吗?4核8G机器能处理多少并发?什么?说实话,要解决这个问题,一般来说,并不是首先要讲数据能承受多大的压力,因为首先抗住高并发的往往不是数据库,而是你接入的web系统数据库首先要抵抗高并发!那就是我们要弄清楚我们的springboot+ssm业务系统能抗多高的并发!那么要搞清楚这个问题,我们就得先说一个话题。一般来说,我们的springboot应用系统大致部署在2核4G或者4核8G的机器上,这个机器配置其实很关键,所以这里直接给大家一个经验值,就算我们部署4-核core8G机器,那么默认开启springboot内嵌的tomcat。200个线程用来处理请求,然后每个请求都要多次读写数据库。这个时候一般来说你的一台机器能抗住500~1000左右的并发量,看你接口的复杂程度。度,如下图所示。高并发来袭,数据库会先被kill掉吗?所以其实一般来说,当你的高并发压力来袭的时候,往往不是数据库首先处理不了,而是你的业务系统所在的机器。停不下来,比如你部署两台机器,那么其实在每秒一两千并发的时候,这两台机器的CPU负载基本都会飙升到90%以上,压力非常大高,接口性能会开始下降。下降了很多,如下图所示。那么这个时候我们的数据库压力会怎么样呢?其实一般来说,你们两台机器每秒承受一两千个请求之后,数据库压力一般都会达到一个小瓶颈,为什么呢?关键是你业务系统在处理每一个业务请求的时候,都会对数据库进行多次读写,所以业务系统的一个请求可能会引起对数据库的多次请求。正因为如此,此时你的数据库可能会面临并发压力。它看起来像几千。一个8核16G的数据库每秒能承受多大的并发压力?那么下一个问题就是,你的数据库一般部署在什么样的机器上?一般来说,如果数据库配置是特别低并发的场景,2核4G或者4核8G就够了,但是如果是比较常规的公司的生产环境数据库,一般会是8核16G.那么一个8核16G的数据库每秒能承受多大的并发压力呢?一般来说,是几千的数量级。因为它能抵抗多少并发取决于你数据库的数据量和你的SQL语句的复杂程度。一般来说,8核16G的机器每秒可以抗上千并发。再大,基本都会承受不住,因为往往在这个级别,数据库的cpu、内存、网络、io的负载基本上都很高,尤其是cpu,可能至少70%或80%。如下所示。如何优化数据库架构?1、根据业务系统拆分多个数据库机优化方案那么,如果你在并发压力下,通常如何优化数据库架构呢?其实也简单,我们添加机器,把数据库部署到多台机器上,是完全可以的。因为一般来说,我们会把很多业务系统的dbs和表放在一个数据库里,所??以首先我们可以按照业务系统拆分,比如多加一台机器,部署一个数据库,然后再放一些业务系统这里把旧数据库机的db和表放在另一部分业务系统的db和表上。这时候老数据库机器的压力就可以一下子缓解了,如下图。2.读写分离架构的优化方案那么下一个问题来了。如果并发压力不断增加,导致两个分库的压力越来越大怎么办?这时候我们可以使用一个trick,叫做读写分离,据说是给每个数据库挂一个从库,让主库根据binlog数据更新日志,同步复制到从库,这样主从数据库就可以保持数据一致,然后我们的系统就可以真正的写入主数据库,在从数据库中进行查询了,这时候就可以再次缓解原来主数据库的压力,如图下图。3.分库分表架构优化方案。让我们进一步讨论它。即使从库挂在主库上,然后并发压力不断增加,我们主库的写入压力也太大了,每秒上千次写入,我撑不住了?这个时候只能走终极方案,就是分库分表,也就是把主库拆分成多个库,把一张表的一部分数据放在每个库里,然后用多个主库抗高并发写压力,让我们的压力再次分散,如下图。综上所述,今天分享的知识就到这里了。其实我们数据库架构的演进,基本上就是按照今天说的顺序和思路。逐渐进化。一开始,你的单台数据库机是抗不住上千并发的。然后,根据业务系统拆分多台数据库机器,然后如果不能再处理了,主从架构来分担读写压力。最终总能用数据库架构来抵抗高并发压力。