• 高并发和大流量解决方案


    高并发架构相关概念

    并发

    并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,并且这几个程序都是在同一个处理机上运行,担任一个时刻点上只有一个程序在处理机上运行。

    我们所说的高并发

    并发、高并发,通常指并发访问,也就是在某个时间点,有多少个访问同时到来
    通常如果一个系统日PV在千万以上,有可能是一个高并发的系统

    高并发问题,关心问题:

    • QPS:每秒钟请求或者查询的数量,在互联网领域,指每秒钟请求数(指HTTP请求)
    • 吞吐量:单位时间没处理的请求数量(通常由QPS与并发数决定)
    • 响应时间:从请求发出到收到响应花费的时间。例如系统处理一个HTTP请求需要100ms,这个100ms就是系统的响应时间
    • PV:综合浏览量(Page View),即页面浏览量或者点击量,一个访客在24小时内访问的页面数量
      同一个人浏览你的网站同一页面,只记作一次PV
    • UV:独立访客(UniQue Visitor),即一定时间范围内相同访客多次访问网站,只计算为1个独立访客
    • 带宽:计算带宽大小需关注两个指标,峰值流量和页面的平均大小
    • 日网站带宽= PV/统计时间(换算成秒)平均页面大小(单位KB)8
      峰值一般是平均数倍数,根据实际情况来定
    • QPS不等于并发连接数
      QPS是每秒HTTP请求数量,并发连接数是系统同时处理的请求数量
    • (总PV数80%)/(6小时秒数20%)=峰值每秒请求数(QPS)
      80%的访问量集中在20%的时间
    • 压力测试:测试能承受的最大并发,测试最大承受的QPS值

    常用性能测试工具

    ab、wrk、http_load、Web Bench、Siege、Apache JMeter

    ab

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

    ab使用

    模拟并发请求100次,总共请求5000次
    ab -c 100 -n 5000 待测试网站

    注意事项

    • 测试机器与被测试机器分开
    • 不要对线上服务做压力测试
    • 观察测试工具ab所在机器,以及被测试的前端机的CPU,内存,网络等都不超过最高限度的75%

    ab安装

    apache 自带

    > yum -y install http-tools
    > ab
    > ab -c 100 -n 5000 http://121.42.60.3/phpinfo.php
    
     
    Complete requests:5000   //访问了5000次
    Failed requests: 2946    //失败了2946次
    Requests per second: 505.36#sec   //QPS

    QPS达到极限

    随着QPS的增长,每个阶段需要根据实际情况来进行优化,优化的方案也与硬件条件、网络带宽息息相关

    QPS达到50

    可以称之为小型网站,一般的服务器就可以应付

    QPS达到100

    假设关系型数据库的每次请求在0.01秒完成
    假设单页面只有一个SQL查询,那么100QPS意味着1秒钟完成100次请求,但是此时我们并不能保证数据库查询能完成100次
    方案:数据库缓存层(redis、memcache)、数据库的负载均衡、读写分离

    QPS达到800

    假设我们使用百兆带宽,意味着网站出口的实际带宽是8M左右,假设每个页面只有10K,在这个并发条件下,百兆带宽已经吃完
    方案:CDN加速、负载均衡、redis硝兵、redis集群

    QPS达到1000

    假设使用Memcache缓存数据库查询数据,每个页面对Memcache的请求远大于直接对DB的请求
    Memcache的悲观并发数在2W左右,但有可能在之前内网带宽已经吃光,表现出不稳定
    方案:静态HTML缓存

    QPS达到2000

    这个级别下,文件系统访问锁都成为了灾难
    方案:做业务分离,分布式存储、数据库分库分表

    实际举例

    我们通过一个实例来把上面几个概念串起来理解。按二八定律来看,如果每天 80% 的访问集中在 20% 的时间里,这 20% 时间就叫做峰值时间。

    公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)

    机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器

    1、每天300w PV 的在单台机器上,这台机器需要多少QPS? 

    ( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (QPS)

    2、如果一台机器的QPS是58,需要几台机器来支持? 

    139 / 58 = 3

    高并发解决方案

    流量优化

    防盗链处理

    前端优化

    减少HTTP请求(例如精灵图)
    添加异步请求
    启用浏览器缓存和文件压缩
    CDN加速
    建立独立图片服务器

    服务端优化

    页面静态化
    并发处理
    队列处理

    数据库优化

    数据库缓存
    分库分表、分区操作
    读写分离
    负载均衡

    Web服务器优化

     nginx反向代理实现负载均衡

    lvs实现负载均衡

  • 相关阅读:
    HttpModule与HttpHandler详解
    未能加载文件或程序集“Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。
    javascript的escape()函数
    温故知新 javascript 正则表达式
    大爽Python入门教程 53 文件读写
    大爽Python入门教程 62 变量进阶 局部变量`local`与全局变量`global`
    大爽Python入门教程 61 变量进阶 可变`mutable`、不可变`immutable`
    大爽Python入门教程 57 思路与答案
    大爽Python入门教程 65 函数进阶 内置函数(Builtin Functions)
    大爽Python入门教程 55 实践演示 控制台版本——简易成绩管理系统
  • 原文地址:https://www.cnblogs.com/-mrl/p/13234927.html
Copyright © 2020-2023  润新知