MySQL:真实生产环境下数据库机器配置如何规划

生产数据库一般用什么配置的机器

首先我们要明确的一点是,如果你负责的系统是一个没什么并发访问量,用户就几十个人或者几百个人的系统,那么选择什么样的机器去配置数据库,影响都不大。因为这种系统可能每隔几分钟才会有一波请求发到数据库上去,而且数据库里一张表也就几百几千的数据,数据量很小,并发量很小,操作频率很低,只不过系统的业务逻辑很复杂而已。对于这类系统的数据库机器选型,就不在我们的考虑范围之内了。

我们主要关注的是有一定并发量的互联网类的系统,对数据库可能会每秒几百,每秒几千,甚至每秒上万的并发请求量,对于这种场景下,我们应该选择什么样的机器去部署数据库,才能比较好的抗下系统压力呢?

普通的java应用程序部署在机器上能抗多少并发?

一台机器能抗下每秒多少请求,往往是跟你每个请求处理耗费多长时间是关联的。但是根据经验观察而言,4核8G的机器部署普通的java应用系统,每秒大约抗下几百的并发访问,从每秒一两百请求到每秒七八百请求,都是有可能的,关键是看你每个请求处理需要耗费多长时间。

高并发场景下,数据库应该用什么样的机器?

通常推荐的数据库至少是选用8核16G的机器,或者是16核32G的机器

因为对于java应用系统,主要耗费时间的是java系统和数据库之间的网络通信。对java系统自己而言,如果你仅仅只是系统内部运行一些普通的业务逻辑,纯粹在自己内存中完成一些业务逻辑,这个性能一般是非常高的。

基本上对于应用系统接收到的每个请求,耗时最多的还是发送网络请求到数据库上去,等待数据库执行一些SQL语句,返回结果给应用程序。

所以我们常说的一个java系统压力很好,负载很高,其实主要的压力和复杂都是集中在你依赖的那个数据库上的。

因为你执行大量的增删查改的SQL语句的时候,MySQL数据库需要对内存和磁盘文件进行大量的IO操作,所以数据库往往是负载最高的。而应用系统一般不会直接大量的读写本地文件进行耗时的IO操作。

所以往往对一个数据库而言,都是选用8核16G的机器作为起步,最好是选用16核32G的机器更加合适一些,因为数据库需要执行大量的磁盘IO操作,他的每个请求都比较耗时一些,所以机器的配置自然需要高一些了。

一般8核16G的机器部署的MySQL数据库,每秒抗个一两千并发请求是没问题的,但是如果你的并发量在高一点,假设每秒有几千并发请求,那么数据库就有点危险了,因为数据库的CPU、磁盘、IO、内存的负载都会很高,弄不好数据库就会因为压力过大而宕机。

对于16核32G的机器部署的MySQL数据库而言,每秒抗个两三千,甚至三四千的并发请求也都是可以的,但是如果你达到每秒上万请求,那么数据库的CPU、磁盘、IO、内存的负载瞬间都会飙升到很高,数据库也是可能会扛不住宕机的。

另外对于数据库而言,如果可以的话,最好是采用SSD固态硬盘而不是普通的机械硬盘,因为数据库最大的负载就在于大量的磁盘IO,它需要大量的读写磁盘文件,所以如果能使用SSD固态硬盘,那么数据库每秒能抗的并发请求量就会更高一点。

总结

(1) 在真实的项目中,第一件事情就是申请数据库机器

  • 一般来说我们需要申请8核16G或者16核32G的高配置机器下来,甚至要机器全部搭配SSD固态硬盘,然后让DBA兄弟在申请下来的机器上安装和部署一个MySQL,同时启动MySQL数据库。
  • 如果你申请的是8核16G的机器来部署MySQL,那你作为项目的Java架构师,心里大致就该知道你这个数据库后续每秒抗个一两千请求还是可以的,如果你申请的是16核32G的机器,那你心里就知道妥妥可以抗个每秒两三千,甚至三四千的请求,你心里就有数了,这是你要做到的

(2)把机器交给专业的DBA,让他部署MySQL

  • 其次你要知道的是,你申请一台机器下来之后,接着这台机器在有一定规模的公司里,一定是交给公司专业的DBA去安装、部署和启动MySQL的,DBA这个时候会按照他过往的经验,用自己的MySQL生产调优参数模板,直接放到MySQL里去,然后用一个参数模板去启动这个MySQL,往往这里很多参数都是调优过的。
  • 而且DBA还可能会对linux机器的一些OS内核参数进行一定的调整,比如说最大文件句柄之类的参数,这些参数往往也都是需要调整的。
  • 接着当DBA搞定这台机器上的数据库之后,就会交给你来使用,你就知道这台机器的地址和用户名密码,然后就的Java系统就可以直接连接上去,就可以执行各种各样的SQL语句去实现业务逻辑了。

(3)有了数据库之后,还需要先进行压测

  • 当你手头有一个可以使用的数据库之后,就可以基于它开发应用系统了吗?
  • 并不是这样,我们必须先对这个数据库进行一个较为基本的基准测试
    • 也就是说,你得基于一些工具模拟一个系统每秒发出1000个请求到数据库上去,观察一下他的CPU负载、磁盘IO负载、网络IO负载、内存复杂,然后数据库能否每秒处理掉这1000个请求,还是每秒只能处理500个请求?这个过程,就是压测。
    • 你不光用工具每秒发送1000个请求,还可以模拟每秒发送2000个请求,甚至3000个请求,逐步的测试出来,这个数据库在目前的机器配置之下,他大致的一个负载压力如何,性能表现如何,每秒最多可以抗多少请求。
    • 问题是:为什么刚开始就要对数据库搞一个基准压测?你完全可以等Java系统都开发完毕了,然后直接让Java系统连接上MySQL数据库,然后直接对Java系统进行压测啊!
      • 这是因为数据库的压测和Java系统上的压测其实是两回事,实现你需要知道你的数据库最大能抗多大压力,然后再去看你的系统能抗多大压力。
      • 因为有一种可能是,你的数据库每秒可以抗下2000个请求,但是你的Java系统每秒只能抗下500个请求,这也是有可能的。所以你不能光是针对Java系统去进行压测,在那之前也得先对数据库进行压测,心里得有个数。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值