`
huangyongxing310
  • 浏览: 498606 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

限流处理大量的并发请求

 
阅读更多
限流处理大量的并发请求


第一种方法:在容器中配置最大请求数,如果大于改请求数,则客户端阻塞。该方法有效的阻止了大量的请求同时访问业务系统,但对用户不友好。



nginx连接数限流
tomcat连接数限流
过滤器连接数限流


限流目的:保护系统,限制访问次数


保护系统,如果系统处理不过来,但又有太多请求进入,如连接池,就会使得太多的线程阻塞,线程太多就会处理慢,内存消耗大,大到一定程度就会系统报错死机,或造成访问太慢交互性差.


不进行限流,会使服务进程占用太多的内存,达到系统不能再申请时,系统就会kill掉进程,引起服务崩溃

进程CPU时间占用过久也是会被系统杀掉,所以要进行限流保护系统


服务端限流(在服务中进行限流处理)
如果在服务端做限流,无论有多少个客户端,总的提供能力是固定的,所以不会因为客户端数量过多而导致资源不足,因为处理不过来的请求会被阻塞等待获取资源(阻塞等待过多会导致服务慢或服务崩溃)。

缺点
缺点也比较明显,由于服务提供者整体设置了最大限流数,此时所有的客户端共享同一份限流数据,那么有可能导致有的服务能分配到资源有些服务请求分配不到资源导致无法请求的情况(请求超时)。


客户端限流(在客户端(调用服务者)中进行限流处理)
客户端限流解决上服务端限流提到的问题,它能保证每个客户端都能得到响应。但是从其它方面考虑,必须针对不同的客户端做不同的限流策略:
请求量大,但时效性不高,此时将限流数控制小一些会比较合适
请求量大,但时效性高,此时将限流数适当调高
响应时间长,即慢接口,适当降低
主流业务,核心业务,适当调高
非主流业务,适当降低

缺点
如果客户端的数量不固定,那么有可能导致客户端数量过多造成大量请求打到服务端导致处理不了的结果,所以需要严格监控客户端的调用情况。
配置复杂,需要针对每个客户端做相对精准的判断




漏桶、令牌桶、计数器、信号量、锁


分布式限流可以通过redis、或每个服务设定来实现


限流可以通过过滤器、AOP方式实现





Hystrix(客户端限流)
在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情。Hystrix提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个依赖同时出现问题时保证系统依然可用。


服务雪崩效应是一种因 服务提供者 的不可用导致 服务调用者 的不可用,并将不可用 逐渐放大 的过程


流量控制 的具体措施包括:
网关限流
用户交互限流
关闭重试
因为Nginx的高性能, 目前一线互联网公司大量采用Nginx+Lua的网关进行流量控制, 由此而来的OpenResty也越来越热门.
用户交互限流的具体措施有: 1. 采用加载动画,提高用户的忍耐等待时间. 2. 提交按钮添加强制等待时间机制.
改进缓存模式 的措施包括:
缓存预加载
同步改为异步刷新
服务自动扩容 的措施主要有:
AWS的auto scaling
服务调用者降级服务 的措施包括:
资源隔离
对依赖服务进行分类
不可用服务的调用快速失败
资源隔离主要是对调用服务的线程池进行隔离.









https://blog.csdn.net/abc592328292/article/details/80295837(Java高并发系统的限流策略)

https://blog.csdn.net/varyall/article/details/78976655(系统限流实践 - 应用限流)

https://www.cnblogs.com/ASPNET2008/p/7712974.html(简易RPC框架-客户端限流配置)


https://segmentfault.com/a/1190000005988895(防雪崩利器:熔断器 Hystrix 的原理与使用)









分享到:
评论

相关推荐

    Javaweb应用使用限流处理大量的并发请求详解

    Java Web 应用使用限流处理大量的并发请求详解 Java Web 应用中,同一时间有大量的客户端请求同时发送到服务器,例如抢购、秒杀等,这个时候如何避免将大量的请求同时发送到业务系统是非常重要的。下面将介绍两种...

    Node.js-用于处理按并发阈值限流执行的异步函数

    这种策略在处理大量并发请求时尤其有用,例如在爬虫、API调用或者数据处理等场景。 首先,我们需要理解“并发阈值”这一概念。并发阈值是指同一时间可以并行处理的任务数量。设置合适的并发阈值可以帮助我们平衡...

    mysql并发控制限流设计

    ### MySQL并发控制与限流设计 #### 一、MySQL性能概览 MySQL作为一款广泛使用的开源关系型数据库管理系统,在各种应用场景下展现出了优秀的性能特点。然而,在高并发场景下,MySQL也面临着诸多挑战。为了更好地...

    限流代码脚本

    这种限流方式简单易实现,但存在“水桶溢出”问题,即短时间内大量请求可能导致限流策略失效。 2. 滑动窗口限流:相对于固定窗口,滑动窗口将时间周期分成多个小窗口,并对每个小窗口内的请求进行计数。这种方式...

    计算机后端-Java-Java高并发从入门到面试教程-用限流思路.zip

    本教程"Java高并发从入门到面试教程"着重讲解了如何利用限流策略来优化系统性能,以应对大量并发请求。限流是系统架构设计中的重要组成部分,它能够防止系统因过量的请求而崩溃,同时保证服务的质量和响应时间。 ...

    Go+Redis实现的并发安全限流器

    Redis则作为一个高性能的键值存储系统,可以快速地处理大量的读写操作,适合用来存储限流的相关数据。 1. **计数器限流**:这是一种简单的限流方式,通常基于固定窗口机制。计数器在时间窗口内记录请求次数,当达到...

    简单实用的PHP并发请求url类

    只需要提供一组请求,Guzzle会自动处理并发执行,简化了并发请求的编写过程。 5. **自定义类实现**: 根据提供的标题和描述,有一个自定义的PHP URL并发请求类(url_class.php)。此类可能包含了创建请求队列、...

    java实现限流,封装的工具类

    限流的主要目标是确保系统在高负载下仍能保持稳定的服务质量,避免短时间内的大量请求导致资源耗尽。常见的限流算法有两种:令牌桶算法和漏桶算法。 1. **令牌桶算法**:令牌桶算法允许突发流量,但同时设置了最大...

    普元超并发限制

    4. **限流策略**:设置并发控制策略,如令牌桶算法或漏桶算法,限制在特定时间内的请求数量,防止瞬间大量请求冲击系统。 5. **服务降级与熔断**:在高并发情况下,非核心服务可以被降级处理,优先保证核心业务的...

    Springboot高并发限流、访问排队、熔断完整例子

    限流:地铁早高峰,地铁站都会做一件事情,就是限流了!想法很直接,就是想在一定时间内把请求限制在一定范围内,保证系统不被冲垮,同时尽可能提升系统的吞吐量。非常多的时候,限流就比较重要了。 附件例子就是...

    分布式限流面试专题系列:Nginx+zookeeper.zip

    它的非阻塞I/O模型使得它在处理大量并发连接时表现出色。在分布式限流中,Nginx可以作为流量入口,通过配置限流规则,对请求进行拦截和控制。 2. **限流算法**:Nginx支持多种限流算法,如漏桶算法(Leaky Bucket)...

    Java限流实现

    首先,限流的目的是防止系统在短时间内接收到大量请求,导致资源耗尽,从而引起服务崩溃。常见的限流算法有固定窗口限流、滑动窗口限流、漏桶算法和令牌桶算法。其中,令牌桶算法和漏桶算法在实际应用中更为常见,...

    亿级流量下的分布式限流解决方案.pdf

    在处理亿级流量下的高并发系统时,分布式限流是一种关键技术,它能够有效保护后端服务系统免受突然增加的访问流量冲击,保证系统的稳定性。限流的核心目的是在特定时间窗口内,对系统接收到的请求进行数量上的控制,...

    基于 Springboot + Redis + Kafka 的秒杀系统,乐观锁 + 缓存 + 限流 + 异步

    系统的特点 高性能:秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键 一致性:秒杀商品减库存的实现方式同样关键,有限...限流:前端答题或验证码,来分散用户的请求 禁止重复提交:限定每个用户发起

    java-基于redis限流系统

    这尤其适用于分布式系统,因为这些系统可能会面临大量并发请求。通过设置合适的限流策略,我们可以确保系统在高负载下仍能正常运行。 在Java中,Redis可以作为中间件,用于存储和管理限流相关的计数器或者令牌桶等...

    基于Zookeeper和guava动态限流 源码

    Guava是Google推出的一系列Java库,包含大量Google核心库的常用功能,如集合框架、缓存、原生类型支持、并发库、字符串处理、I/O等。其中,Guava的RateLimiter组件提供了限流功能,能够帮助我们限制系统中特定资源的...

    rate-limiter:限制瞬时发并发数限制某个接口的时间窗口最大请求数 限流实现

    RateLimiter限流普及限流是对出入流量进行控制 , 防止大量流入,导致资源不足,系统不稳定。限流系统是对资源访问的控制组件 , 控制主要有两个功能 , 限流策略和熔断策略,对不同的系统有不同的熔断策略诉求,有...

    分布式限流面试专题系列:Nginx+zookeeper.rar

    在高并发场景下,系统可能受到大量请求冲击,如果不限流,可能导致服务器过载,从而影响整体服务的可用性。限流可以通过限制单位时间内处理的请求数量或控制处理速率,确保系统在压力下仍能正常运行。 Nginx是一款...

    常见的限流解决方案.docx

    而在秒杀、抢购等高并发且资源有限的场景,限流则显得尤为重要,它可以防止系统因瞬间的大量请求而崩溃。 PV(Page View)和UV(Unique View)是衡量网站访问量的两个关键指标,分别代表页面总访问量和独立访客数。...

Global site tag (gtag.js) - Google Analytics