什么是分布式消息中间件?

什么是分布式消息中间件?

什么是分布式消息中间件?

对于分布式消息中间件,首先要了解两个基础的概念,即什么是分布式系统,什么又是中间件。

分布式系统

“A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messasges.”——《Distributed Systems Concepts and Design》

从上面这个解释可以得到分布式系统的两个特点:

  1. 组件分布在网络计算机上
  2. 组件之间通过消息来协调行动

中间件

Middleware is computer software that provides services to software applications beyond those available from the operating system. It can be described as "software glue". Middleware makes it easier for software developers to implement communication and input/output, so they can focus on the specific purpose of their application.——维基百科

中间件被描述为为应用程序提供操作系统所提供的服务之外的服务,简化应用程序的通信、输入输出的开发,使他们专注于自己的业务逻辑。

从维基百科上对中间件的解释感觉有点绕,其实可以从“空间”的角度去理解中间件,即中间件是处于“中间层”的组件,是上层的应用程序和底层的服务之间的桥梁(比如DB中间件的上层是应用程序,底层是DB服务),也是应用与应用之间的桥梁(比如分布式服务组件)。

分布式消息中间件

“Message-oriented middleware (MOM) is software or hardware infrastructure supporting sending and receiving messages between distributed systems.”——维基百科

维基百科给出的消息中间件的定义是支持在分布式系统中发送和接受消息的硬件或软件基础设施(对我们这里讨论的范围来说肯定就是软件了)。

那么分布式消息中间件其实就是指消息中间件本身也是一个分布式系统。

消息中间件能做什么?

任何中间件必然都是要去解决特定领域的某个问题,消息中间件解决的就是分布式系统之间消息传递的问题。消息传递是分布式系统必然要面对的一个问题。

假设一个电商交易的场景,用户下单之后调用库存系统减库存,然后需要调用物流系统进行发货,如果交易、库存、物流是属于一个系统的,那么就是接口调用。但是随着系统的发展,各个模块越来越庞大、业务逻辑越来越复杂,必然是要做服务化和业务拆分的。这个时候就需要考虑这些系统之间如何交互,第一反应就是RPC(Remote Procedure Call)。系统继续发展,可能一笔交易后续需要调用几十个接口来执行业务,比如还有风控系统、短信服务等等。这个时候就需要消息中间件登场来解决问题了。

笔者认为,RPC和消息中间件的场景的差异很大程度上在于就是“依赖”和“量”。比如短信通知服务并不是事交易环节必须的,并不影响下单流程,不是强依赖,所以交易系统不应该依赖短信服务。比如一些数据分析程序可能需要在拿到一天的总销售量,这个就只需要销售中心提供接口在需要时调用即可。

消息中间件出现以后对于交易场景可能是调用库存中心等强依赖系统执行业务,之后发布一条消息(这条消息存储于消息中间件中)。像是短信通知服务、数据统计服务等等都是依赖于消息中间件去消费这条消息来完成自己的业务逻辑。

从以上的场景可以看出消息中间件其实就是对系统进行了解耦,同时带来了异步化等好处。

简单概括一下消息中间件的应用场景大致如下:

  • 业务解耦:交易系统不需要知道短信通知服务的存在,只需要发布消息
  • 削峰填谷:比如上游系统的吞吐能力高于下游系统,在流量洪峰时可能会冲垮下游系统,消息中间件可以在峰值时堆积消息,而在峰值过去后下游系统慢慢消费消息解决流量洪峰的问题
  • 事件驱动:系统与系统之间可以通过消息传递的形式驱动业务,以流式的模型处理

分布式消息中间件长什么样?

一个抽象的对分布式消息中间件的认知大概是这样:

  • 有一个SDK,提供给业务系统发送、消费消息的接口
  • 有一批Server节点用于接受和存储消息,并在合适的时候发送给下游的系统进行消费

结语

至此应该对分布式消息中间件应该有了一个简单的认识。下一篇将介绍分布式消息中间件内部的一些概念和专业术语,比如什么是集群消费,什么是广播消费,什么是Topic、什么又是Broker?

from: http://www.cnblogs.com/hzmark/p/mq.html

时间: 2024-08-03 03:11:33

什么是分布式消息中间件?的相关文章

[转]分布式消息中间件 MetaQ 作者庄晓丹专访

MetaQ(全称Metamorphosis)是一个高性能.高可用.可扩展的分布式消息中间件,思路起源于LinkedIn的Kafka,但并不是Kafka的一个Copy.MetaQ具有消息存储顺序写.吞吐量大和支持本地和XA事务等特性,适用于大吞吐量.顺序消息.广播和日志数据传输等场景,目前在淘宝和支付宝有着广泛的应用.   Github地址:  链接地址 为了使大家对MetaQ有进一步的了解,本期我们采访了MetaQ的核心开发者庄晓丹.  欢迎大家推荐更多开源项目给我们,支持中国的开源项目发展,如

spring+springmvc+kafka分布式消息中间件集成方案

Honghu的消息服务平台已经抛弃了之前的ActiveMQ,改用高吞吐量比较大的Kafka分布式消息中间件方案: kafka消息平台使用spring+kafka的集成方案,详情如下: 1. 使用最高版本2.1.0.RELEASE集成jar包:spring-integration-kafka 2. Zookeeper.Kafka分布式集群使用init.properties配置化方案. Java代码 kafka.servers=127.0.0.1:9092 kafka.topic=xxxooo [j

腾讯万亿级分布式消息中间件TubeMQ正式开源

TubeMQ是腾讯在2013年自研的分布式消息中间件系统,专注服务大数据场景下海量数据的高性能存储和传输,经过近7年上万亿的海量数据沉淀,目前日均接入量超过25万亿条.较之于众多明星的开源MQ组件,TubeMQ在海量实践(稳定性+性能)和低成本方面有着比较好的核心优势. TubeMQ 捐赠 Apache 基金会 9月12日,Apache软件基金会成立20周年之际,腾讯在ApacheCon宣布TubeMQ 开源.TubeMQ 启动计划捐赠 Apache 基金会的流程. TubeMQ系统特点 1.

大规模分布式消息中间件考虑点

当前各种 RPC 中间件技术已经广泛应用于各个领域.其中,服务器之间消息通讯这种功能广泛应用于这些中间件中,于是,将这种面向消息的中间件( Message Oriented Middleware , MOM )抽象出来,形成通用的消息中间件,成为业内主流.目前消息中间件的标准主要有: JMS 和 AMQP .实现则是百花齐放. 消息中间件从功能上需要解决以下问题: 1. 同步或异步的消息传输,尤其是异步的消息传输 同步发送消息是发送消息后,阻塞等待消息是否发送成功的回馈,如果设置有超时时间,则超

转]大规模分布式消息中间件简介

当前各种 RPC 中间件技术已经广泛应用于各个领域.其中,服务器之间消息通讯这种功能广泛应用于这些中间件中,于是,将这种面向消息的中间件( Message Oriented Middleware , MOM )抽象出来,形成通用的消息中间件,成为业内主流.目前消息中间件的标准主要有: JMS 和 AMQP .实现则是百花齐放. 消息中间件从功能上需要解决以下问题: 1. 同步或异步的消息传输,尤其是异步的消息传输 同步发送消息是发送消息后,阻塞等待消息是否发送成功的回馈,如果设置有超时时间,则超

业务系统对消息中间件的要求(接上一篇《分布式消息中间件中的一些概念》)

在大型互联网中,主要采用消息中间件来进行业务的解耦和操作的异步化,这也是消息中间件最基础的特点,也是业务系统对消息中间件的最基本需求. 在这个基础之上,本篇来谈一下业务系统从功能.性能等各个方面对消息中间件的需求. 功能 功能需求核心的其实就发送消息和消费消息,细化下去,发送需求会有同步发送.异步发送,会有实时消息.定时消息等:消费需求会有各种模式,比如业务方主动Pull.或者消息中间件Push的模式等等.   消息发送 消息发送功能从编程接口的角度出发就只有两个需求:同步发送接口和异步发送接口

Java分布式消息中间件 Metamorphosis

总体结构: 内部结构: 主要特点: 生产者.服务器和消费者都可分布 消息存储顺序写 性能极高,吞吐量大 支持消息顺序 支持本地和XA事务 客户端pull,随机读,利用sendfile系统调用,zero-copy ,批量拉数据 支持消费端事务 支持消息广播模式 支持异步发送消息 支持http协议 支持消息重试和recover 数据迁移.扩容对用户透明 消费状态保存在客户端 支持同步和异步复制两种HA 支持group commit 更多--

jeesz分布式企业框架 javaWeb分布式架构 springmvc+mybatis+shiro dubbo zookeeper redis kafka app服务

平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis分布式缓存技术.FastDFS分布式文件系统.ActiveMQ异步消息中间件.Nginx负载均衡等分布式技术 使用Maven做项目管理,项目模块化,提高项目的易开发性.扩展性 以spring Framework为核心容器,Spring MVC为模型视图控制器,MyBatis为数据访问层, Apach

分布式架构真正适用于大型互联网项目的架构! dubbo+zookeeper+springmvc+mybatis+shiro+redis

 分类: 分布式技术(3)  目录(?)[+] 平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis分布式缓存技术.FastDFS分布式文件系统.ActiveMQ异步消息中间件.Nginx负载均衡等分布式技术 使用Maven做项目管理,项目模块化,提高项目的易开发性.扩展性 以spring Framework为核心容器,spring MVC为模型视图