登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
从同步耦合到异步解耦:消息中间件如何重塑系统间的通信 ...
从同步耦合到异步解耦:消息中间件如何重塑系统间的通信范式?
[ 复制链接 ]
归悦可
2025-11-12 01:30:11
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
当成百上千的服务需要相互协作时,它们之间的通信模式变得至关重要。如果服务间采用紧密耦合的同步调用,一个服务的延迟或故障,就可能引发连锁反应,导致系统性的“雪崩”。
消息中间件正是为了打破这种刚性依赖而生。它在服务之间建立了一个异步的通信渠道,通常是一个消息队列。生产者服务只需将任务(即“消息”)投递到队列中便可完成工作,而无需等待消费者服务的实时响应。
使用场景
消息中间件常见的使用场景,包括不限于解耦、有序性、异步处理、削峰填谷等。
解耦
在一个电商系统中,用户下单后,订单系统通常需要直接调用库存系统来减少库存。但是,如果库存系统有问题或延迟,订单系统也会受影响,导致用户下单失败或延迟。
使用消息中间件,订单系统在用户下单后只需发送一条消息,然后立即回应用户。库存系统会从消息中间件获取消息并处理。这样,即使库存系统有问题,订单系统也不会受影响。
有序性
在一个银行系统中,用户的转账操作可以被视为一个消息,包含转账金额和目标账户。这些消息的顺序很重要,因为需要保证转账的顺序与用户的操作顺序相同。
使用消息中间件,可以把每次转账操作作为一个消息发送出去。消息中间件能确保消息的顺序,也就是先发送的消息先处理,后发送的消息后处理。这样,用户的转账操作顺序就能得到保证。
异步处理
在一个在线服务平台中,用户登录后,系统需要做一些操作,如更新登录时间,发送欢迎邮件,生成登录日志等。如果这些操作同时进行,可能会让用户等待时间变长,影响体验。
使用消息中间件,用户登录成功后,系统可以立即回应用户,然后把需要做的操作作为消息发送出去。后台服务会从消息中间件获取消息,然后异步处理。
削峰填谷
在一个电商网站的大促销活动中,用户访问和订单量会激增,这就是"流量峰值"。如果系统直接处理这些请求,可能会因负载过大而崩溃,所以需要"削峰",即平滑处理这些请求。
使用消息中间件,用户下单时,系统可以将订单作为消息发送出去,然后立即回应用户。后台服务会从消息中间件获取消息,然后处理订单。这样,即使短时间内订单量大,也不会直接冲击到订单处理服务,实现了"削峰"。
另外,在流量低的时候,如深夜,订单处理服务可能会闲置。这时,如果有未处理的订单在消息中间件中,订单处理服务可以继续处理订单,实现了"填谷"。
架构
无论是Kafka系统架构,还是RocketMQ系统架构,从图中可以看到它们整体的结构是大同小异的,通常由四个主要部分构成。
1)生产者:负责生成并发送消息到Broker集群进行存储。
2)Broker集群:这是消息队列的核心部分,它负责存储来自生产者的消息,并将这些消息分发给消费者进行处理。
3)消费者:负责接收并处理来自Broker集群的消息。
4)元数据中心集群:例如Kafka中的Zookeeper和RocketMQ中的NameServer,它们都扮演着相似的角色,主要负责维护集群以及主题相关的元数据。
集群扩展能力
Kafka和RocketMQ都具有良好的集群扩展能力,但它们的实现方式和特点有所不同。
!
在Kafka中,数据同步以分区为单位进行。在创建主题时,会预设分区数和副本数。Kafka会从每个分区的副本集中选出一个Broker作为Leader,其余副本所在的Broker则作为Follower。所有客户端请求(包括生产者发送消息和消费者消费消息)都由Leader节点处理,数据同步也由Leader节点向Follower节点进行。这种设计赋予了Kafka优秀的水平扩展性,可以通过增加Broker数量来提升集群的存储和处理能力。
在RocketMQ中,整个集群由多个子集群组成,每个子集群包含一个Master节点和多个Slave节点。RocketMQ会首先按照子集群对主题进行分片,然后在每个子集群内部将分片的主题进一步拆分为多个消息队列(MessageQueue)。每个消息队列是一个逻辑队列。当生产者发送特定主题的消息时,通过负载均衡策略(默认为轮询策略)将消息路由到各个消息队列,从而确保集群中每个Broker节点的负载大致均衡。
主题
在消息中间件中,主题(Topic)是一个关键的逻辑概念。生产者将消息发布到特定的主题,而消费者则从这些主题中订阅并接收消息。因此,主题实际上是消息的分类标识,它使得消费者能够进行有效的消息筛选和选择。
主题的存在实现了一条消息可以被多个消费者接收,从而形成了一种发布-订阅(Pub-Sub)的通信模式。例如,在一个“天气更新”主题中,所有订阅了这个主题的消费者(可能包括多个应用或服务)都会收到关于天气更新的消息。
这种模式的优势在于它实现了生产者和消费者的解耦。生产者只需知道消息应发送到哪个主题,而无需关心谁将会是消费者。同样,消费者只需订阅他们感兴趣的主题,而无需知道谁是消息的生产者。这种解耦的设计,使得生产者和消费者可以独立地进行扩展和修改。
未完待续
很高兴与你相遇!如果你喜欢本文内容,记得关注哦!!!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
同步
耦合
异步
解耦
消息
相关帖子
迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章
你所不知道的日志异步落库
Excel高性能异步导出完整方案!
Excel高性能异步导出完整方案!
系统消息的接收与无标题栏/边框窗体的移动与尺寸调整
RT-Thread之消息队列使用示例
推荐一种异步线程执行过程中更新进度的方法
双北斗卫星时间同步系统:安徽京准助力基础网络建设准绳
革命你的 Git 提交消息 - GIM 1.8.0 发布了!
推荐一种手动设置异步线程等待机制的解决方案
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章
3
1050
敖雨燕
2025-10-22
业界
你所不知道的日志异步落库
3
756
事确
2025-10-22
业界
Excel高性能异步导出完整方案!
0
269
醋辛
2025-10-27
业界
Excel高性能异步导出完整方案!
3
226
能氐吨
2025-10-27
业界
系统消息的接收与无标题栏/边框窗体的移动与尺寸调整
1
932
柯惠心
2025-10-31
安全
RT-Thread之消息队列使用示例
1
424
聊账
2025-10-31
安全
推荐一种异步线程执行过程中更新进度的方法
0
680
辖瑁地
2025-11-11
安全
双北斗卫星时间同步系统:安徽京准助力基础网络建设准绳
0
1014
撒阗奕
2025-11-14
业界
革命你的 Git 提交消息 - GIM 1.8.0 发布了!
1
260
姚望舒
2025-11-14
安全
推荐一种手动设置异步线程等待机制的解决方案
0
553
褥师此
2025-12-01
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
归悦可
2025-11-12 01:30:11
关注
0
粉丝关注
25
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9994893
kk14977
6845355
3934307807
991122
4
xiangqian
638210
5
宋子
9987
6
闰咄阅
9991
7
刎唇
9993
8
俞瑛瑶
9998
9
蓬森莉
9952
10
匝抽
9986
查看更多