欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送!
在我后台回复 「资料」 可领取
编程高频电子书
!
在我后台回复「面试」可领取硬核面试笔记
!文章导读地址:点击查看文章导读!
对于大多数在校生来说,使用 MySQL 一般就是在 Linux 上安装一个 MySQL,对于生产环境中具体使用什么样的配置去安装 MySQL 以及什么配置对应可以抗下多少的并发请求不是太清楚,在本章会给出生产环境中数据库如何进行规划以及对于数据库的压测和监控如何实现的解决方案!
在生产环境中,如果需要去部署一个 MySQL 数据库,该选用什么样的机器配置呢?
这里会给出一个经验值,在以后真正需要线上部署时,可以根据系统并发量的大小来选择数据库所部署的配置
一般来说,Java 应用部署时,通常会选择 2 核 4 G 或者 4 核 8 G 的机器来进行部署
而数据库部署时,选用的配置相对来说要更高一些,通常选择 8 核 16 G 或者 16 核 32 G
上边说的部署配置是基于系统并发访问量比较大的情况,比如说 每秒有几百上千 的时候,需要比较高的配置,而像平常做一个简单的学习项目,没有什么并发量,数据量也不大,我们部署的目的是只要可以跑起来就行,所以一般是 1 核 2 G 或者 2 核 4 G 的机器就可以部署了
以大量的高并发线上系统的生产经验来看:
Java 应用部署在 4 核 8 G 的机器上,每秒抗下 500 左右的访问量一般来讲是没有问题的
为什么要说是一般来讲呢?
因为 Java 应用每秒可以抗下多少的并发请求,一方面是和部署的机器配置有关,另一方面还和 Java 应用本身相关
如果在 Java 应用中,一个接口要 1s 的时间才可以处理完毕,那么一台机器每秒也就能处理 100 - 200 个左右的请求
但是如果一个接口只需要 100 ms 就可以处理完毕,那么一台机器每秒处理几百个请求还是没有太大问题的
那么如果有一台 4 核 8 G 的机器部署 Java 应用,每个请求 0.01ms 就可以处理完毕,可以扛到每秒几千甚至上万的并发吗?
其实是不可以的,在实际环境中不能只看请求的处理时间,因为该请求可能还会进行磁盘 IO、网络 IO、内存占用、CPU 消耗,还要考虑这些因素带来的影响
在实际生产环境中 ,一台 4 核 8 G 的机器在每秒抗 500 的并发请求时,它的 CPU 负载就已经很高了,如果请求再多一些就可能导致机器宕机
如果 Java 应用比较吃内存的话,也会导致内存的占用率非常高,导致 JVM 频繁进行垃圾回收
所以基本上 500+ 的请求就已经达到了极限了,很难再提高并发请求的数量
在高并发场景中,我们要了解 Java 应用的性能瓶颈在哪些方面,才可以针对性能瓶颈进行优化!
对于 Java 应用来说,如果所有的操作都在内存中操作,这样情况下性能是非常高的
所以说 Java 应用的性能瓶颈一般不在于内存中的操作,而是比较耗时的 网络操作 ,Java 应用收到的每一个请求,都会再发送网络请求到数据库中,压力最终还是落在了数据库中
所以在整个 Java 应用中,性能瓶颈主要是 Java 应用的网络请求 和 数据库
而 Java 应用的所有请求最后都是落到了数据库中,而数据库还需要做许多的数据操作以及磁盘 IO,因此数据库的配置一般都要比 Java 应用更高
根据以往的生产经验来看,数据库的机器配置为 8 核 16 G 的话,每秒抗下 1000 - 2000 的请求是没有太大问题的,如果请求再多一些的话,整个数据库的 CPU、磁盘 IO、内存负载都会处于比较高的状态,可能会导致数据库的宕机
如果数据库的机器配置为 16 核 32 G 的话,每秒抗下 2000 - 4000 的请求是没有太大问题的
数据库硬盘的选择
并且数据库的磁盘 尽量采用 SSD 固态硬盘 而不是机械硬盘,数据库中是要做许多磁盘 IO 操作的,磁盘的 IO 速度对数据库的性能会产生比较大的影响