热门标签 | 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等资源利用率就会恢复到正常状态,之后就可以重新接收并处理新的请求

【性能测试】限流策略


推荐阅读
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • 结城浩(1963年7月出生),日本资深程序员和技术作家,居住在东京武藏野市。他开发了著名的YukiWiki软件,并在杂志上发表了大量程序入门文章和技术翻译作品。结城浩著有30多本关于编程和数学的书籍,其中许多被翻译成英文和韩文。 ... [详细]
  • 全新发布的自我修复与自我更新的Linux版本,专为云计算环境设计! ... [详细]
  • 探索JavaScript倒计时功能的三种高效实现方法及代码示例 ... [详细]
  • 随着各类门户网站、短视频平台、剧集播放和在线教育等互联网内容生态的迅猛发展,网络流量呈现爆炸性增长。为提升用户体验,边缘云计算与CDN(内容分发网络)技术应运而生。这些技术通过在靠近用户的位置部署节点,有效降低了数据传输延迟,提高了内容加载速度,确保用户能够通过手机或电脑流畅访问互联网资源。此外,边缘计算还能够在本地处理部分数据,进一步减轻核心网络的压力,优化整体网络性能。 ... [详细]
  • 本文总结了 Apache Shiro 安全框架的学习体会,并通过具体应用实例进行了详细分析。Apache Shiro 是一个强大且灵活的安全框架,适用于各种应用程序的安全需求。通过对该框架的核心功能和使用方法的深入探讨,本文不仅帮助读者理解其基本概念和架构设计,还提供了实际项目中的应用示例,以便更好地掌握和运用这一工具。特别感谢开涛的博客文章,为本文提供了宝贵的参考和启发。 ... [详细]
  • 如何为沉浸式 WEB 做准备
    我们所知道的网站很快就会发生变化。在2D浏览器窗口中使用文本、图像和基本交互的日子已经为我们提供了很好的服务,但虚拟、增强和混合现实体验一直在变得更好。开发人员和设计人员需要超越浏 ... [详细]
  • 玩转系统|初遇ChatGPT,我和TA的第一次约会
    最近互联网圈子有一个非常火爆的话题ChatGPT,短短一周的时间就有上百万的用户,如果你不是程序员,也许会问这到底是个什么玩意࿱ ... [详细]
  • 开发笔记:Java实现短信验证码设置发送间隔时间,以及有效时间(Java+Redis)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java实现短信验证码--设置发送间隔时间,以及有效时间(Java+Redis)相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 如何选择优质U盘品牌:专业推荐与选购指南
    如何选择优质U盘品牌:专业推荐与选购指南 ... [详细]
  • thinkphp5.0 验证码的使用
    对应手册:点击查询如果不使用默认的规则,想自定义配置一下呢就新增个配置项:默认是5位数,带混淆线条,这里增加个配置项修改一下 ... [详细]
  • 最近在看GitHub上的一个很火的项目是:ImageSharp。这是一个纯.netcore的图像处理库,没有使用其他的任何依赖。在看这个项目过程中激发了我对图像文件编码解码的兴趣。 ... [详细]
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社区 版权所有