事件驱动架构与空间架构:数据处理与架构特性解析
1. 事件驱动架构中的数据丢失预防
在异步通信中,数据丢失一直是首要关注的问题。在事件驱动架构中,存在多个可能导致数据丢失的环节。数据丢失指的是消息被丢弃或未能到达其最终目的地。不过,使用异步消息传递时,可以利用一些基本的现成技术来防止数据丢失。
1.1 数据丢失场景
假设事件处理器 A 异步向队列发送消息,事件处理器 B 接收该消息并将消息中的数据插入数据库。在此典型场景中,可能出现以下三个数据丢失区域:
1. 消息从未从事件处理器 A 到达队列;或者即使到达了队列,在后续事件处理器检索消息之前,消息代理崩溃。
2. 事件处理器 B 从队列中取出下一条可用消息,但在处理该事件之前崩溃。
3. 由于某些数据错误,事件处理器 B 无法将消息持久化到数据库。
1.2 数据丢失预防技术
针对上述每个数据丢失区域,可以通过基本的消息传递技术进行缓解:
- 消息未到达队列 :使用持久消息队列和同步发送技术。持久消息队列支持保证交付,消息代理接收消息后,不仅将其存储在内存中以便快速检索,还会将消息持久化到某种物理数据存储(如文件系统或数据库)。同步发送会在消息生产者处进行阻塞等待,直到代理确认消息已持久化。这样,在事件生产者和队列之间不会丢失消息,因为消息要么仍在消息生产者处,要么已持久化到队列中。
- 事件处理器 B 崩溃 :使用客户端确认模式。默认情况下,消息出队后会立即从队列中移除(自动确认模式)。而客户端确认模式会将消息保留在队列中,并将客户端 ID 附加到消息上,
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



