zoukankan      html  css  js  c++  java
  • 【高并发】如何设计一个支撑高并发大流量的系统?这次我将设计思路分享给大家!

    写在前面

    最近不少小伙伴们都在问我:高并发专题我学了不少文章了,但是如何设计一个高并发的系统我还是一脸懵逼!这个问题怎么解决呢?其实,相信不只是问我的这些小伙伴有这个困惑,就连工作(入坑)了好几年的开发人员也都有这样的困惑:我学习了很多的高并发课程,也看了不少的高大上的文章,可就是不知道怎么去设计一个支撑高并发大流量的系统。针对小伙伴们的疑惑,这里,我就把一些设计高并发大流量的常规思路分享给大家,不一定完全正确,设计高并发大流量系统本来就是一个仁者见仁、智者见智的事情,只要是符合自身业务场景的架构思路,都是好的架构思路,架构本身来说就是没有一个完全正确的架构,而是尽量符合当时自身的业务场景,并且能够良好的支撑业务的负载。

    高并发架构相关概念

    什么是并发?

    并发是指并发的访问,也就是某个时间点,有多少个访问同时到来;

    通常如果一个系统的日PV在千万以上,有可能是一个高并发的系统,这里需要注意的是:只是有可能是一个高并发的系统,不一定是一个高并发的系统。

    并发数和QPS是不同的概念,一般说QPS会说多少并发用户下QPS,当QPS相同时,并发用户数越大,网站并发处理能力越好。当并发用户数过大时,会造成进程(线程)频繁切换,反正真正用于处理请求的时间变少,每秒能够处理的请求数反而变少,同时用户的请求等待时间也会变大。 找到最佳线程数能够让web系统更稳定,效率更高。

    并发数 = QPS*平均响应时间

    高并发具体关心什么?

    QPS: 每秒请求或查询的数量,在互联网领域,指每秒响应请求数;

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

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

    PV: 综合浏览量,即页面浏览量或者点击量,一个访客在24小时内访问的页面数量;

    UV: 独立访客 ,即一定时间范围内相同访客多次访问网站,只计算为一个独立的访客;

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

    日网站带宽可以使用下面的公式来粗略计算:

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

    峰值一般是平均值的倍数;

    QPS不等于并发连接数,QPS是每秒HTTP请求数量,并发连接数是系统同时处理的请求数量;

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

    压力测试: 测试能承受的最大并发,测试最大承受的QPS值。

    测试工具(ab): 目标是URL,可以创建多个访问线程对同一个URL进行访问(Nginx);

    ab的使用: 模拟并发请求100次(100个人),总共请求5000次(每个人请求5000次)

    ab -c 100 -n 5000 待测试网站(内存和网络不超过最高限度的75%)
    

    QPS达到50: 一般的服务器就可以应付;

    QPS达到100: 假设关系型数据库的每次请求在0.01秒完成(理想),假设单页面只有一个SQL查询,那么100QPS意味着1秒中完成100次请求,但此时我们不能保证数据库查询能完成100次;

    方案:数据库缓存层、数据库的负载均衡;

    QPS达到800: 假设我们使用 百兆宽带,意味着网站出口的实际带宽是8M左右,假设每个页面是有10k,在这个并发的条件下,百兆带宽已经被吃完;

    方案:CDN加速、负载均衡

    QPS达到1000: 假设使用Redis缓存数据库查询数据,每个页面对Redis请求远大于直接对DB的请求;
    Redis的悲观并发数在5W左右,但有可能之前内网带宽已经被吃光,表现出不稳定;

    方案:静态HTML缓存

    QPS达到2000: 文件系统访问锁都成为了灾难;

    方案:做业务分离,分布式存储;

    高并发解决方案案例

    流量优化: 防盗链处理(把一些恶意的请求拒之门外)

    前端优化: 减少HTTP请求、添加异步请求、启用浏览器的缓存和文件压缩、CDN加速、建立独立的图片服务器;

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

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

    Web服务器优化: 负载均衡

    高并发下的经验公式

    通过QPS和PV计算部署服务器的台数

    单台服务器每天PV计算

    公式1:每天总PV = QPS * 3600 * 6
    公式2:每天总PV = QPS * 3600 * 8
    

    服务器计算

    服务器数量 =   ceil( 每天总PV / 单台服务器每天总PV )
    

    峰值QPS和机器计算公式

    原理: 每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间

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

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

    重磅福利

    关注「 冰河技术 」微信公众号,后台回复 “设计模式” 关键字领取《深入浅出Java 23种设计模式》PDF文档。回复“Java8”关键字领取《Java8新特性教程》PDF文档。两本PDF均是由冰河原创并整理的超硬核教程,面试必备!!

    好了,今天就聊到这儿吧!别忘了点个赞,给个在看和转发,让更多的人看到,一起学习,一起进步!!

    写在最后

    如果你觉得冰河写的还不错,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者已经通过阅读「 冰河技术 」微信公众号文章,吊打面试官,成功跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样提升自己的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,每天更新超硬核技术干货,让你对如何提升技术能力不再迷茫!

  • 相关阅读:
    POJ 2752 Seek the Name, Seek the Fame
    POJ 2406 Power Strings
    KMP 算法总结
    SGU 275 To xor or not to xor
    hihocoder 1196 高斯消元.二
    hihoCoder 1195 高斯消元.一
    UvaLive 5026 Building Roads
    HDU 2196 computer
    Notions of Flow Networks and Flows
    C/C++代码中的笔误
  • 原文地址:https://www.cnblogs.com/binghe001/p/13381993.html
Copyright © 2011-2022 走看看