参考: https://www.cnblogs.com/zhangweizhong/p/5844961.html
  https://www.cnblogs.com/zhangweizhong/p/5772330.html

对于上面这个中小型Web架构来说如何对网站做容量预测:
  当你的BooS问你,我们的网站在目前的战略下,要做到30w以上的PV,你看我们需要买多少带宽合适?
  对于这个问题,相信若从来没有想过这个问题,你很可能一下子一脸懵逼,怎么测算?
  其实冷静下来,就会发现,不过就是一道小学数学题罢了。
不就是将30万PV的访问量,换算成带宽嘛,将问题拆分如下:
  1. 一天30万的页面访问(PV),转换为每秒访问量(QPS): 30万/(24 × 60 × 60)秒 = 3.47个请求每秒
  2. 知道了一秒大概是3.47个请求,将请求化整,就是4个请求每秒.
  3. 再来看看我们整个网站平均一个页面有多大,怎么看?Chrome等浏览器打开调试窗口(如:按F12) ,访问自己的网站,看一下最右下角的访问统计,你就知道自己当前访问的这个页面有多少资源,这一次访问发起了多少个衍生连接,以及这一次压缩传输的数据大小,已经资源到客户端后,解压到大小,我们这里主要关心压缩传输大小,通过对整个网站的网页做访问,记录这些值,并求出平均页面大小,接着就可以继续下面的计算了。

  

4. 知道了一秒大概有4个并发请求,而平均一个页面假如是0.4M,那么4个并发请求需要占用的带宽不就是 4×0.4M=1.6MB,在换算成比特,就是1.6MByte × 8bit= 12.8Mbps 这就是你的网站大概需要多少带宽。
    5. 引用道友的公式如下:
    网站带宽= PV / 统计时间(换算到S)*平均页面大小(单位KB)* 8

  假如现在你们公司的网站上线了,如下图这样的架构,有一天,你们的营销,产品什么的部门过来找你说,这两天要进行一个促销活动,我们的网站需要加多少服务器?
  听到这样的问题,你是否又会一脸懵逼。

    

 好接下来就来分析这样的网站架构,如何进行容量预测,还有老规矩抽象问题,拆分化
  1. 要测试容量,首先要对目前整个网站架构的实际峰值有较为准确的压测数据。
      如何获取较为准确的压测数据?
  1.1. 将上面结构简单化为单一web服务器
      下面以动静分离的结构来说明:
    单一静态Web服务器的压测:
     压测集群端------------httpd或Nginx-----css,js,html等静态资源服务器
                  \________图片服务器
   上面整个后端称为一个静态Web服务器
   当然,若网站规模没有这么大,我的css,js,html,图片都和Web服务器在一台主机上,那它也是静态Web服务器,上面只是将这些资源拆分开了,和一台没啥区别。

 要测试这个静态Web服务器的压力,你需要将自己的业务数据放到对应的位置,就像真实用户访问它一样。
    看看多大并发下,一台物理静态Web站点会挂掉,若是虚拟机也一样。
 然后,就需要分析多次压缩的结果,并计算出静态Web服务器的并发响应能力,接着计算出图片和css,js,html的服务器分别承受了多少压力,计算出它俩的比值,这样就知道瓶颈点所在了。

  1.2 计算动态Web服务器的压测值:
    压测集群端-------------------PHP-FPM/Tomcat---------关系型数据库
                  \____________session缓存数据库
                  |—————列式缓存数据库
                  。。。。。。
  这个结果的压测和静态区别不大,也是要单台测试,但这里需要注意,通常对于动态Web服务器来说,关系型数据库往往是其最脆弱的部分,而其它缓存数据库,如:   memcached, redis, mogondb等相对能承受的压力会更大,因为它们的数据都在内存中,而关系型数据库的数据通常在磁盘,因为太海量了。

  所以基于上面的理解,压测的关键点是在前端动态Web服务器自身和它与后端关系型数据库上。
  当前端动态Web服务器达到峰值后,大概有多少与关系型数据库的连接,计算出比值,在对关系型数据库中的业务数据做压测,看看其最大峰值是多少,就可以知道当前端动态Web服务器增加到多少时,就需要增加关系型数据库了,这里也要注意与这些缓存数据库的压力测试,和比值计算。

 2. 通过以上测试,可以知道当前网站中单台静态或动态Web服务器的峰值是多少。
   3. 接着就需要将动静合并为正常的网站服务器来压测
  压测集群端--------------负载均衡器--------------单台静态Web服务器
              \_________单台动态Web服务器

  然后在做网站峰值测试,看看整个Web站点达到峰值时,有多少流量被分到静态了,有多少流量被分到动态了,依然是计算出比值,注意这里说的峰值,是指静态或动态服务器宕机了。这样一来就知道整个网站的峰值是多少了,瓶颈点通常都是动态服务器。

4. 接着回答上面的问题,现在我们知道了网站的峰值,知道了动静分离的比值,若你只有一台Web服务器,不分什么动态静态,也一样,这更简单,不需要前面的负载均衡器,直接测试就是了,当你的Web服务器挂了,就是它的最大峰值了。

 4.1. 要增加多少台服务器?

  你首先需要从营销或产品哪里知道,本次活动范围有多大,让它给你一个预估值,即他们感觉这次可能有多少人会打开网站的活动页面,假如是50万,即50万的PV。
 4.2. 查询之前是否有过类似的活动统计数据,若有那是最好的,这样你就可以参考以前活动时,网站的最大峰值与平时网站访问量做个对比,并计算出平均比例,这样你就大概心中有数了,你就知道类似活动可能带来比平时访问量多几倍的流量了。
 4.3. 现在你知道了以前活动的峰值流量是平时访问流量的几倍后,你也知道了这次可能有大概50万的PV,你还知道我单台Web服务器最大能承受的并发流量,在结合当前网站的实际情况,主要是服务器台数,做计算,看看目前全部的服务器能承受多大的并发压力有多大。
 4.4. 计算一下50万PV能给单台Web服务器带来多大的并发压力:
 4.4.1. 计算方式就是 此次活动大概要持续多长时间,假如是1天,那么就需要知道黄金时间大概能持续多久,假如是6个小时。
  先计算
    (50万PV × 页面衍生访问数) / (6 × 60 × 60)秒 × 希望让用户打开页面的等待时间 × 因数 = 单台Web服务器要承担的并发压力。
    注: 因数: 就是前面计算出了的,以前活动时峰值并发流量和平时并发流量的倍数。

  当你计算出一台Web服务器需要承担的并发压力后,就可以根据当前网站的实际压测数据做评估,考虑下这些服务器运行了多久了等等因素后,在做以下计算:

  若没有做静态分离,就是单台Web直接上的,就可以这样计算:
    单台Web服务器需要承受的并发压力 / 网站已有服务器数量 = 实际每台服务器必须应该承受多少并发压力。

  若做了动静分离,或前端加了负载均衡,就需要这样算:
    根据负载均衡分担压力到后端的不同Web服务器的压力比值,算出每个后端服务器需要承担的负载压力:
    假如是动静分离,并且比例是8:2,即静态8,动态2
      单台Web服务器需要承担的总并发压力 × 80% = 静态Web服务器需要承担的压力
      单台Web服务器需要承担的总并发压力 × 20% = 动态Web服务器需要承担的压力

    接着根据动态Web服务器访问后端关系型数据库的压力比值计算出后端数据库是否能承受这样的压力。

知道了动静Web服务器需要承担的压力值后,需要根据之前对动静Web服务器的压测值,做对比,并计算出差距,然后在根据这个差距来计算超过这个差距,需要增加多少台服务器。并且也知道需要增加那些服务器了。

  最后:还有需要根据服务器的折旧率来评估一个比率,使用这个比率 乘以 单台动静服务器的压力,在来评估需要增加的服务器数量。

  由于本人能力有限,本文所有思路仅做参考,可结合实际来自行求证!

传统IT容量估算思路的更多相关文章

  1. 虚拟化原理到K8s实践经验路线总结

    以下这些内容均为自行学习总结的内容,很多内容没有写概括介绍,看起来可能会有些突兀,但并不影响整体性,我自己的学习经验告诉我,这些内容还仅仅是最精简的核心部分,周边还有很多可扩展内容,主要是操作系统生态 ...

  2. Java 领域从传统行业向互联网转型你必须知道的事儿

    我为什么要写这篇文章 武林中,"天下武功出少林"指各门各派的武功都与少林武学有一定的渊源,技术也是相同的道理,对于Java领域的应用而言,传统行业与互联网行业的技术都来自J2SE和 ...

  3. 第四章 电商云化,4.1 17.5W秒级交易峰值下的混合云弹性架构之路(作者:唐三 乐竹 锐晟 潇谦)

    4.1 17.5W秒级交易峰值下的混合云弹性架构之路 前言 每年的双11都是一个全球狂欢的节日,随着每年交易逐年创造奇迹的背后,按照传统的方式,我们的成本也在逐年上升.双11当天的秒级交易峰值平时的近 ...

  4. Hadoop学习笔记系列文章导航

    一.为何要学习Hadoop? 这是一个信息爆炸的时代.经过数十年的积累,很多企业都聚集了大量的数据.这些数据也是企业的核心财富之一,怎样从累积的数据里寻找价值,变废为宝炼数成金成为当务之急.但数据增长 ...

  5. ofo走出校园观察:市场定位导致产品错位?

    Ofo和摩拜单车虽然同样都是做单车共享,但实际上两者在最初的市场定位是有明显的差异的,因此提供的产品方案也存在巨大的差异. 市场定位不同,导致产品方案的巨大差异 摩拜单车一开始就定位于开放市场,充分的 ...

  6. 【转】磁盘I/O那些事

    背景 计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的CPU主频早已超过3GHz,内存也进入了普及DDR4的时代.然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时 ...

  7. CodeCraft-19 and Codeforces Round #537 Div. 2

    D:即有不超过52种物品,求容量为n/2的有序01背包方案数.容易想到设f[i][j]为前i种物品已用容量为j的方案数,有f[i][j]=f[i-1][j-a[i]]*C(n/2-j+a[i],a[i ...

  8. OCR技术浅探(转)

    网址:https://spaces.ac.cn/archives/3785 OCR技术浅探 作为OCR系统的第一步,特征提取是希望找出图像中候选的文字区域特征,以便我们在第二步进行文字定位和第三步进行 ...

  9. OCR技术浅探:特征提取(1)

    研究背景 关于光学字符识别(Optical Character Recognition, 下面都简称OCR),是指将图像上的文字转化为计算机可编辑的文字内容,众多的研究人员对相关的技术研究已久,也有不 ...

随机推荐

  1. framework7 总结之前遇到的问题和踩过的坑

    官网上写的案例比较简单明了,我这里就将我使用时踩过的坑做一个总结,与大家共勉! 最近使用framework,基本全靠浏览官方文档,当然,有遇到了许多的错误,开始不知道哪里出问题也很着急,到最后发现问题 ...

  2. 用lambda表达式写左联查询的示例

    需要完成的查询逻辑:A表内联B表,B表左联C表,A表左联D表,并且 C表的TotalCount>23,D表的ClassHour>8,最后查出A表的Id,代码如下: IQueryable&l ...

  3. node.js中使用路由方法

    1.数组的find方法还是不会用,改为filter 2.正规表达式还是理解的不好 //var myrouter = require("./myrouter"); //myroute ...

  4. JS 数组克隆方法总结(不可更改原数组)

    ES5 方法总结 1.slice let arr = [2,4,434,43]; let arr1= arr.slice();//let arr1 = arr.slice(0); arr[0] = ' ...

  5. html5调用手机震动

    在h5里面里面,浏览器对象有个vibrate属性.顾名思义,翻译过来就是震动的意思,这个api属性方法如下: 要调用的例子 if (window.navigator.vibrate) window.n ...

  6. Android-----RadioButton单选使用(实现简单温度转换)

    废话少说,直接上代码: xml布局文件代码: <?xml version="1.0" encoding="utf-8"?> <LinearLa ...

  7. crontab 定时任务简单备份数据库

    备份数据库/usr/local/mysql5.5/bin/mysqldump -uroot -p1234abcd wordpress >~/wordpress_20151206.sql 59 2 ...

  8. C语言printf函数转换说明表及其修饰符表

    请求printf()函数打印数据的指令要与打印数据的类型匹配. 例如, 打印整数时使用%d, 打印字符是使用%c. 这些符号被称为转换说明, 他们指定了数据转换称可显示的形式. 1. ANSI C标准 ...

  9. Anaconda安装、更新第三方包

    conda和pip简介 conda conda是包及其依赖项和环境的管理工具. 适用语言:Python, R, Ruby, Lua, Scala, Java, JavaScript, C/C++, F ...

  10. git使用过程中的若干问题笔记

    1.关于本地分支创建之后,如何在远程创建同名分支并完成本地分支到远程分支的push 首先创建本地库分支以dev为例 然后输入命令git push --set-upstream origin dev / ...