订阅
纠错
加入自媒体

你知道消息中间件对云计算的重要性吗?

2019-01-25 14:22
启迪云计算
关注

云计算服务商除了提供云主机、云存储、云数据库这些最常用的服务外,通常也会提供一些软件服务,消息中间件就是比较常用的一种基础软件。消息中间件对于分布式系统来说,是一个非常重要的组成部分,相当于系统的基础设施,主要解决的是分布式系统不同服务组件之间的数据通信问题。其已成为在业务层和IaaS层之间的支撑桥梁,PaaS和中间件及服务变得越来越受关注,成为云计算的关键所在。

你知道消息中间件对云计算的重要性吗?

消息中间件的作用

一般服务组件间进行通信,都是通过暴露数据接口的方式,这种通信方式比较直接,但系统之间的耦合度会比较高。如果系统的服务组件很多,互相调用起来,整个系统的接口调用关系会很复杂。通过消息中间件来通信的话,系统组件间的耦合度就大大降低。所以,消息中间件的最主要的作用是解耦。

消息中间件的核心是消息队列(MQ: Message Queue)。消息队列是大型分布式系统中不可或缺的重要组成部分,主要解决了应用解耦,异步处理,流量削峰,消息通讯等问题,支撑实现分布式系统的高并发,高和最终一致性。

消息中间件的另外一个好处是提高了分布式系统的可靠性, 服务组件通过消息中间件给别的组件发消息,别的组件即时当前没空处理,等到空闲时看到这个消息,就可以处理了。

消息中间件的工作原理

消息中间件主要有两种工作模式:

(1)   一种是生产者/消费者(Producer/Consumer)模式;

(2)  另一种是发布/订阅(Pub/Sub)模式。

生产/消费模式中有两种角色,消息生产者(Producer)负责生产消息,并把消息发送到队列中,然后消息消费者(Consumer)从队列中取出并且消费消息。生产/消费模式是一种一对一的消息传递方式。

消息被消费以后,队列中就不再存储,所以其他消费者不可能消费到已经被消费的消息。 换句话说,存在多个消费者的情况下,对一个消息而言,只会有一个消费者可以消费它,所以生产/消费模式又称为点对点(P2P)模式。

你知道消息中间件对云计算的重要性吗?

P2P的特点:

每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中);

生产者和消费者之间在时间上没有依赖性,也就是说当生产者发送出消息之后,不管消费者有没有正在运行它不会影响到消息被发送到队列;

消费者在成功接收消息之后需向队列应答成功;

如果希望发送的每个消息都会被成功处理的话,那么需要P2P模式;

在发布/订阅( Pub/Sub)模式中,包含三个角色主题(Topic),消息发布者(Publisher),消息订阅者(Subscriber) 。消息发布者(Publisher)将消息发布到某个主题(topic),同时有多个消息订阅者(Subscriber)会接收到该消息。和P2P方式不同,发布到主题的消息会被所有该主题的订阅者接收到,这是一种1对多的消息传递方式。

你知道消息中间件对云计算的重要性吗?

Pub/Sub的特点:

·      每个消息可以有多个消费者

·      发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。

·      为了消费消息,订阅者必须保持运行的状态。

·      如果希望发送的消息可以不被做任何处理、或者只被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型。

常用的消息中间件

市场上出现过很多商用消息中间件产品,比如Sun的JMS等,还有很多开源消息引擎,比如ActiveMQ、Kafka等。另外像阿里、腾讯这样的大公司往往会开发自己的消息中间件,比如RocketMQ。下面介绍几种在生产环境中使用较多的消息队列。

(1)ActiveMQ/ApolloMQ

ActiveMQ是Apache出品的最流行的开源消息总线,同时也是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现,使用Java语言编写。作为老牌消息队列,可谓历史悠久,但历史包袱也比较多。最新架构的产品为ApolloMQ。

(2)Kafka

Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目。Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,设计目标就是用于日志收集和传输。

Kafka生态完善,其代码是用Scala语言编写,并且有很多不同编程语言的接口,尤其适合海量消息传递。

(3)RabbitMQ

RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。由Erlang语言编写。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

RabbitMQ比Kafka可靠,kafka更适合IO高吞吐的处理,一般应用在大数据日志处理或对实时性(少量延迟),可靠性(少量丢数据)要求稍低的场景使用,比如ELK日志收集。

(4)RocketMQ

RocketMQ是阿里开源的消息中间件,它是纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是Kafka的一个Copy,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景。

性能与可靠性,鱼与熊掌不可兼得,面对不同的消息中间件产品如何抉择,要看各自业务场景的需求和定位。

小结

从中间件的常规定义来看,其可以包括各种软件方案,API、应用服务器、数据整合、对象请求代理等等,任何位于内核和用户应用之间的软件都可以理解为中间件。中间件如同IT 基础架构的输水管,使得数据能从一个应用流动到另一个中。

当中间件走上云端,大家突然发现可以不再围绕SOAP/XML来构建标准化的方案,微服务架构带来了新的思路,企业用户能够使用云中间件将业务流程逐步迁移到云集成服务上,最终实现灵活扩展和降本增效,进而推动了平台现代化标准的构建。

启迪云-高级测试工程师 黄冬琪

声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

云计算 猎头职位 更多
文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号