查看文章 |
最具有权威性的虚拟盘终极教程连载——十年网吧经验4
2009-09-17 17:20
第七篇:<虚拟盘的负载能力:上篇> 回答一些朋友的问题 22楼的朋友说: 为了更好的利用客户机硬盘空间,我等还是采用本地加虚拟盘这种方式为客户提供游戏服务。 我的回答:如果你喜欢游戏运行的慢一点,如果你喜欢让顾客等着游戏更新,如果你喜欢那些麻烦事情,我是不会拦着你的,只要你喜欢,你安心,我没有意见的. 42楼的朋友说:楼主 洋洋洒洒一大篇理论,感觉都是纸上谈兵而已。就像无凭无据,做什么说什么都是拼自己脑袋瓜想出来的. 我的回答:我的理论我都实践过,从07年下半年开始,我就在自己的网吧里使用这样的方案,那时候的虚拟盘软件没有一个能符合我的需求,于是我尝试了很多种软件,最终在我组合了3种虚拟盘软件,加上SUPERCACHE,做出了一个无比复杂的庞大体系,虽然最终效果很好,但是过于复杂的体系导致完全不能推广,直到今天,我能将方案简化到人人都能看懂的时候,才能拿出这篇文章. 为了能把这个问题说的更加简单明了,我从初稿开始,到现在一共修改了12次,测试那些数据,至少花费了近2个月的时间.如果这样纸上谈兵的话,只能说我的能力实在太差了,您实在是对我期望太高了点. 43楼的朋友说:…. 我的回答:同上 44楼的朋友说:你SA不SA啦,人家在顺网论坛发,这篇文章一看就知道是为顺网的虚拟盘写的,我觉得下几篇肯定就是为网维大师漂白的. 我的回答:这种方法是可以用在任何虚拟盘软件上得到,虽然我拿网维大师的虚拟盘举例,但是你完全可以用别的软件.需要理解的是思路和方法,懂得方法,用别的软件也可以达到同样的效果.网维大师的虚拟盘是完全免费的东西,用或者不用,只是你自己的选择. 50楼的朋友说: …………….(太长了,我不引用了) 我的回答:你的方法,我只能说,像是做梦一样.你最后一句话,让我被雷到了…这样奢侈疯狂的投资,居然只是和本地硬盘差不多?大哥,你看了我的文章了吗?你知道本地硬盘有多慢吗? 60楼的朋友问:IOPS是什么 我的回答:IOPS意思就是指每秒硬盘所能完成的IO次数,就是读取或者写入的次数,这个数值随着测试条件不同,会有很大的差别,我按照单线程,64k的条件来测试.一般的专业测试是32线程,512字节的条件来测试.IOPS可以用IOMETER这个软件来测试. 64楼的朋友问:那么硬盘到底用多少字节的好呢? 我的回答:格式化的时候字节越小越省空间,字节越大,出盘越快.参考值:500G用8K,1T用16K,1.5T用32K. 72楼的朋友说:请推荐个150台电脑的虚拟盘配置和做法~! 我的回答:我在文章最后会给大家一些具体的配置参考,但是只是照单抓药是没有用的,每个人的具体情况不同,正确的方法应该是理解方案的思想和精神,自己根据实际情况进行灵活的组合. 83楼的朋友说:讲了这么多,还没讲到重点了。。以上讲的就是随机读取是很重要的,普通硬盘随便性能是很差的。。阵列是没有用的,SSD才是牛B的。 我的回答: 请允许我表达对您的敬意,我洋洋洒洒写了万余字,您用乐5句话,40个字,就能说的明明白白,清清楚楚,由衷的佩服啊! 86楼的朋友说:这个方案感觉不怎么对劲 我的回答:希望您能告诉我哪里不对劲,我赶紧再改改. 以上,希望朋友们能踊跃提问,我当尽力解答,本人工作繁忙,如不能及时回复,还请谅解. 以下,继续上一篇的话题,补充一张测试截图. 虚拟盘的速度实测 由上一节,我们得到一些基本的结论,在虚拟盘读取的所有环节里,硬盘是速度上的最大瓶颈,所有其他的因素,包括网卡,网线,交换机,软件性能,操作系统平台等等,它们加起来所造成的延迟不到硬盘的1/10,所以,要提高虚拟盘最终读取速度的关键就在于硬盘. 我们来看一个典型的测试,在客户机上,用HDTUNE对虚拟盘进行随即读取测试.我们用内存进行读取数据的缓存,这样测试到的数据全部是从服务器中的缓存发出的,结果如下:
结果可以清晰的看到,在64K区块测试的时候,延迟1.2毫秒,是sata硬盘的1/10,同时流量也达到了53.6MB/S,这个速度是普通的SATA硬盘绝对无法望其项背的.是SATA硬盘的10多倍,是SAS硬盘的5倍,已经非常接近于固态硬盘的读取速度了. 虚拟盘有多少的负载能力呢? 要回答这个问题,我们先讲几个概念,如果不能明白这几个概念,那就难以理解整个体系的奥秘所在. 基本名词解释 什么是缓存? 在网维大师的虚拟盘中,会将部分物理内存用于存储最常被读取的数据,当客户机请求读取数据时,服务器会先在这些内存中进行寻找,如果在内存中有这些数据,则直接由内存发出,只有内存中没有该数据,才会去硬盘中读取. 什么是缓存命中率? 是指所有服务器发出的数据当中,有多少比例的数据是从内存中发出的,越高意味着性能越好. 比如50%的命中率意味着,每从服务器发出100M数据,其中50M是从内存中发出的,只有50M是从硬盘中发出的,这就意味着与不使用缓存的服务器而言,我们服务器的负载能力扩大了2倍. 如何提高缓存命中率? 要想得到一个较高的缓存命中率,首先得有一个好的缓存算法,有了好的缓存算法能很大的提高命中率。其次,就是装上尽可能多的内存。 网吧中的真实负载情况 要想明白一个虚拟盘服务器到底能带多少机器,首先得知道负荷会有多大,在一个典型的中型网吧里,装了1.8T的游戏,究竟在营业的时候,会读取多少的数据呢?这是很关键的问题,不知道朋友们是否认真的研究过这个问题,但是至少我在做这个测试之前,我还真的不知道这个准确的数字. 好吧,我们来看看这个测试,这个测试网吧是个典型的中型网吧,机器110台,来的客户有学生,有民工,还有些上班族,生意一般,不好也不差.我们将所有的游戏均部署在虚拟盘上,统计了2天的数据. 注意:是所有1.8T的游戏,在客户机的本地硬盘上,一个游戏都不装! 2天内所有的游戏读取数据量为448G. 根据收费系统的统计,2天内所有的客户机在线机时总共为1730小时. 这样计算下来每秒每客户机的流量为: 448G/(1730小时*3600秒)= 75K/S 后来我们也测试了一些其他的网吧,虽然不同的网吧,不同的玩家行为会造成一些差异,但是大体上结果是相似的. 传统的虚拟盘的负载能力 根据上述的一个网吧用户平均读取流量,我们就可以评估一下,传统的虚拟盘的负载能力. 我们考虑一个简单的模型,假设这个传统的虚拟盘服务器,只有一个希捷7200.11硬盘,同时没有任何缓存机制,这种情况下,我们简单的算一下,这个服务器能带起多少机器. 对这样一台服务器来说,因为硬盘的随机读取的能力仅为4MB/S, 网络和其他因素应该可以轻松的达到4MB/S的能力,因此我们完全可以认为该服务器的性能瓶颈集中在硬盘上. 按照4MB/S的硬盘能力,我们计算硬盘的极限承受能力: 4M(硬盘随机性能)/75K=54台. 意思就是说,按照75KB/S的平均读取需求,该服务器的硬盘最多能承受54台机器在线. 实际上,为了应付突发的情况,我们应该为服务器留点余量,不能让服务器总是工作在满负荷情况下,假设按3倍的余量计算: 54/3=18台. 结论:这样的虚拟盘服务器,在18台机器的负载情况下,大部分的时候,性能和本地硬盘相当.这样的结论和我们经验值是比较接近的.在实际网吧应用当中,我们是不敢将所有游戏都部署在这台机器上,这点负载能力,太不够用了,那么,怎么办呢? 89楼的朋友在看到第六篇的时候,已经给出结论了,要提高虚拟盘的性能,出路就2个: 一个是用固态硬盘,二是用高内存做缓存,但是这两种办法都是非常昂贵的手段,网吧花的起这个钱吗? 我的办法就在下一篇: 第八篇:<虚拟盘的负载能力:下> 未完待续 |
最近读者:
