我这个项目需要多少台服务器?
这是我过去多年经常被问的一个问题,跟着这个问题一起来的,其实还有另外三个问题:1.需要多大硬盘存储容量才够?需要什么样的硬盘?硬盘是是不是需要做磁盘阵列?2.需要占用多少网络带宽?3.当用户不断增多,这个系统以后要怎么扩大?
常常有客户在重新开端做一个互联网项目标时候迟疑不决。不明确到底需要多少台服务器? 地球人都知道,需要多少台服务器是和用户数/访问量密切相干的。如果只有很少人访问你的系统,一台服务器确定是够的(这不是废话吗)。要害的问题是:一台服务器到底能支撑多少用户? 这个用户量到底怎么去评定,如果客户自己也不明确预期会有多少用户访问,那么我们又如何给客户一个确定的答复呢?客户往往在像我们咨询购置服务器的时候就会问到这些类似的问题,比如一个做在线游戏的客户,上来就问要买什么配置的服务器。后来自己弄明确了大概的用户量之后过来问我,游戏大概在线两百人左右,要什么服务器?像这种时时在线数据传输的游戏,对于服务器的配置确定请求高一些的,想要价格比较低买产品就达不到想要的效果!下面就说下用户模型和服务器恳求数。
一、用户访问模型
在答复这个问题之前,一定要先建立“用户访问模型”。同样多的用户数,如果这些用户平均1 个月只来访问1 次,那么实际上服务器没多少压力。但如果这些用户平均每几分钟都来访问1 次,显然请求就不一样了。所以,实际上“一台服务器到底能支撑多少用户”在不同的项目里,答案都是不一样的,因为每个项目标用户访问频率都不同,简略说就是“用户访问模型”不同。
1、日活用户量
“用户访问模型”里的第一个变量,通常可以简略表达为“平均每天的生动用户数”,简称“日活用户数”,意思就是每天来访问你这个系统的平均用户数,到底是多少个。“日活用户数”雷同的系统还不能阐明其“用户访问模型”就是雷同的。不同的系统,用户每天访问的时间区间、时间段长度是不一样的。比如浏览类的利用,可能碎片化散布在除了 睡眠时段的每个小时里;而外卖订餐类的利用,就只有中午、傍晚两个高峰时段加起来可能 不到3?4 个小时有访客。于是,外卖订餐类的利用,同样的“日活用户数”,在高峰时间对 服务器造成的访问压力可能要大于浏览类的利用,因为用户都挤在一起了。
2、每天高峰时间段长度
为了描写用户集中访问的程度,我们通常简略地用“每天高峰时间段长度”来定义。例如,我们可以假设“每天的访问量都集中产生在4 小时内”,或“每天的访问量都集中产生在5分钟内”(现场投票往往就是这样的)。
3、用户交互次数
不同的利用,用户的每次访问对系统所造成的压力,其实也是不同的。例如浏览类的利用,用户在打开一篇文章的时候会对系统发出一组访问恳求(若干图片文字的组合),然后用户在接下来的若干分钟里,就自己去浏览这篇文章了,浏览期间不会对系统产生任何新的负载(假定这个网页不会主动加载个什么动态广告之类的玩意)。而电商类的利用,可能用户要不停地在不同商品页面之间来回切换比较价格、规格等信息,平均可能浏览几十上百个商品详情页面才会下一张订单。于是,同样1 个用户在线应用雷同的时间长度,不同的利用会有不同的“用户交互次数”,我们在“用户访问模型”中定义为“平均每次访问的交互次数”。
4、平均每次恳求响应时间
同样1 次交互操作,不同的利用可能产生的负载强度也是不同的。还是以浏览为例,一篇文章如果包含10 个图片,打开这篇文章所需要的服务器恳求次数可能就是11(文章本身+10 张图片,疏忽可能有的其他特效脚本或广告)。而对监测健康状态的利用来说,可能每分钟才 会连接服务器1 次,把过去1 分钟内检测到的呼吸、心跳等信息上传到服务器。我们用“平 均每次交互所需恳求次数”来定义这种差别。最后,同样是一次恳求,不同的利用对响应时间会有所差别。动作类游戏利用可能请求响应时间在毫秒级,而普通商品查询的利用可以容忍的响应时间则可能在3-7 秒之间。我们把这 个差别定义为“平均每次恳求响应时间”。
二、服务器并发恳求数
有了上述变量的定义和评估之后,我们可以盘算出“服务器并发恳求数”:服务器并发恳求数=日生动用户数*平均每次访问的交互次数*平均每次交互所需恳求次数/(每天高峰时段小时数*3600)*平均每次恳求响应时间(秒)
盘算得到的成果,可以简略地用每1000 个“服务器并发恳求数”需要1 台服务器来估算所需服务器的数量。这里的“1000”只是一个很含混的参考值,实际上这和具体的“程序猿” 写程序的程度很有关系,也和具体安排系统软件的运维“攻城狮”的经验很有关系。
另外,服务器的强劲程度也很有影响,我们总不能请求一台1 万块钱单CPU 传统机械硬盘的服务器跟一台5 万块钱N 多CPU/内存并且装了SSD 硬盘的服务器有雷同的表现吧?“1000”这个数字可以简略看作是一台价格大概2 万元左右、双CPU 共8 核(在产型号)、16/32G 内存、10000 转以上机械硬盘配置的普通服务器的表现。
上述“用户访问模型”其实只是很抽象的概括,具体到不同的利用其实要引入很多具体不同的变量,既然是项目,必定是定制开发;既然是定制开发,就不可能有统一的公式,一定要具 体问题具体分析。