备案 控制台
开发者社区 开发与运维 文章 正文

并发编程-25 高并发处理手段之消息队列思路 + 应用拆分思路 + 应用限流思路

简介: 并发编程-25 高并发处理手段之消息队列思路 + 应用拆分思路 + 应用限流思路

概述


20190309221027466.png


这里只是讲通用的思路,实际高并发的场景需要根据实际情况来决定方案。

20190306004616510.png


消息队列


消息队列特性

  • 业务无关: 只做消息分发
  • FIFO : 先投递先到达
  • 容灾:节点的动态增删和消息的持久化
  • 性能: 吞吐量提升,系统内部通信效率提高

为什么需要消息队列

  • 【生产】和【消费】的速度或稳定性等因素不一致


消息队列的好处


  • 业务解耦
  • 最终一致性(要么都成功,要么都失败)
  • 广播,接入新的系统,只要需要确保把消息推送到消息队列即可,新系统从消息队列订阅即可
  • 错峰与流控

消息队列举例

Kafka


20190309232320389.png


RabbitMQ


20190309232639243.png



应用拆分

应用拆分的原则

  • 业务优先
  • 循序渐进
  • 兼顾技术:重构、分层
  • 可靠测试


应用拆分的思考

  • 应用之间的通信: RPC(Dubbo等)、消息队列
  • 应用之间的数据库设计:每个应用应该有独立的数据库
  • 避免事务操作跨应用


应用拆分常用的组件

Dubbo


20190309233106679.png


Spring Cloud


2019030923320411.png


20190309233128262.png

应用限流


20190309233516834.png


如果有大量的数据,在同一时间内直接写入数据库,势必对系统造成很大的压力。如果通过特定的方式采用限流的方式以很定的速率来写入数据库,那数据库压力就会小很多。


以下算法是说的我们在业务代码中的逻辑限流


限流算法 – 计数器法 ,简单但是有临界问题


20190309233832965.png



假设有个接口A,规定1分钟的访问次数不能超过100次。通常的做法:设置一个计数器counter,每当一个请求过来的时候,counter就加1,


如果counter>100并且该请求与第一个请求的间隔时间还在1分钟之内,那么说明请求数过多,触发限流


如果该请求与第一个请求的间隔时间大于1分钟,且counter的值还在限流范围内,那么就重置counter


优点: 计数器法是限流算法里最简单也是最容易实现的一种算法。


缺点 :临界问题


假设有一个恶意用户,在0:59时,瞬间发送了100个请求,并且1:00又瞬间发送了100个请求,那么其实这个用户在1秒里面,瞬间发送了200个请求。我们刚才规定的是1分钟最多100个请求,也就是每秒钟最多1.7个请求,用户通过在时间窗口的重置节点处突发请求,可以瞬间超过我们的速率限制。用户有可能通过算法的这个漏洞,瞬间压垮我们的应用。


刚才的问题其实是因为我们统计的精度太低。那么如何很好地处理这个问题呢?或者说,如何将临界问题的影响降低呢?我们可以看下面的滑动窗口算法


限流算法 – 滑动窗口 (Rolling Window),划分多个时间窗口解决临界问题


20190309233822719.png


在上图中,整个红色的矩形框表示一个时间窗口,一个时间窗口就是一分钟。


然后我们将时间窗口进行划分,如上图中,我们就将滑动窗口划成了6格,所以每格代表的是10秒钟。


每过10秒钟,我们的时间窗口就会往右滑动一格。


每一个格子都有自己独立的计数器counter,比如当一个请求在0:35秒的时候到达,那么0:30~0:39对应的counter就会加1。


那么滑动窗口怎么解决刚才的临界问题的呢?我们可以看上图,0:59到达的100个请求会落在灰色的格子中,而1:00到达的请求会落在橘黄色的格子中。当时间到达1:00时,我们的窗口会往右移动一格,那么此时时间窗口内的总请求数量一共是200个,超过了限定的100个,所以此时能够检测出来触发了限流。


再来看一下刚才的计数器算法,我们可以发现,计数器算法其实就是滑动窗口算法。只是它没有对时间窗口做进一步地划分,所以只有1格。


由此可见,当滑动窗口的格子划分的越多,那么滑动窗口的滚动就越平滑,限流的统计就会越精确。


限流算法 – 漏桶(Leaky Bucket)


20190309233846637.png


首先,有一个固定容量的桶,有水流进来,也有水流出去。对于流进来的水来说,我们无法预计一共有多少水会流进来,也无法预计水流的速度。但是对于流出去的水来说,这个桶可以固定水流出的速率。而且,当桶满了之后,多余的水将会溢出。


我们将算法中的水换成实际应用中的请求,我们可以看到漏桶算法天生就限制了请求的速度。当使用了漏桶算法,我们可以保证接口会以一个常速速率来处理请求。所以漏桶算法天生不会出现临界问题


限流算法 – 令牌桶(Token Bucket)



20190309234119588.png

首先,我们有一个固定容量的桶,桶里存放着令牌(token)。桶一开始是空的,token以一个固定的速率r往桶里填充,直到达到桶的容量,多余的令牌将会被丢弃。每当一个请求过来时,就会尝试从桶里移除一个令牌,如果没有令牌的话,请求无法通过。


总结

计数器 VS 滑动窗口


计数器算法是最简单的算法,可以看成是滑动窗口的低精度实现。滑动窗口由于需要存储多份的计数器(每一个格子存一份),所以滑动窗口在实现上需要更多的存储空间。也就是说,如果滑动窗口的精度越高,需要的存储空间就越大。


漏桶算法 VS 令牌桶算法


漏桶算法和令牌桶算法最明显的区别是令牌桶算法允许流量一定程度的突发。因为默认的令牌桶算法,取走token是不需要耗费时间的,也就是说,假设桶内有100个token时,那么可以瞬间允许100个请求通过。


令牌桶算法由于实现简单,且允许某些流量的突发,对用户友好,所以被业界采用地较多。当然我们需要具体情况具体分析,只有最合适的算法,没有最优的算法。

小小工匠
目录
相关文章
hsfxuebao
|
30天前
|
数据采集 算法 双11
高并发的场景下,不能不说的限流算法
高并发的场景下,不能不说的限流算法
hsfxuebao
41 1
图灵重生我名苏泽
|
30天前
|
监控 Java 数据处理
【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
图灵重生我名苏泽
110 0
流烟默
|
30天前
|
消息中间件 Java 应用服务中间件
聊聊分布式高并发应用中的高可用性
聊聊分布式高并发应用中的高可用性
流烟默
34 0
流烟默
|
30天前
|
负载均衡 前端开发 算法
聊聊高并发应用中电商秒杀场景的方案实现
聊聊高并发应用中电商秒杀场景的方案实现
流烟默
150 0
长梦
|
30天前
|
消息中间件 分布式计算 监控
Python面试:消息队列(RabbitMQ、Kafka)基础知识与应用
【4月更文挑战第18天】本文探讨了Python面试中RabbitMQ与Kafka的常见问题和易错点,包括两者的基础概念、特性对比、Python客户端使用、消息队列应用场景及消息可靠性保证。重点讲解了消息丢失与重复的避免策略,并提供了实战代码示例,帮助读者提升在分布式系统中使用消息队列的能力。
长梦
59 2
一只牛博
|
30天前
|
消息中间件 NoSQL Java
Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】
Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】
一只牛博
382 1
花开富贵111
|
4天前
|
消息中间件 Serverless Windows
消息队列 MQ产品使用合集之MQTT协议是否可以应用于社交软件的系统通知场景
阿里云消息队列MQ(Message Queue)是一种高可用、高性能的消息中间件服务,它允许您在分布式应用的不同组件之间异步传递消息,从而实现系统解耦、流量削峰填谷以及提高系统的可扩展性和灵活性。以下是使用阿里云消息队列MQ产品的关键点和最佳实践合集。
花开富贵111
14 0
一只牛博
|
10天前
|
存储 安全 应用服务中间件
解密Nginx限流机制:有效应对DDoS攻击与高并发流量
解密Nginx限流机制:有效应对DDoS攻击与高并发流量
一只牛博
17 0
东方睿赢
|
19天前
|
监控 关系型数据库 分布式数据库
【PolarDB开源】PolarDB在电商场景的应用:应对高并发与数据一致性挑战
【5月更文挑战第26天】阿里云PolarDB是为电商解决高并发和数据一致性问题的云原生数据库。它采用读写分离、弹性扩展和分布式缓存策略应对高并发,通过全局时钟、分布式事务和数据复制保证数据一致性。在大型促销活动中,电商平台可提前扩容、启用读写分离、优化索引并设置监控告警来应对挑战。PolarDB助力电商构建高性能、高可用的数据处理系统,赢得市场优势。
东方睿赢
119 1
进朱者赤
|
21天前
|
存储 缓存 算法
高并发架构设计三大利器:缓存、限流和降级
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。
进朱者赤
73 1

热门文章

最新文章

  • 1
    springboot整合rocketmq,快速上手消息队列
  • 2
    秒懂消息队列MQ,万字总结带你全面了解消息队列MQ
  • 3
    剖析nsq消息队列(四) 消息的负载处理
  • 4
    开源项目推荐:多进程和多线程的高性能消息队列(无锁队列),lock-free queue
  • 5
    玩转redis-延时消息队列
  • 6
    在Windows系统上安装消息队列kafka
  • 7
    消息队列 RocketMQ 遇上可观测:业务核心链路可视化
  • 8
    Linux IPC实践(6) --System V消息队列(3)
  • 9
    Linux IPC实践(7) --Posix消息队列
  • 10
    小家Spring】从Spring中的(ApplicationEvent)事件驱动机制出发,聊聊【观察者模式】【监听者模式】【发布订阅模式】【消息队列MQ】【EventSourcing】...(上)
  • 1
    优惠券秒杀案例 - CAS、Redis+Lua脚本解决高并发并行
    125
  • 2
    【三十】springboot项目上高并发解决示例
    97
  • 3
    一文让你深入了解 Java-Netty高性能高并发
    113
  • 4
    高并发的场景下,不能不说的限流算法
    41
  • 5
    【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
    110
  • 6
    【Redis项目实战】使用Springcloud整合Redis分布式锁+RabbitMQ技术实现高并发预约管理处理系统
    78
  • 7
    【Spring boot实战】Springboot+对话ai模型整体框架+高并发线程机制处理优化+提示词工程效果展示(按照框架自己修改可对接市面上百分之99的模型)
    277
  • 8
    阿里巴巴内部高并发Nginx性能调优实战解密
    77
  • 9
    面试官:你会如何设计一个高并发系统的架构设计?
    105
  • 10
    在高并发情况下,如何做到安全的修改同一行数据?
    33
  • 相关课程

    更多
  • 消息队列Kafka入门课程
  • 消息队列RocketMQ 5.0 云原生架构升级课程
  • 消息队列 RocketMQ 全类型业务消息学习课程
  • 消息队列 RocketMQ 消息集成
  • 消息队列 MNS 入门课程
  • 使用Redis消息队列完成秒杀过期订单处理
  • 相关电子书

    更多
  • 徐雷-Java为王,互联网高并发架构设计与选型之路6.0
  • Redis 的高并发实战:抢购系统
  • MySQL高并发场景实战
  • 相关实验场景

    更多
  • 消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
  • RDS MySQL高并发访问下的系统稳定性
  • 下一篇
    2024年阿里云免费云服务器及学生云服务器申请教程参考

    深圳SEO优化公司阳泉百度竞价包年推广价格清远关键词按天计费阜新网站优化软件陇南企业网站改版多少钱东莞营销型网站建设报价沧州网站制作设计哪家好宜宾企业网站改版垦利英文网站建设价格黔西南网站推广工具公司醴陵至尊标王报价那曲网站推广价格潜江企业网站建设价格那曲优秀网站设计报价上海企业网站建设哪家好普洱seo排名多少钱大鹏优秀网站设计公司秦皇岛阿里店铺托管公司泰安网页制作价格无锡模板网站建设推荐厦门百度网站优化哪家好楚雄高端网站设计延边百姓网标王哪家好新余网络广告推广鸡西网页制作多少钱芜湖模板网站建设多少钱临夏模板网站建设价格永州SEO按天扣费价格来宾网站优化推广价格大同网站推广工具哪家好大理网站优化按天扣费多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

    深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化