热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【性能测试】限流策略

如何保证在流量突增的情况下,仍然保证系统的稳定性,或者说如何避免由于并发访问量远远超过系统能够正常承载的并发量而导致的雪崩第一层限流:合法性限流仅仅限制合法的用户请求能够抵达服务器

如何保证在流量突增的情况下,仍然保证系统的稳定性,或者说如何避免由于并发访问量远远超过系统能够正常承载的并发量而导致的雪崩

第一层限流:合法性限流

仅仅限制合法的用户请求能够抵达服务器,而将一些非法的请求全部进行拦截
什么是合法性限流?
实际请求的用户可能是人,也可能是机器人,并且还可能存在同一用户反复操作的行为

  1. 验证码

验证码还有一个作用,可以拉长用户的访问时间,比如1秒中有100w用户同时进行抢购行为,若使用了验证码,用户从输入验证码到到整个下单的整个过程就可能需要3秒钟,这样整个系统需要支撑的吞吐量变成原来的1/3

  1. IP限制
    通过网络技术监测到某个IP下的下单频率在毫秒级别,或者反复购买同一件商品,可以断定下单的是机器人或者不合法的用户,将这个IP加入到黑名单中,从而减少不合法的流量

  2. 隐藏秒杀服务地址
    在开始秒杀之前,隐藏秒杀的服务地址或者秒杀入口

第二层限流:负载限流

集群(nginx和LVS)
【性能测试】限流策略

网络七层协议
【性能测试】限流策略
级联负载,但是每增加一次负载就会增加一个转发路径,可能带来网络延迟问题,因此太多的级联负载是不推荐的。
常见的做法是单独使用nginx或使用nginx和LVS

LVS处于第4层,它是通过网络端口进行负载
nginx是第7层,它是应用级别的负载

软负载和硬负载
以上的负载为软负载,硬负载为使用硬件工具进行负载,常见的硬负载工具有F5或Array等

第三层限流:服务限流

一、通过web服务器本身进行限流
比如Tomcat,把Tomcat最大连接数设置成一个合理的值,比如单Tomcat最大连接数<=300,那如果超过300的连接请求,就会被Tomcat无条件拒绝,这样就可以保证Tomcat的稳定性了

二、在服务器的内部编写算法限流
常见算法有令牌桶算法、漏桶算法。或者直接调入一些类库里边已经存在的API

Google Gyava类库的令牌桶算法
【性能测试】限流策略
其中,create方法限制最多有100个线程可以同时进行,tryAcquire方法可以设置每秒的线程执行可以持续的时长

三、消息队列限流
不使用消息队列时,所有请求平均分给所有的子系统,但是不同的子系统可以处理的极限不一样,这样导致短板的子系统出现延迟或者崩溃的情况
【性能测试】限流策略
消息队列本质是一种缓冲区,消息队列可以将所有的请求临时存储,然后所有的子系统再分别根据自己的性能,分别去消息队列中针对性地去拉取特定数量的请求

四、缓存限流
限流的本质是为了不断的削减请求的数量,而缓存的作用是为了减少用户请求服务端的数量
背景:服务前后端分离或动静分离结构(动态请求资源、nginx、静态请求资源)

1. 静态请求缓存
当客户端第1次请求服务端的时候,服务端将网页的基本结构代码显示给客户端
比如我们第1次访问某个网站时,网站服务器就会将搭建此网站的HTML和Javascript脚本等代码响应给客户端,那么客户端就可以将这些HTML和Javascript代码缓存到客户端浏览器之中,当用户以后再次访问这个网站时,就可以直接从本地浏览器的缓存中获取HTML和Javascript代码了
对于如HTML和Javascript体积比较小的代码,可以直接缓存到浏览器之中,但是如果体积比较大的图片,最好将它们缓存到nginx,或通过nginx转发在OSS等云服务器之中,而如果是视频等一些体积特别大的静态资源,也可以将它缓存在CDN中,利用CDN区域部署就近访问的特点,来提高用户的访问速度

2. 动态缓存
动态缓存一般先建议缓存在本地的服务器之中,如果本地服务器的缓存失效,再缓存到由redis组成的远程集群之中进行二次的查询

【性能测试】限流策略

缓存不是越多级别越好,缓存需要考虑多级缓存带来的一致性问题,解决这些一致性问题,会增加系统的开发成本以及系统的额外开销,缓存级别越多,请求在系统内部的跳转路径也会越长

3. 监控限流
CPU、内存、并发量等都是衡量系统稳定性的重要指标
创建一些线程,专门用于监控CPU、内存这些指标,比如如果CPU的利用率达到了极限,就可以临时性的采取服务降级或者拒绝策略
服务降级指的是,当系统资源不足时,就可以把查看三个月以前的历史订单,历史评论等一些非核心的服务临时关闭,从而为系统节约出一部分的资源。
在采用服务降级或拒绝策略一段时间之后,CPU等资源利用率就会恢复到正常状态,之后就可以重新接收并处理新的请求

【性能测试】限流策略


推荐阅读
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Python15行代码实现免费发送手机短信,推送消息「建议收藏」
    Python15行代码实现免费发 ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • Java实现验证码的制作
    验证码概述为什么使用验证码?验证码(CAPTCHA)是一种全自动程序。主要是为了区分“进行操作的是不是人”。如果没有验证码机制,将会导致以下的问题:对特定网站不断进行登录,破解密码 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
author-avatar
不要再想Ta
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有