对于很多Java工程师来说,系统开发好准备上线时,随便找台普通的机器安装下MySQL,让自己的系统连上去,就开始使用了,根本不关心机器的具体配置和性能。

如果你的系统没什么并发量,用户量就几百几千个,那就没必要纠结选择什么样配置的机器安装MySQL,选个普通的机器就可以直接使用。

但本着专业的精神,希望大家以专业的方式做专业的事。你可以不用,但你最好会用。

所以当你有一个生产库后,首先要做的事情就是设计压测方案,以及对数据库的可视化监控。

做完了这些之后,才应该是让你的系统连上MySQL数据库,进行各种业务逻辑的操作。

生产环境一般用什么配置的机器?

我将给大家说一些我们的经验值,告诉大家,什么样配置的机器部署MySQL数据库,大概能抗下多少的并发。

以后当你看到机器的配置后,就心里有底,申请数据库的时候,你就知道这台MySQL数据库能抗下多少并发量。

如果你的业务系统没什么并发量,就几百个几千个人,选择什么样的机器部署数据库,都没什么影响。

而且这种业务系统的数据库,数据量很少,一张表也就几百条、几千条数据,操作频率低,并发量小。

我们应该关注的是有一定并发量的业务系统,对数据库的访问可能每秒几百、几千,甚至每秒上万并发量,我们应该选择什么样的机器去部署数据库?

业务系统机器配置选型和并发量

Java业务系统部署的时候,选用的机器配置,一般2核4G和4核8G较多,数据库一般部署在最低配置是8核16G机器上,一般16核32G。

一般Java系统部署在4核8G的机器上,每秒抗500左右的并发,差不多是合适的。当然,也要实际考虑很多因素,比如每个请求处理的业务逻辑复杂度,如果每个请求1s能处理完,那么你一台机器每秒也许可以处理100个请求,如果你每个请求要花费100ms,那么你一台机器每秒也许可以处理好几百个请求。

所以,一台机器每秒能处理多少请求,是跟你每个请求处理时长是有关的。一般而言,4核8G的机器部署Java业务系统,每秒抗下一两百到七八百的并发量都是可能的。

数据库应该选用什么样配置的机器?

上面说过了,数据库最少应该选用8核16G的机器,甚至16核32G的机器。

因为,对于Java业务系统,主要耗时的是java系统和数据库之间的通信交互,对Java系统本身而已,如果只是系统内部运行一些业务逻辑,都是在内存中操作,这个性能是比较高的。

Java系统耗时最大的还是把请求发到数据库上,执行一些SQL。

所以我们常说,一个Java系统压力很大,负载很高,主要是说Java系统压力集中在依赖的数据库上。

因为你执行大量增删改查的SQL语句时,MySQL数据库需要对内存和磁盘文件进行大量的io操作,它的每个请求都比较耗时,所以数据库往往是负载最高的,对配置的要求自然比较高。

而Java系统一般不需要直接进行大量耗时的io操作。

一般8核16G的MySQL数据库,每秒能抗个两三千的并发,甚至三四千的并发。当然你的SQL语句不能过于复杂,不能有大量的计算和多表关联查询。

另外,对数据库而已,最好采用SSD固态硬盘,而不是采用普通的机械硬盘,因为数据库最大的负载就在于大量的磁盘io,他有大量的磁盘读写操作,所以如果能使用SSD固态硬盘,那么你的数据库性能会更高,每秒能扛下的并发也会更高一些。

最后再补充一点,一般数据库建议安装在物理机上,不建议安装在docker、k8s这样的容器上。

这就是对MySQL数据库推荐的机器配置,以及能抗下的并发量的经验分享。

END