暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

聊聊虚拟化和容器对数据库的影响

四海内皆兄弟 2022-01-04
1135

   虚拟机上运行数据库和物理机上运行数据库哪个好?这里说的好应该说是性能好,稳定性好。以我之前的认识是物理机较好。虚拟机运行的数据库在高负荷时候表现不佳。为什么?今天来谈谈。

   有一次我们谈及到物理机,有人问一个物理机的CPU相当于多少个虚拟机的CPU。说这个话其实就已经定性了,一个物理机的CPU会强于虚拟机的CPU,至于强多少那么是需要定量的。我们来看一个图,这是一台普通PC服务器。

这个是2个插槽的,也就是2C的物理机服务器,每个CPU8核,也就是16核,由于开了超线程所以逻辑上CPU是32个。假如通常用Oracle的CPU其实我也不知道应该是2还是32.不过国人这种通常是以2来算的。

这个机器上开了多少机器?

从导出的列表上看有114个CPU(远大于32个),212G内存(也远大于实际)。为什么可以做到这个?这就从CPU的原理说起。(我爸以前总说我不要开很多东西,计算机是分时处理系统。他学计算机的时候我还没出生)。这是什么意思?

      我们有的时候听着音乐,写文档,还能开着网页和下载电影,同时还聊天。就是同一时刻(我们人的)计算机在多很多事情。其实现代计算机普通的CPU一般每秒能运算几亿到几十亿次,比如我们用一个CPU边放视频边和别人打字聊天,CPU就会以极快的速度来切换两个任务(其实任务的切换是操作系统来做的,操作系统就是计算机的管家,管理和调度计算机资源,让计算机资源更高效地被我们利用),快到让你感觉两件事情好像在同时发生的。因为她快到我们无法感知到他切换了。我们的交流电220V 50赫兹。也就是每秒切换50次,我们分不出来,觉得他是一直恒定的。同样计算机也是快的我们以为她是持续工作,其实他在嘲笑人类,我换来换去你都不知道。说这个有什么用呢?有。虚拟化就是在这个上面做文章,我32C的物理机虚拟出来114个CPU,也就是说只要不是上面的30个多机器的都在同一时(每一个微妙纳秒)刻满负荷运行,他是可以来回切换的,而我们又感知不到。所以从这个角度来说,这个上面虚拟出来1000个CPU也是可以的。那么一个物理机的CPU对应多少个虚拟机的CPU就没有一个准确的数据,甚至可以说没法对比。

     大家用过云盘吧?看上去每个人都有好几T。其实也是商家知道不是所有人都同时会用满。所以10T可以分给1000个人。只要不是说有人都用10G以上就可以支持。我2013年参加SACC的时候听到360的人说(那时候360还有云盘)。他们的硬盘使用率只要超过70%就是事故。所以你能理解了吧。因为大家同时发力就会让泡沫破灭。虚拟化很大程度上是超卖了计算和存储资源。这里用泡沫形容不知道是不是贴切。虚拟化你就当是是保险吧。不能所有投保人同时都出事了。

      为什么我说虚拟化不适合数据库。数据库是高(CPU IO)密集度产品。计算资源和存储资源有的时候独享还不够,更别说来共享分出去了。专心做本职工作效率高还是不停的切换效率高?

    同样docker容器也是一样。但是非正式环境学习拿来用没有问题。每个容器就会一个进程,每个进程都是共享操作系统的资源的。正式环境如果说没什么业务,那个业务人工做都来得及,用虚拟化和容器也不是不行。(估计没人愿意承认自己业务这么小)

     说回数据库,PostgreSQL和MySQL都是有多个database,Oracle是好多PDB。在物理机环境下,每个子db可能峰值不一样,这样在一个物理机下,不同时刻运行的子db峰值不一样,所以能够内部平衡一下。如果全面满负荷那就没办法了。我见过有人在Oracle的数据库上特意去绑定CPU的,就是为了这个。虚拟机不代表云,云的特点是弹性伸缩,快速获得。但是一般VM是做不到自动伸缩的。所以虚拟机申请环境都是按照峰值申请,日常是浪费的。云是可以做到。在CPU 内存和磁盘达到最大范围临时扩大一下,然后再回收。这部分弹性计费。

    仅从技术上以我个人观点说明物理机为什么比虚拟机更加合适数据库。或者说数据库部署在虚拟机上的弊端。所以单纯以CPU来衡量物理机甚至是一体机与虚拟机的对比其实他们不在一个频道上。

文章转载自四海内皆兄弟,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论