• 高并发系列文章第一篇:高并发和大流量解决方案


    本文将从宏观的角度上全方位剖析高并发和大流量解决方案

       从一个面试题开始讲解:PHP如何解决网站大流量与高并发的问题?

       其实这个问题不光考察php的方向,更多的是考察你对高并发架构优化的方式和能力。

       主要考察点如下:

             一、高并发架构相关概念

    互联网中的高并发通常指的是并发访问,也就是在某个时间点,有多少个请求来同时访问;

    通常如果一个系统的日PV在千万以上,就有可能是一个高并发的系统,但是如果有些公司完全不走技术路线,全靠机器堆,那么这个不在我们所说的高并发的讨论范围、纯属人傻钱多的 

    1、对于高并发的问题,我们具体应该关心什么?

         QPS:每秒钟请求或者查询的数量,在互联网领域,指的是每秒响应的请求数(通常指的是HTTP请求); 这是一个非常重要的指标,通常在进行理解并发数在哪个点该做什么的优化可以根据QPS的量进行操作;

         吞吐量:单位时间内处理的请求数量(通常由QPS和并发数来决定的)

         响应时间:从请求发出到收到响应花费的时间。例如系统处理一个HTTP请求需要100ms,那么这100ms就是系统的响应时间;

         每个资源的响应时间如下图所示,

     
     

     PV:综合浏览量(Page View),即页面浏览量或者点击量,一个访客在多长时间内访问的的页面数量;用户每1次对网站中的每个网页访问均被记录1次。用户对同一页面的多次访问,访问量累计。

    UV:独立访客( UniQue Visitor),即一定时间范围内相同访客多次访问网站,只能算为1个独立访客;其实跟IP类似;

    带宽:计算带宽大小需要关注两个指标 ,峰值流量和页面的平均大小;

    日网站带宽 = PV / 统计时间(换算成秒)* 平均页面大小(单位KB)* 8

    此处澄清一个概念QPS并不等于并发链接数

    QPS是每秒HTTP请求数量,并发链接数是系统同时能够处理的请求数量

    峰值(每秒请求数)QPS  = (总PV数 * 80%)/ (8小时秒数  * 20% )

       解释:通常80%的访问量都集中在20%的时间内;俗称二八定律 8小时是做了简单的估计

      2、 那么对于QPS来说 我们要做一个压力测试  

         为什么要做压力测试:

      (1)测试能承受的最大并发数

      (2)测试最大承受的QPS的值

                 比如说我们日QPS为20000 单机峰值QPS能承受500 那么最少得40台才能撑住

        常用的性能测试工具如下:ab、wrk、http_load、Web Bench、Apache JMeter 

         性能测试工具非常多 我们通过ab来讲解:

        ab 全称(apache benchmark):是apache官方推出的工具,可以创建多个并发访问线程,摸你多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的访问压力,也可以来测试 nginx、lighthttp、tomcat、IIS等其他的web服务器的压力。

        ab的使用:模拟并发请求100次,总共请求5000次

        注意事项:

         1)测试机器与被测试机器要分开 

         2)切记不要对线上服务做压力测试

        3)观察测试工具ab所在的机器,以及被测试的前端机的 CPU、内存、网络等都不能超过最高限度的75%  可以通过top、htop、glances命令来观察

    测试:ab -c 50  -n 1000  http://192.168.56.10:82/index.html

     
     

    QPS达到极限我们该怎么做:

      随着QPS的增长,每个阶段需要根据实际情况来进行优化,优化的方案也与硬件条件,网络带宽息息相关。通常在对QPS进行优化的时候阶段也是不一样的

    1、QPS达到50 

         可以称为小型网站、一般的服务器都可以轻松应付

    2、QPS达到100

          假设关系型数据库的每次请求需要在0.01秒完成,如果单个页面只有一个SQL查询,那么100QPS意味着1秒要完成100次请求,但是此时我们并不能保证数据库查询能完成100次

          优化方案:数据库缓存层(redis、memcache)、数据库的负载均衡流量进行分散

    3、QPS达到800

          假设我们使用的是百兆带宽、意味着网站出口的实际带宽是8M左右,假设每个页面只有大小10KB,在这个条件下,百兆带宽已经被吃完、对于带宽来说已经是极限

          优化方案:CDN加速访问、负载均衡

    4、QPS达到1000

          假设使用Redis缓存数据库查询,每个页面对Redis的请求远大于直接对DB 的请求 ,那么Redis的悲观并发数大于在4w左右,但有可能在之前内网带宽已经呗吃光,表现出不稳定

         优化方案:静态HTML缓存

    5、QPS达到2000

         在这个级别下、文件系统访问锁都成了灾难

         优化方案:做业务分离、分布式存储

             二、高并发架构解决方案案例

        1、流量优化:防盗链处理 

        2、前端优化:减少http请求、添加异步请求 、启用浏览器缓存(添加缓存过期时间)和文件压缩(图片压缩、文件压缩、nginx gzip)、CDN加速、建立独立的图片服务器(减少IO消耗、集群处理优化cpu、IO方面)

        3、服务端优化:页面静态化、并发处理、队列处理

        4、数据库优化:数据库缓存(Redis、MongoDB)、分库分表(水平、垂直拆分)、分区操作、读写分离、负载均衡

        5、web服务器优化: 负载均衡(7层Nginx Proxy、 4层LVS)

    本文就到此结束、下篇开始会对上述方案逐一来详细的进行解答、请耐心等待。。。

     



    作者:meng_philip123
    链接:https://www.jianshu.com/p/6f49ed2bf4ca
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    (转)eclipse使用技巧
    smartupload 上传文件时 把页面编码改成gbk 解决乱码
    引入外部js如何通知页面其编码格式
    OGNL表达式中的#、%和$
    javaweb提示框问题
    理解iOS 8中的Self Sizing Cells和Dynamic Type
    淘宝内部的兼容大屏幕iPhone设计流程
    ReactiveCocoa & MVVM 学习总结一
    ReactiveCocoa & MVVM 学习总结二
    Objective-C GCC Code Block Evaluation C Extension ({…})语法
  • 原文地址:https://www.cnblogs.com/DreamRecorder/p/9242953.html
Copyright © 2020-2023  润新知