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

当前各种 RPC 中间件技术已经广泛应用于各个领域。其中,服务器之间消息通讯这种功能广泛应用于这些中间件中,于是,将这种面向消息的中间件( Message Oriented Middleware , MOM )抽象出来,形成通用的消息中间件,成为业内主流。目前消息中间件的标准主要有: JMS 和 AMQP 。实现则是百花齐放。

消息中间件从功能上需要解决以下问题:

1. 同步或异步的消息传输,尤其是异步的消息传输

同步发送消息是发送消息后,阻塞等待消息是否发送成功的回馈,如果设置有超时时间,则超时后跳出阻塞状态。

异步发送消息是发送消息后,不阻塞立即执行其他操作。如果关心消息是否发送成功,则可以通过回调函数(Java 中的 Listener )处理消息是否成功。

2. 消息的安全性,消息中间件对持久的支持

在分布式系统中,消息从发送到接收,环节非常多,没有任何一个环节是安全的,而任何环节出了问题,都会导致丢消息。当有需求是,我们必须保证在不是绝对安全的多环节里,完成消息安全的传输。这其中,消息中间的持久是非常重要的。

3. 消息的重发性

如果使用的系统保证了幂等性,则对此没有要求。否则,有些场景需要保证消息不重发。在既要保证消息安全,又要保证消息不重发,是非常困难的。目前业内还没有人能解决此问题。

目前,在有消息重发的情况下,使用的系统都是使用状态机保证了系统对消息的幂等性。

4. 消息的顺序性

如果使用的系统有要求,则有可能需要保证消息的顺序。在大规模分布式不可靠环境下,在保证消息传输高效和消息安全的情况下,要解决此问题,也是非常困难的。

如果只是小规模的系统,对性能要求不高,可以以服务器时间为准,使用排队队列即可解决。

如果以发送端时间为准,并且保持顺序的消息由此一个发送端发送,则使用消息序号即可解决。

另外,有些系统只需要满足局部的消息顺序性,在排序消息数量不大的情况下,可以使用多条排序消息一次性发送解决。

5. 消息传输模型:点对点的传输消息( PTP ),订阅 / 发布模型( Pub/Sub 

PTP ,就是你在消息方设置消息接收者的唯一标识符,然后,消息发送方和消息接受方建立一一对应的关系。消息发送方发送所有的消息都被消息接收方接收。

Pub/Sub ,就是消息发送方和消息接收方都确定自己的发送和接收消息的标签(或者你可以理解为组 GroupID),所有有这个标签的消息,订阅了这个标签的消息接收方一定能接收到。

JMS ( Java 消息服务, Java Message Service )是专用于 J2EE 的一种消息中间件规范。它主要做了接口上的规范,消息传输模型和消息类型的规范,并没有给予实现。同样,它也完全没有给出服务器端的架构,你甚至可以不使用服务器直接在客户端之间传输消息(虽然可能最终结果只是一个玩具)。http://java.sun.com/products/jms/docs.html 。 JMS 也没有规定消息的顺序,安全,重发等特性。

AMQP (高级消息队列协议, The Advanced Message Queuing Protocol )是一种和语言无关的,在金融行业使用的新兴消息中间件,目前成为消息中间件圈内关注的焦点。与 JMS 规范了 API 不同,它是一个异步消息传递所使用的应用层协议规范。 AMQP 的原始用途只是为金融界提供一个可以彼此协作的消息协议,而现在的目标则是为通用消息队列架构提供通用构建工具。 http://www.amqp.org/

时间: 2024-08-27 12:06:04

大规模分布式消息中间件考虑点的相关文章

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

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

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

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

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

什么是分布式消息中间件? 什么是分布式消息中间件? 对于分布式消息中间件,首先要了解两个基础的概念,即什么是分布式系统,什么又是中间件. 分布式系统 "A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messasges."--<Distributed Syst

基于hadoop (map/reduce)的大规模分布式并行计算生产排程系统的设计

map/reduce是大数据处理的技术,它的思路是把大规模数据分成一个个小数据块,每个数据块由一个map任务来处理,处理的中间结果汇总到reduce,最后生成最终的处理结果,这个处理和汇总的过程是可以反复多次的,也就是map-reduce-map-reduce 基于map/reduce的思路,我们可以设计基于hadoop(map/reduce)的大规模分布式并行计算生产排程系统,怎么样把大数据处理变成大规模分布式并行计算呢,就是我们不切分数据,每个map任务的数据都是相同的,每个map任务对排程

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

AI 大规模分布式SGD:瞬间训练完基于ImageNet的ResNet50

论文:https://arxiv.org/pdf/1811.05233.pdf 译文:大规模分布式SGD:瞬间训练完基于ImageNet的ResNet50 摘要 由于大mini-batch训练的不稳定性(为什么不稳定?),和梯度同步的开销,深度学习分布式训练很难线性扩展到拥有大量GPU的集群.我们通过控制batch_size和label smoothing(这是什么意思?),来解决不稳定性.通过2D-Torus all reduce 算法来解决梯度同步的开销.2D-Torus all reduc

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

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

大规模分布式数据处理平台Hadoop的介绍 一种可靠、高效、可伸缩的处理方案

http://www.nowamagic.net/librarys/veda/detail/1767 Hadoop是什么 Hadoop原来是Apache Lucene下的一个子项目,它最初是从Nutch项目中分离出来的专门负责分布式存储以及分布式运算的项目.简单地说来,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储. Hadoop 是最受欢迎的在 Internet 上对搜索关键字进行内容分类

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

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