侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

使用消息队列方案的10个必要的理由

技术  /  管理员 发布于 12个月前   231

项目中使用消息队列方案虽然优点多但是缺点也是非常明显的,性能问题又得加钱提示配置,复杂性倍数增加,对公司技术团队岗位配置有一定的要求的,不然除非到了不得不用是情况,建议还是不用。


使用消息队列的10个理由:


1. 解耦

在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。

消息队列在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。


2. 冗余

有时在处理数据的时候处理过程会失败。除非数据被持久化,否则将永远丢失。

消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。

在被许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理过程明确的指出该消息已经被处理完毕,确保你的数据被安全的保存直到你使用完毕。


3. 扩展性

因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的;

只要另外增加处理过程即可。不需要改变代码、不需要调节参数。

扩展就像调大电力按钮一样简单。


4. 灵活性 & 峰值处理能力

当你的应用上了Hacker News的首页,你将发现访问流量攀升到一个不同寻常的水平。

在访问量剧增的情况下,你的应用仍然需要继续发挥作用,但是这样的突发流量并不常见;

如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。

使用消息队列能够使关键组件顶住增长的访问压力,而不是因为超出负荷的请求而完全崩溃。

请查看我们关于峰值处理能力的博客文章了解更多此方面的信息。


5. 可恢复性

当体系的一部分组件失效,不会影响到整个系统。

消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。

而这种允许重试或者延后处理请求的能力通常是造就一个略感不便的用户和一个沮丧透顶的用户之间的区别。


6. 送达保证

消息队列提供的冗余机制保证了消息能被实际的处理,只要一个进程读取了该队列即可。

在此基础上,IronMQ提供了一个"只送达一次"保证。

无论有多少进程在从队列中领取数据,每一个消息只能被处理一次。

这之所以成为可能,是因为获取一个消息只是"预定"了这个消息,暂时把它移出了队列。

除非客户端明确的表示已经处理完了这个消息,否则这个消息会被放回队列中去,在一段可配置的时间之后可再次被处理。


7.排序保证

在许多情况下,数据处理的顺序都很重要。

消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。

IronMO保证消息浆糊通过FIFO(先进先出)的顺序来处理,因此消息在队列中的位置就是从队列中检索他们的位置。


8.缓冲

在任何重要的系统中,都会有需要不同的处理时间的元素。

例如,加载一张图片比应用过滤器花费更少的时间。

消息队列通过一个缓冲层来帮助任务最高效率的执行--写入队列的处理会尽可能的快速,而不受从队列读的预备处理的约束。

该缓冲有助于控制和优化数据流经过系统的速度。


9. 理解数据流

在一个分布式系统里,要得到一个关于用户操作会用多长时间及其原因的总体印象,是个巨大的挑战。消息系列通过消息被处理的频率,来方便的辅助确定那些表现不佳的处理过程或领域,这些地方的数据流都不够优化。


10. 异步通信

很多时候,你不想也不需要立即处理消息。

消息队列提供了异步处理机制,允许你把一个消息放入队列,但并不立即处理它。

你想向队列中放入多少消息就放多少,然后在你乐意的时候再去处理它们。


如果有其他理由可以评论留言


  • 上一条:
    人只有认清自我,才配遇见未来更好的自己-励志人生感悟美文分享
    下一条:
    阿里云香港服务器搭建自用vpn:Shadowsocks使用流程步骤
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 性能测试工具、HTTP基准测试工具:wrk(0个评论)
    • namesilo域名+香港服务器+acme.sh给网站生成免费ssl证书流程步骤(0个评论)
    • 控制反转IOC设计模式简单的示例代码(0个评论)
    • 来自京东开发者的接口优化的常见方案实战总结(0个评论)
    • 最新访问谷歌Google镜像/学术/搜索_GitHub镜像/下载加速链接2023/2/16持续更新(0个评论)
    • 近期文章
    • 在go语言中使用GoPDF包把html生成PDF文件示例(0个评论)
    • 在go语言中创建和解析(读取)符号链接示例(0个评论)
    • ubuntu 22.04系统中报错:Python 3.6 is no longer supported by the Python core team...解决方式(0个评论)
    • Laravel 10.4版本发布(0个评论)
    • mysql5.7中实现分区表及分区where in查询示例及分区分表对比浅析(0个评论)
    • nginx + vue配置实现同域名下不同路径访问不同项目(0个评论)
    • 在laravel框架中的5个HTTP客户端技巧分享(0个评论)
    • 在go语言中使用FFmpeg库实现PCM音频文件编码为mp3格式文件流程步骤(0个评论)
    • gopacket免安装Pcap实现驱动层流量抓包流程步骤(0个评论)
    • 在laravel项目中实现密码强度验证功能推荐扩展包:password-strength(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2017-09
    • 2018-01
    • 2018-07
    • 2018-08
    • 2018-09
    • 2018-12
    • 2019-01
    • 2019-02
    • 2019-03
    • 2019-04
    • 2019-05
    • 2019-06
    • 2019-07
    • 2019-08
    • 2019-09
    • 2019-10
    • 2019-11
    • 2019-12
    • 2020-01
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客