资讯专栏INFORMATION COLUMN

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

SKYZACK / 3655人阅读

摘要:通过消息中间件来通信的话,系统组件间的耦合度就大大降低。所以,消息中间件的最主要的作用是解耦。消息中间件的核心是消息队列。是阿里开源的消息中间件,它是纯开发,具有高吞吐量高可用性适合大规模分布式系统应用的特点。

云计算服务商除了提供云主机、云存储、云数据库这些最常用的服务外,通常也会提供一些软件服务,消息中间件就是比较常用的一种基础软件。消息中间件对于分布式系统来说,是一个非常重要的组成部分,相当于系统的基础设施,主要解决的是分布式系统不同服务组件之间的数据通信问题。其已成为在业务层和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来构建标准化的方案,微服务架构带来了新的思路,企业用户能够使用云中间件将业务流程逐步迁移到云集成服务上,最终实现灵活扩展和降本增效,进而推动了平台现代化标准的构建。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/5560.html

相关文章

  • 技术人攻略访谈二十三:工具理性主义者黄允松

    摘要:导语本期采访对象黄允松,青云创始人及。作为一个纯粹的工具理性主义者,黄允松致力于打造优良的工具,大幅降低的复杂性,让一切变得更加平滑和简单,这是他让世界变得美好起来的方式。 showImg(http://segmentfault.com/img/bVbYfe);文:Gracia 摄影:周振邦(本文为原创内容,部分或全文转载均需经过作者授权,并保留完整的作者信息和技术人攻略介绍。) ...

    Andrman 评论0 收藏0
  • 大型服务端开发反模式

    摘要:用线程池执行异步任务为了减少阻塞时间,加快响应速度,把无需返回结果的操作变成异步任务,用线程池来执行,这是提高性能的一种手段。疲于奔命的模式,做不好大型服务端开发,也难以做好各种领域的开发。 1. 用线程池执行异步任务 为了减少阻塞时间,加快响应速度,把无需返回结果的操作变成异步任务,用线程池来执行,这是提高性能的一种手段。 你可能要惊讶了,这么做不对吗? 首先,我们把异步任务分...

    oogh 评论0 收藏0
  • 大型服务端开发反模式

    摘要:用线程池执行异步任务为了减少阻塞时间,加快响应速度,把无需返回结果的操作变成异步任务,用线程池来执行,这是提高性能的一种手段。疲于奔命的模式,做不好大型服务端开发,也难以做好各种领域的开发。 1. 用线程池执行异步任务 为了减少阻塞时间,加快响应速度,把无需返回结果的操作变成异步任务,用线程池来执行,这是提高性能的一种手段。 你可能要惊讶了,这么做不对吗? 首先,我们把异步任务分...

    wind3110991 评论0 收藏0
  • 计算那些事--谈一谈IAAS

    摘要:对于商业市场来说,特别是中国这样一个云计算才刚刚起步的市场。反观云计算售卖的一些商品,目前主要还是以服务器为主。云计算的本质是将计算能力转化为标准化,可售卖的服务。可以说是云计算实践的一个经典案例。有的人会问,云计算厂商需要提供哪些服务。 2015年伊始,国内云计算市场可谓风起云涌。各路群豪纷纷涌入这个市场。其中最活跃的领域当属IAAS。阿里腾讯硝烟未尽,百度重新检讨了自己的PAAS战略后,...

    KitorinZero 评论0 收藏0
  • 计算运维管理问题

    摘要:运行监控云计算的运维管理应从数据中心的日常监控人手,对日常维护管理事件管理变更管理以及应急预案管理等进行全方位的日常监控,以提前发现问题并消除隐患。自动化管理已然成为了当前云计算运维管理的一个必然发展趋势。从而有效实现云计算运维管理的改进。云计算在企业运营中的基本工作原理是将计算分布在大量分布式计算机中,从而使企业数据中心的运行和互联网更为相似。通过云计算的运维管理,企业不仅能够实现对IT资...

    CoderBear 评论0 收藏0

发表评论

0条评论

SKYZACK

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<