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

2017 年 9 月 19 日 架构文摘 人气青蛙

当前各种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/


出处:http://blog.csdn.net/huyiyang2010/article/details/5969944


版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。


-END-


架构文摘

ID:ArchDigest

互联网应用架构丨架构技术丨大型网站丨大数据丨机器学习

更多精彩文章,请点击下方:阅读原文

登录查看更多
1

相关内容

International Middleware会议是讨论中间件设计、构造和使用方面的重要创新和最新进展的论坛。中间件是位于应用程序和底层平台(操作系统;数据库;硬件)之间的分布式系统软件,和/或将分布式应用程序、数据库或设备连接在一起。它的主要作用是协调和实现不同层或组件之间的通信,同时将分布的大部分复杂性隔离为一个单一的、经过充分测试和理解的系统抽象。 官网链接:http://www.middleware-conference.org/
【CMU】深度学习模型中集成优化、约束和控制,33页ppt
专知会员服务
44+阅读 · 2020年5月23日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
65+阅读 · 2020年3月9日
【大规模数据系统,552页ppt】Large-scale Data Systems
专知会员服务
57+阅读 · 2019年12月21日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
分布式入门,怎样用PyTorch实现多GPU分布式训练
机器之心
7+阅读 · 2019年5月3日
车路协同构建“通信+计算”新体系
智能交通技术
11+阅读 · 2019年3月26日
可能是讲分布式系统最到位的一篇文章
InfoQ
8+阅读 · 2018年11月19日
为什么分布式一定要有消息队列?
互联网架构师
4+阅读 · 2018年7月5日
浅显易懂的分布式TensorFlow入门教程
专知
7+阅读 · 2018年6月22日
【AI说】揭秘京东实时数据仓库背后的神秘力量—JDQ
10 小时到 10 分钟,一步步优化巨量关键词的匹配
Linux爱好者
3+阅读 · 2017年7月29日
Advances in Online Audio-Visual Meeting Transcription
Arxiv
4+阅读 · 2019年12月10日
Federated Learning for Mobile Keyboard Prediction
Arxiv
4+阅读 · 2018年11月8日
VIP会员
相关VIP内容
【CMU】深度学习模型中集成优化、约束和控制,33页ppt
专知会员服务
44+阅读 · 2020年5月23日
【2020新书】Kafka实战:Kafka in Action,209页pdf
专知会员服务
65+阅读 · 2020年3月9日
【大规模数据系统,552页ppt】Large-scale Data Systems
专知会员服务
57+阅读 · 2019年12月21日
相关资讯
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
分布式入门,怎样用PyTorch实现多GPU分布式训练
机器之心
7+阅读 · 2019年5月3日
车路协同构建“通信+计算”新体系
智能交通技术
11+阅读 · 2019年3月26日
可能是讲分布式系统最到位的一篇文章
InfoQ
8+阅读 · 2018年11月19日
为什么分布式一定要有消息队列?
互联网架构师
4+阅读 · 2018年7月5日
浅显易懂的分布式TensorFlow入门教程
专知
7+阅读 · 2018年6月22日
【AI说】揭秘京东实时数据仓库背后的神秘力量—JDQ
10 小时到 10 分钟,一步步优化巨量关键词的匹配
Linux爱好者
3+阅读 · 2017年7月29日
Top
微信扫码咨询专知VIP会员