百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

外包做的系统宕机了,逼得我重新设计一套MySQL数据库架构

ccwgpt 2024-10-20 04:54 29 浏览 0 评论

目录

  • 一般业务系统运行流程图
  • 一台 4 核 8G 的机器能扛多少并发量呢?
  • 高并发来袭时数据库会先被打死吗?
  • 8 核 16G 的数据库每秒大概可以抗多少并发压力?
  • 数据库架构可以从哪些方面优化?
  • 总结


今天给大家分享一个知识点,是关于 MySQL 数据库架构演进的,因为很多兄弟天天基于 MySQL 做系统开发,但是写的系统都是那种低并发压力、小数据量的,所以哪怕上线了也就是这么正常跑着而已。

但是你知道你连接的这个 MySQL 数据库他到底能抗多大并发压力吗?如果 MySQL 数据库扛不住压力了,应该如何演进你知道吗?


一般业务系统运行流程图

首先,我们先来看一个最最基础的 Java 业务系统连接数据库运行的架构,其实简单来说,我们平时都是用 SpringBoot+SSM 技术栈开发一个 Java 业务系统的,用 Spring Boot 内嵌 Tomcat 就可以对外提供 Http 接口了。

然后最多现在会加上 Nacos+Dubbo 调用别的系统接口,数据全部靠连接 MySQL 数据库进行 crud 就可以了。

如下图:

上面那种架构的系统,估计就是很多兄弟日常做的最多的系统架构了,有的兄弟稍微做的高大上一点,大概来说,可能就是会加入一些 ES、Redis、RocketMQ 一类的中间件简单使用一下。

但是大致来说也就这么回事了,那么还是回归主题,大家知道你上述那种系统下,他连接的数据库能抗多大压力吗?


一台 4 核 8G 的机器能扛多少并发量呢?

说实话,要解决这个问题,一般来说,不是先聊数据能抗多少压力,因为往往不是数据库先去抗高并发,而是你连接数据库的 Web 系统得先去抗高并发!也就是我们的 SpringBoot+SSM 那套业务系统能抗多高并发我们得先搞清楚!

所以要搞明白这个问题,就得先说一个主题,一般来说我们的 SpringBoot 应用系统大致就是部署在 2 核 4G 或者 4 核 8G 的机器上,这个机器配置其实是很关键的。

所以这里直接告诉大家一个经验值,即使说咱们如果部署的是一个 4 核 8G 的机器,然后 SpringBoot 内嵌的 Tomcat 默认开了 200 个线程来处理请求,接着每个请求都要读写多次数据库。

那么此时,大致来说你的一台机器可以抗大概 500~1000 这个并发量,具体多少得看你的接口复杂度。

如下图:

高并发来袭时数据库会先被打死吗?

所以其实一般来说,当你的高并发压力来袭的时候,通常不会是数据库先扛不住了,而是你的业务系统所在机器抗不住了。

比如你部署了 2 台机器,那么其实到每秒一两千并发的时候,这两台机器基本上 CPU 负载都得飙升到 90% 以上 ,压力很大,而且接口性能会开始往下掉很多了。

如下图:

那么这个时候我们的数据库压力会如何呢?其实一般来说你的两台机器抗下每秒一两千的请求的时候后,数据库压力通常也会到一个小瓶颈,为什么呢?

关键是你的业务系统处理每个业务请求的时候,他是会读写多次数据库的,所以业务系统的一次请求可能会导致数据库有多次请求,也正因为这样,所以此时可能你的数据库并发压力会到几千的样子。


8 核 16G 的数据库每秒大概可以抗多少并发压力?

那么所以下一个问题来了,你的数据库通常是部署在什么样配置的机器上?

一般来说给大家说,数据库的配置如果是那种特别低并发的场景,其实 2 核 4G 或者 4 核 8G 也是够了,但是如果是常规化一点的公司的生产环境数据库,通常会是 8 核 16G。

那么 8 核 16G 的数据库每秒大概可以抗多少并发压力?大体上来说,在几千这个数量级。

因为这个具体能抗多少并发也得看你数据库里的数据量以及你的 SQL 语句的复杂度,所以一般来说 8 核 16G 的机器,大概也就是抗到每秒几千并发就差不多了。

量再大基本就扛不住了,因为往往到这个量级下,数据库的 CPU、内存、网络、IO 的负载基本都很高了,尤其是 CPU,可能至少也在百分之七八十了。

如下图:

数据库架构可以从哪些方面优化?


| 根据业务系统拆分多个数据库机器优化方案

那么接着说,如果到了这个并发压力之下,通常来说可以如何进行数据库架构的优化呢?

其实也简单,我们完全可以加机器,把数据库部署到多台机器上去。因为通常来说,我们的一个数据库里会放很多业务系统的 db 和 tables,所以首先就是可以按照业务系统来进行拆分。

比如说多加一台机器,再部署一个数据库,然后这里放一部分业务系统的 db 和 tables,老数据库机器放另外一部分业务系统的 db 和 tables,此时一下子就可以缓解老数据库机器的压力了。

如下图:

| 读写分离架构优化方案

那么接着问题来了,如果说并发压力继续提升,导致拆分出去的两台数据库压力越来越大了呢?

此时可以上一招,叫做读写分离,就是说给每个数据库挂一个从库,让主数据库基于 binlog 数据更新日志同步复制给从数据库,让主从数据库保持数据一致。

然后我们的系统其实可以往主库里写入,在从库里查询,此时就又可以缓解原来的主数据库的压力了。

如下图:

| 分库分表架构优化方案

再往下说,如果说即使是给主数据库挂了从库,然后接着并发压力继续提升,让我们的主数据库写入压力过大,每秒几千写入,又要扛不住了呢?

此时就只能上终极方案,分库分表了,就是把主库拆分为多个库,每个库里放一个表的部分数据,然后用多个主库抗高并发写入压力,这样就可以再次分散我们的压力了。

如下图所示:

总结

好了,今天分享的知识就到这里了,其实我们的数据库架构演进基本上就是按照今天说的这个顺序和思路逐步逐步的演进的。

刚开始你单台数据库机器抗几千并发扛不住了,就按照业务系统拆分多个数据库机器,然后再扛不住了,就上主从架构分摊读写压力,再扛不住了就分库分表,多个机器抗数据库写入压力,最后总是可以用数据库架构抗住高并发压力的。

------------- END -------------


另外推荐儒猿课堂的1元系列课程给您,欢迎加入一起学习~

互联网Java工程师面试突击课(1元专享)

SpringCloudAlibaba零基础入门到项目实战(1元专享)

亿级流量下的电商详情页系统实战项目(1元专享)

Kafka消息中间件内核源码精讲(1元专享)

12个实战案例带你玩转Java并发编程(1元专享)

Elasticsearch零基础入门到精通(1元专享)

基于Java手写分布式中间件系统实战(1元专享)

基于ShardingSphere的分库分表实战课(1元专享)

相关推荐

一个基于.Net Core遵循Clean Architecture原则开源架构

今天给大家推荐一个遵循CleanArchitecture原则开源架构。项目简介这是基于Asp.netCore6开发的,遵循CleanArchitecture原则,可以高效、快速地构建基于Ra...

AI写代码翻车无数次,我发现只要提前做好这3步,bug立减80%

写十万行全是bug之后终于找到方法了开发"提示词管理助手"新版本那会儿,我差点被bug整崩溃。刚开始两周,全靠AI改代码架构,结果十万行程序漏洞百出。本来以为AI说没问题就稳了,结果...

OneCode低代码平台的事件驱动设计:架构解析与实践

引言:低代码平台的事件驱动范式在现代软件开发中,事件驱动架构(EDA)已成为构建灵活、松耦合系统的核心范式。OneCode低代码平台通过创新性的注解驱动设计,将事件驱动理念深度融入平台架构,实现了业务...

国内大厂AI插件评测:根据UI图生成Vue前端代码

在IDEA中安装大厂的AI插件,打开ruoyi增强项目:yudao-ui-admin-vue31.CodeBuddy插件登录腾讯的CodeBuddy后,大模型选择deepseek-v3,输入提示语:...

AI+低代码技术揭秘(二):核心架构

本文档介绍了为VTJ低代码平台提供支持的基本架构组件,包括Engine编排层、Provider服务系统、数据模型和代码生成管道。有关UI组件库和widget系统的信息,请参阅UI...

GitDiagram用AI把代码库变成可视化架构图

这是一个名为gitdiagram的开源工具,可将GitHub仓库实时转换为交互式架构图,帮助开发者快速理解代码结构。核心功能一键可视化:替换GitHubURL中的"hub...

30天自制操作系统:第六天:代码架构整理与中断处理

1.拆开bootpack.c文件。根据设计模式将对应的功能封装成独立的文件。2.初始化pic:pic(可编程中断控制器):在设计上,cpu单独只能处理一个中断。而pic是将8个中断信号集合成一个中断...

AI写代码越帮越忙?2025年研究揭露惊人真相

近年来,AI工具如雨后春笋般涌现,许多人开始幻想程序员的未来就是“对着AI说几句话”,就能轻松写出完美的代码。然而,2025年的一项最新研究却颠覆了这一期待,揭示了一个令人意外的结果。研究邀请了16位...

一键理解开源项目:两个自动生成GitHub代码架构图与说明书工具

一、GitDiagram可以一键生成github代码仓库的架构图如果想要可视化github开源项目:https://github.com/luler/reflex_ai_fast,也可以直接把域名替换...

5分钟掌握 c# 网络通讯架构及代码示例

以下是C#网络通讯架构的核心要点及代码示例,按协议类型分类整理:一、TCP协议(可靠连接)1.同步通信//服务器端usingSystem.Net.Sockets;usingTcpListene...

从复杂到优雅:用建造者和责任链重塑代码架构

引用设计模式是软件开发中的重要工具,它为解决常见问题提供了标准化的解决方案,提高了代码的可维护性和可扩展性,提升了开发效率,促进了团队协作,提高了软件质量,并帮助开发者更好地适应需求变化。通过学习和应...

低代码开发当道,我还需要学习LangChain这些框架吗?| IT杂谈

专注LLM深度应用,关注我不迷路前两天有位兄弟问了个问题:当然我很能理解这位朋友的担忧:期望效率最大化,时间用在刀刃上,“不要重新发明轮子”嘛。铺天盖地的AI信息轰炸与概念炒作,很容易让人浮躁与迷茫。...

框架设计并不是简单粗暴地写代码,而是要先弄清逻辑

3.框架设计3.框架设计本节我们要开发一个UI框架,底层以白鹭引擎为例。框架设计的第一步并不是直接撸代码,而是先想清楚设计思想,抽象。一个一个的UI窗口是独立的吗?不是的,...

大佬用 Avalonia 框架开发的 C# 代码 IDE

AvalonStudioAvalonStudio是一个开源的跨平台的开发编辑器(IDE),AvalonStudio的目标是成为一个功能齐全,并且可以让开发者快速使用的IDE,提高开发的生产力。A...

轻量级框架Lagent 仅需20行代码即可构建自己的智能代理

站长之家(ChinaZ.com)8月30日消息:Lagent是一个专注于基于LLM模型的代理开发的轻量级框架。它的设计旨在简化和提高这种模型下代理的开发效率。LLM模型是一种强大的工具,可以...

取消回复欢迎 发表评论: