`

高并发系统(缓存、降级、限流)

 
阅读更多

先解释一下关键词:

缓存:这个大家都知道。

降级:就是在高并发高负载情况下,选择动态的关闭一下不重要的服务,拒绝访问等,来为重要的服务节省资源,比如电商平台秒杀当天可关闭推荐等功能。

限流:就相当于调整水龙头的大小,使得访问请求量控制在一定范围。

       对于比较关键又高并发的服务,比如秒杀,不能通过缓存和降级方式解决,至少不够解决太大并发量。这时候就需要限流了。

 

以下为参考整理:

限流算法有:令牌桶、漏桶。计数器也可以进行粗暴限流实现。

应用中的限流:比如TPS/QPS超过一定范围,进行控制,比如tomcat可配置可接受的等待连接数、最大连接数、最大线程数等。

资源池化,然后超出限制等待请求资源数,就直接返回失败即可。

限制每时每分每秒的访问请求数,可通过一个cacheMap<Long, AtomicLong>来实现,key为当前时间long值除以相应数。以下开涛的实现,用Guava的Cache,设置过期时间,LFU最近最少使用的元素会被删除:

LoadingCache<Long, AtomicLong> counter =
        CacheBuilder.newBuilder()
                .expireAfterWrite(2, TimeUnit.SECONDS)
                .build(new CacheLoader<Long, AtomicLong>() {
                    @Override
                    public AtomicLong load(Long seconds) throws Exception {
                        return new AtomicLong(0);
                    }
                });
long limit = 1000;
while(true) {
    //得到当前秒
    long currentSeconds = System.currentTimeMillis() / 1000;
    if(counter.get(currentSeconds).incrementAndGet() > limit) {
        System.out.println("限流了:" + currentSeconds);
        continue;
    }
    //业务处理
}

 接入层限流:指请求流量的入口,该层的主要目的有:负载均衡、非法请求过滤、请求聚合、缓存、降级、限流、A/B测试、服务质量监控等等。Nginx接入层限流可以使用Nginx自带了两个模块:连接数限流模块ngx_http_limit_conn_module和漏桶算法实现的请求限流模块ngx_http_limit_req_module

 

 

 

参考:开涛的博客

分享到:
评论

相关推荐

    SpringBoot开发的高并发限时抢购秒杀系统

    本系统是使用SpringBoot开发的高并发限时抢购秒杀系统,除了实现基本的登录、查看商品列表、秒杀、下单等功能,项目中还针对高并发情况实现了系统缓存、降级和限流。 开发工具: IntelliJ IDEA + Navicat + ...

    练习springboot1 项目 模拟高并发秒杀,实现基本的登录、查看商品列表、秒杀、下单等功能,简单实现了系统缓存、降级和限流

    练习springboot1 项目 模拟高并发秒杀,实现基本的登录、查看商品列表、秒杀、下单等功能,简单实现了系统缓存、降级和限流。SpringBoot + MyBatis + MySQL+Druid + Redis + RabbitMQ + Bootstrap + jQue….zip

    52_如何设计高可用系统架构?限流?熔断?降级?什么鬼!.zip

    在高并发场景下,系统的处理能力是有限的,如果不加以控制,大量请求可能会导致系统崩溃。限流就是一种保护机制,它限制了系统在单位时间内处理请求的速度,防止过载。在Java中,我们可以使用如Guava的RateLimiter或...

    基于SpringBoot + MySQL + Redis + RabbitMQ + Guava开发的高并发商品限时秒杀系统

    本系统是使用SpringBoot开发的高并发限时抢购秒杀系统,除了实现基本的登录、查看商品列表、秒杀、下单等功能,项目中还针对高并发情况实现了系统缓存、降级和限流。 开发工具 IntelliJ IDEA + Navicat + Sublime ...

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

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

    java高并发商品限时秒杀系统.zip

    本系统是使用SpringBoot开发的高并发限时抢购秒杀系统,除了实现基本的登录、查看商品列表、秒杀、下单等功能,项目中还针对高并发情况实现了系统缓存、降级和限流。 开发工具 IntelliJ IDEA + Navicat + Sublime ...

    基于Springboot高并发商品限时秒杀系统

    本系统是使用SpringBoot开发的高并发限时抢购秒杀系统,除了实现基本的登录、查看商品列表、秒杀、下单等功能,项目中还针对高并发情况实现了系统缓存、降级和限流。

    收纳幂等限流降级断路器事务缓存分库分表等总结!

    限流是指对系统的访问量进行控制,防止系统在高并发的情况下被过载。通过合理设置并发数、请求频率等参数,可以限制系统的负载,保证系统的稳定性和可用性。 降级是指在系统面临压力过大或者异常情况下,自动降低...

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

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

    高并发系统的限流详解及实现

    总的来说,限流是高并发系统中不可或缺的一部分,它与缓存和降级共同构成了系统稳定性保障的基石。选择合适的限流算法和实现方式,结合业务特性进行调整,才能确保系统在高并发场景下依然保持高效和稳定。

    高并发系统保护1

    为应对访问量剧增、服务故障或非核心服务性能下降,通常会运用缓存、降级和限流这三类工具来保护系统。降级是一种策略,旨在保障核心服务的可用性,即使是以牺牲部分功能为代价。本篇文章将探讨一些在实际工作中应用...

    Java并发编程及高并发解决方案

    第1章课程准备; 第2章并发基础. 第3章项目准备5 ...第15章高并发之应用限流思路 第16章高并发之服务降级与服务熔断思路8 第17章高并发之数据库切库分库分表思路 第18章高并发之高可用手段介绍 第19章课程总结

    亿级流量网站架构核心技术 跟开涛学搭建高可用高并发系统

    从负载均衡、限流、降级、隔离、超时与重试、回滚机制、压测与预案、缓存、池化、异步化、扩容、队列等多方面详细介绍了亿级流量网站的架构核心技术,让读者看后能快速运用到实践项目中。 不管是软件开发人员,还是...

    亿级流量电商详情页系统的大型高并发与高可用缓存架构实战2

    - 高可用架构的关键在于服务的资源隔离、限流与过载保护、熔断、优雅降级、容错、超时控制及监控运维。通过这些技术,可以确保系统在面对异常时仍能稳定运行。 本课程通过大白话解释和实际操作演示,旨在帮助...

    (源码)基于Spring Boot和Redis的高并发秒杀系统.zip

    系统实现了基本的登录、查看商品列表、秒杀、下单等功能,并针对高并发场景进行了优化,包括系统缓存、降级和限流等措施。通过使用Redis、RabbitMQ等中间件技术,系统能够有效应对高并发请求,确保秒杀活动的顺利...

    开涛高可用高并发-亿级流量核心技术

    5.2.4 限流降级 95 5.3 人工开关降级 96 5.4 读服务降级 96 5.5 写服务降级 97 5.6 多级降级 98 5.7 配置中心 100 5.7.1 应用层API封装 100 5.7.2 配置文件实现开关配置 101 5.7.3 配置中心实现开关配置 102 5.8 ...

    基于SpringBoot实现Java高并发之秒杀系统源码(含数据库).rar

    使用如Hystrix这样的熔断器,可以实现服务的限流和降级,保护系统在高并发下不崩溃。限流可以限制系统的处理速度,避免过载;降级则是在系统压力过大时,优先保证核心服务的可用性。 5. **数据库优化**: 数据库...

    课程设计基于SpringBoot + MySQL 等+开发的高并发商品限时秒杀系统源码.zip

    本系统是使用SpringBoot开发的高并发限时抢购秒杀系统,除了实现基本的登录、查看商品列表、秒杀、下单等功能,项目中还针对高并发情况实现了系统缓存、降级和限流。 开发工具 IntelliJ IDEA + Navicat + Sublime ...

Global site tag (gtag.js) - Google Analytics