| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> MQ的优点及使用场景 -> 正文阅读 |
|
[Java知识库]MQ的优点及使用场景 |
消息队列是分布式系统中的重要组件,通常用来处理各种复杂的业务。引入MQ会对系统有以下好处:解耦、异步、削峰。 一.解耦分布式系统中系统间调用错综复杂,且经常会因为需求的变化增加新服务的调用。下图以支付系统为例,用户在完成支付功能后,需要调用商品系统B扣除库存,调用购物车系统清空购物车,调用订单系统修改订单状态。此时,如需要实现支付后增加用户积分功能,需要新增用户系统E的调用,这必然需要修改支付系统A的代码。每次增加新系统后,都需要重新修改支付系统A的代码,这样会增加系统的维护成本。 而使用MQ后,系统A也不用去思考应该将消息发给谁,也不需要考虑是否调用成功和失败,直接将支付结果发送至队列,各个系统订阅该队列,需要什么数据自己去MQ中消费就行了。就算新增系统,也是直接从队列中获取数据,与系统A无关。 ?二.异步MQ的第二个优点是能将部分复杂业务的调用进行异步化。还是以支付系统为例,下图中,用户发起了一个请求,支付系统A可能花费了100ms,之后在分别调用商品、购物车、订单、用户等系统完成一系列的业务操作,总共花费450ms。这个时间花费消耗虽然用户可以接受,但如果业务更为复杂,每个系统调用需要执行多个SQL语句,可能时间花费会增加,并且还未考虑到系统调用之间的网络开销时间。假如用户发起一个支付请求后,需等待2-3秒的时间,用户体验会很不好。 在使用MQ后,可以很好的解决上述问题。当用户发起支付请求后,支付系统在将支付结果发送给MQ后,直接响应用户。后续业务操作由各系统从MQ中获取相应数据后,在后台进行。无论支付成功后的业务逻辑有多复杂,用户都无法察觉,用户完成请求的时间也仅需要100ms。日常中,例如买电影票或者进行一些预约,在完成支付后马上就会提示支付成功,此时支付后的一些操作尚未完成,但过一小会时间会收到一条购买成功或者预约成功的短信通知,此时所有业务操作都已完成。这可能就是利用了MQ的异步化特性来实现的。 三.削峰MQ的第三大特性是削峰。所谓削峰,通俗的讲就是在某个时刻,系统的QPS突然激增,可能会导致系统无法承受而奔溃。也许会想到增加服务器节点来提升系统的性能,但是系统可能平时的访问量就几百QPS,仅为了某些特定时刻而增加资源并不划算。例如下图电商系统的秒杀活动,活动开始时,可能瞬间会有数万个并发请求涌入系统,就算是数据库集群也未必能抗住。日常生活中,我们在秒杀,抢课,抢票等活动中,也经常遇到过系统卡顿,甚至直接不可用的情况。 而使用MQ后,可以将所有请求堆积在MQ中,有效的保护下游系统,并可控制好速率,供系统消费。等高峰期过了之后,系统可以继续消费,直至将所有堆积的请求消费完为止。 以上就是MQ的三大优点,之后将会进一步的学习MQ并做更多的经验总结~ ? ? ? ? ? ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 4:58:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |