成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:請從并發壓力的角度分析下 MySQL 數據庫架構是如何演進的

數據庫 MySQL
你知道你連接的這個 MySQL 數據庫他到底能抗多大并發壓力嗎?如果 MySQL 數據庫扛不住壓力了,應該如何演進你知道嗎?

今天給大家分享一個知識點,是關于 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 數據更新日志同步復制給從數據庫,讓主從數據庫保持數據一致。

然后我們的系統其實可以往主庫里寫入,在從庫里查詢,此時就又可以緩解原來的主數據庫的壓力了。

如下圖:

分庫分表架構優化方案

再往下說,如果說即使是給主數據庫掛了從庫,然后接著并發壓力繼續提升,讓我們的主數據庫寫入壓力過大,每秒幾千寫入,又要扛不住了呢?

此時就只能上終極方案,分庫分表了,就是把主庫拆分為多個庫,每個庫里放一個表的部分數據,然后用多個主庫抗高并發寫入壓力,這樣就可以再次分散我們的壓力了。

如下圖所示:

總結

好了,今天分享的知識就到這里了,其實我們的數據庫架構演進基本上就是按照今天說的這個順序和思路逐步逐步的演進的。

剛開始你單臺數據庫機器抗幾千并發扛不住了,就按照業務系統拆分多個數據庫機器,然后再扛不住了,就上主從架構分攤讀寫壓力,再扛不住了就分庫分表,多個機器抗數據庫寫入壓力,最后總是可以用數據庫架構抗住高并發壓力的。

責任編輯:武曉燕 來源: 石杉的架構筆記
相關推薦

2018-10-22 14:28:26

面試官數據公司

2018-04-27 14:46:07

面試簡歷程序員

2021-09-27 07:11:18

MySQLACID特性

2015-08-13 10:29:12

面試面試官

2024-12-25 15:44:15

2024-05-11 15:11:44

系統軟件部署

2024-02-04 10:08:34

2024-09-19 08:10:54

2020-10-15 06:26:24

高并發場景冰河

2023-02-08 07:04:20

死鎖面試官單元

2020-09-24 06:39:58

MySQL數據庫

2024-10-15 10:00:06

2024-12-30 13:58:14

2022-03-30 07:28:24

MySQL數據庫ACID

2010-08-12 16:28:35

面試官

2021-07-06 07:08:18

管控數據數倉

2021-11-08 15:59:01

MyBatis關聯開發

2023-12-19 09:24:22

LinuxBIOSUEFI

2025-04-07 04:25:00

JDBCAPI加載器

2019-06-06 10:55:02

JDK高并發框架
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九精品在线 | 黄网站色大毛片 | 99久久精品免费视频 | 天天操夜夜操 | 欧美日韩在线一区二区 | 国产欧美日韩一区二区三区 | 国产片侵犯亲女视频播放 | 黄 色 毛片免费 | 亚洲美乳中文字幕 | 中文字幕av高清 | 亚洲乱码国产乱码精品精的特点 | 午夜影院在线观看免费 | 日韩精品一区二区三区免费视频 | 午夜国产一级 | 嫩草视频在线免费观看 | 国产亚洲一区二区三区在线观看 | 国产福利在线 | 欧美一级片a | 国产成人啪免费观看软件 | 亚洲精品日韩视频 | jlzzjlzz欧美大全| 91精品国产综合久久婷婷香蕉 | 亚洲免费影院 | 毛片入口 | 极品粉嫩国产48尤物在线播放 | 久久久久久国产精品免费免费 | 欧美精品一区二区在线观看 | 国产999精品久久久 日本视频一区二区三区 | 在线成人 | 国产一区| 自拍视频网站 | 九九九视频精品 | 亚洲成人激情在线观看 | 久久久91精品国产一区二区精品 | 国产精品观看 | 亚洲视频三区 | 激情福利视频 | 精品亚洲一区二区 | 天天操网| 亚洲欧美精品在线 | 羞羞视频在线观免费观看 |