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

第一层限流:合法性限流

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

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

【性能策略】限流策略相关推荐

  1. 如何设计秒杀服务器的限流策略

    如果平时系统的访问量只有一万,而最大承受限制为五万,在秒杀时刻的瞬间,访问量突然增加到100W,此事系统一定会因访问量过大而宕机,此时就应该设计一个限流策略,使服务器能接收和处理的请求减少. 秒杀限流 ...

  2. 秒杀限制人群,如何设计秒杀服务的限流策略?

    对于秒杀业务,大家应该比较熟悉了.比如,"某商品原价 1299 元, 双十一整点秒杀价仅 500 元,限量 100 件,先到先得" 等等.通过这段文案我们能够发现,参与秒杀活动商品 ...

  3. Kubernetes APIServer 限流策略

    之前说过了,认证,鉴权,准入,这三个重要的环节.到此为止k8s apiserver就已经将请求继续往后传递了,作为rest服务器,它一定要有自我保护机制,这个自我保护的机制最核心的就是限流. 作为we ...

  4. 探索常见的几种限流策略和实现

    高并发访问时,缓存.限流.降级往往是系统的利剑,在互联网蓬勃发展的时期,经常会面临因用户暴涨导致的请求不可用的情况,甚至引发连锁反映导致整个系统崩溃.这个时候常见的解决方案之一就是限流了,当请求达到一 ...

  5. 设计一个基于用户的API限流策略 Rate Limit

    设计一个基于用户的API限流策略 Rate Limit 应用场景 API接口的流量控制策略:缓存.降级.限流.限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的.限流策略 ...

  6. 基于用户的API限流策略

    应用场景 API接口的流量控制策略:缓存.降级.限流.限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的.限流策略虽然降低了服务接口的访问频率和并发量,却换取服务接口和业 ...

  7. 分布式系统限流策略/秒杀系统限流设计

    目录 概述 限流算法 令牌桶算法 漏桶算法 应用级限流 限制总并发数/连接/请求数 限制接口的总并发/请求数 限流接口每秒的请求数 平滑限流接口的请求数 平滑突发限流(SmoothBursty) 平滑 ...

  8. Java限流策略与算法

    概要 在大数据量高并发访问时,经常会出现服务或接口面对暴涨的请求而不可用的情况,甚至引发连锁反映导致整个系统崩溃.此时你需要使用的技术手段之一就是限流,当请求达到一定的并发数或速率,就进行等待.排队. ...

  9. 高可用系统设计 | 分布式限流策略:计数器算法、漏桶算法、令牌桶算法

    文章目录 限流 什么是限流? 分布式限流 限流算法 计数器算法 固定窗口计数器 滑动窗口计数器 漏桶算法 令牌桶算法 限流 什么是限流? 限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已 ...

最新文章

  1. leetcode算法题--最接近的三数之和
  2. 目前电子计算机已经发展到______阶段,《全国高校计算机联合考试广西考区一级笔试试题卷.doc...
  3. 用于web网页的html文件属于,南开15春学期《Web页面设计》在线作业满分答案
  4. MX250和第三方Linux版区别,MX250和MX350哪个好一点,区别和差距在哪里?求推荐?_科技数码通...
  5. (转)让Spring自动扫描和管理Bean
  6. SSL自签署证书生成脚本
  7. android 连接windows 蓝牙 串口工具_ESP32变身蓝牙串口调试工具 只需几行代码即可实现...
  8. DM8168外挂IC卡读写异常
  9. html怎么做出相框的效果,使用html5 svg和css3制作边框运动的动画效果
  10. 【kafka】Flink消费kafka Error sending fetch request
  11. 【Linux】C++后台开发面试
  12. Snagit_日文输入法:促音,长音,小写的输入方法
  13. 京东Java岗:来自面试官的夺命连环56问,直接当场怀疑人生~
  14. Win10 10074 版本无法连接 BT 鼠标
  15. doctype html public w3c,!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN http://www.w...
  16. Penny Pinching在云中:Azure网站何时有意义?
  17. Python 之ConfigParser
  18. 神经网络工作原理概述
  19. 电信ADSL+路由器自动拨号设置详细步骤
  20. 2022年9月青少年软件编程(Python) 等级考试试卷(一级)

热门文章

  1. TRS_WCM(拓尔思信息技术有限公司)内容协作平台平台置标经验攻略
  2. 前端 学习笔记 【持更】
  3. linux 交换机tftp服务,简单文件传输TFTP服务器搭建 Linux RHEL6
  4. JavaScript之延迟加载
  5. 职场中年危机,可能只是你放水太多又不接受现实而已
  6. java基本类型char
  7. 一些程序设计模式的整理
  8. 20201214c列出最简真分数序列
  9. maven的下载安装与卸载
  10. mpc5125的lpc总线