您的位置 首页 php

消息队列中间件——高并发互联网架构中的利器!

消息队列 中间件 MQ )可以说是大型分布式系统中必备的一个组件,它的一个重要的功能就是实现架构上的 解耦 。目前市面上存在的比较常见的有 RabbitMQ 、ZeroMQ、ActiveMQ和Kafka等,他们各有各自的优缺点,这里不作详细介绍,有兴趣的可以结合不同的应用去做实际的对比分析,本文以RabbitMQ为例子来作介绍。

RabbitMQ是基于AMQP协议的一个开源实现, Server 端用Erlang语言编写,支持C、Java、 Python 、PHP、 Ruby 等常见语言。它除了具备优异的性能之外,更重要的一点是支持消息的持久化,消息的可靠性可以得到相应的保障。

一、安装过程

简单附上一个 CentOS 系统下的安装教程。

安装依赖

6c310000d248ca49b552

安装RabbitMQ

6c2e000241072a25bc6f

安装过程还是比较简单的,完成之后需要检查防火墙对应的端口是否可用。

二、应用场景

1.削峰降流

这个很好理解,比如秒杀活动中,我们就经常用到消息队列来防止后台服务挂掉,同时也解决一部分并发的问题。

2.异步处理

假如用户注册成功时需要发注册邮件,传统的做法是以串行的方式进行,用户信息入库成功后发送邮件,这种方式严重影响服务端的响应时间。

6c310000e49091984111

引入消息中间件之后,注册成功与否不再受到邮件服务的影响,服务端响应时间也明显缩短,这种方式几乎是所有高并发应用所采取的一种策略。

3.架构解耦

例如淘宝双11购物节用户下单时订单系统使用通知库存系统、用户发帖时图片鉴定等场景,这里我们以发帖为例。

传统的做法是帖子入库之后调用各种 RPC 服务(积分RPC接口、图片鉴定RPC接口、数据分析RPC)。

6c300001de05f3c68e79

这里就存在一些坑在这里了,当有新的业务要接入的时候,发帖服务就需要跟着做调整;或者某个RPC服务做了修改,发帖服务可能就会受到影响。服务之间存在严重的耦合,负责这块服务的人估计会很难过。

怎么解决以上的坑呢?我们只要引入一个消息中间件就可以解决以上的问题,结构变为这样:

66c9000639fcc7ee2691

发帖服务只需要跟消息中间件打交道,其他服务方也只需要订阅消息就可以了,各个服务之间的关系就不用再纠缠不清了。

小结

如果调用链上下文不存在强依赖关系,使用消息中间件不失为一种合理的选择。

文章来源:智云一二三科技

文章标题:消息队列中间件——高并发互联网架构中的利器!

文章地址:https://www.zhihuclub.com/49476.shtml

关于作者: 智云科技

热门文章

网站地图