消息中间件(一)基础

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

消息中间件是用于分步式系统之间收发消息的组件。


消息中间件的作用

1. 应用解耦

2. 异步处理

比如用户注册场景,注册主流程完成以后,需要调用邮件系统发送邮件通知用户注册成功,可能还需要调用其他系统。这是串行的,如果一个系统依赖很多系统,那么这个主流程会比较长,耦合度高,整个系统维护成本也会越来越高。那么我们就可以使用消息中间件来进行解耦,通过发布订阅模式,完成用户注册之后,向中间件发送消息,这样就可以马上给用户返回,至于后续工作其他系统向中间件订阅这个消息并完成后续工作就好。这也就是一个解耦和异步处理过程。


中间件有下面两种模型

点对点模型

1.png

发布订阅模型

2.png


消息中间件的解耦和异步是两个最重要的需求点,除此之外还应该做一些其他事情比如:

  • 保证一致性,产生消息和发送消息是一致的,也就是如果操作成功,那么消息一定发送成功;如果业务操作没有成功那么就不能发送消息

  • 具备一定消息堆积能力,可以为后端挡住一些数据流保证后端不会被压垮

  • 具备消息实时性,保证消息的低延迟

  • 具备消息的可靠性,主要是可靠地存储和投递


消息系统里面应该有这样一个假设:消息一定会堆积。下游系统通常有很多,里面有重要的也不重要的,面对突发流量高峰,一定会有后端系统处理不过来的情况,从而造成消息堆积;当然还有一种情况是后端系统出现问题导致暂时无法消费消息从而造成消息中间件的消息堆积。所以中间件要起到蓄水池的作用。


数据一致性,这个很容易理解,因为是分布式异步的,但是又不能容忍数据出错,所以在性能和数据一致性方面就需要有所妥协,通常在互联网行业中采取最终一致性。需要注意的是最终一致性和弱一致性不同,弱一致性表示允许在异常情况下数据可能不一致,而最终一致性则是在某段时间内允许不一致但是最终会一致。






      本文转自linuxjavachen  51CTO博客,原文链接:http://blog.51cto.com/littledevil/2068474,如需转载请自行联系原作者





相关文章
|
11月前
|
消息中间件 开发框架 运维
J2EE开发中消息中间件的介绍和选择
J2EE开发中消息中间件的介绍和选择
138 0
|
6月前
|
消息中间件 开发框架 关系型数据库
02常见消息中间件对比
02常见消息中间件对比
51 0
|
9月前
|
消息中间件 前端开发 数据库
为什么使用消息中间件
为什么使用消息中间件
98 0
|
消息中间件 存储 Cloud Native
技术盘点:消息中间件的过去、现在和未来
目前以“事件驱动”构建的数字化商业生态才刚起步,未来 EventBridge 将围绕事件这一抽象层次实现更强大的能力,比如事件的全链路可观测、事件分析计算、低代码开发等特性,帮助企业全面落地云时代的“事件驱动”架构。
216 1
技术盘点:消息中间件的过去、现在和未来
|
消息中间件 存储 运维
消息队列与消息中间件概述:消息中间件核心概念与技术选型
消息队列是一个存放消息的容器,消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能、削峰、降低系统耦合性。
327 1
|
消息中间件 存储 自然语言处理
如何用消息系统避免分布式事务?
如何用消息系统避免分布式事务?
如何用消息系统避免分布式事务?
|
消息中间件 网络协议 Java
|
消息中间件 存储 运维
MQ系列2:消息中间件的技术选型
MQ系列2:消息中间件的技术选型
158 0
MQ系列2:消息中间件的技术选型
|
消息中间件
消息中间件比较
消息中间件比较
消息中间件比较
|
消息中间件 NoSQL 算法
常见消息中间件描述
常见消息中间件描述
194 1