再探蚂蚁中间件:MsgBroker

2018-09-19  本文已影响0人  旺旺大仙贝

所有中间件都是为了解决特定领域的某个问题。
MsgBroker解决:分布式系统的消息传递的问题。

首先先了解消息中间件的一些背景知识


1.消息中间件

1.1消息中间件是什么

1.2为什么要有消息中间件

原本的RPC接口调用有什么问题

消息中间件解决了什么问题

一个例子

一个账单查询Case,基本业务逻辑:

  1. 账单服务:检索数据库,获取指定账户的账单记录。
  2. 风险控制服务:记录用户的检索行为,为风险控制提供数据积累。
  3. 短信通知服务:发送短信到用户手机,通知用户其账单被查询事件。

方案1,同步RPC调用

image

方案2,异步消息中间件

image

方案2对比方案1的优点:

1.3消息中间件应用场景

1.4消息中间件主要特点

1.5两种模式

点对点模式 (point to point)

点对点模式下包括三个角色:

消息发送者生产消息发送到queue中,然后消息接收者从queue中取出并且消费消息。消息被消费以后,queue中不再有存储,所以消息接收者不可能消费到已经被消费的消息。

点对点模式特点:

发布/订阅模式(publish/subcribe)

发布/订阅模式下包括三个角色:

image

发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。

发布/订阅模式特点:

1.6消费消息的推拉模式

1.7引入消息中间件需要注意点


2.MsgBroker

2.1MsgBroker原理架构图

image

2.2MsgBroker组成

2.3Msgbroker特性

2.4普通消息

普通消息:较简单的发送和投递两个过程


image

2.5事务型消息

什么是事务型消息

一种特殊类型的消息:消息中间件收到消息发布者发布的消息后不会立刻投递给消费者,而是根据发布者应用的数据库事务状态来决定是否投递,如果数据库事务是提交,就投递;是回滚就不投递。

为什么要设计事务型消息

为了保证在分布式系统中数据库变更之间以及数据库变更和业务处理保持事务一致性。

事务型消息如何保证数据一致性

事务型消息通过“二阶段”来保证一致性

思考

  1. 为什么发送消息要在事务操作之前?
  2. 如果Msgbroker一直收不到事务的执行结果状态(提交/回滚)时要怎么办?
  1. 第一个问题,如果顺序反过来,先执行事务,事务执行完成提交后再发送消息,那么消息发送失败就会导致本地事务回滚,这个肯定是不合理的,因为事务回滚比重发消息代价高很多
  2. 第二个问题,如果MsgBroker一直没收到事务的执行结果,这个在分布式系统里属于异常情况,也是有可能发生的,比如 说网络异常等,而Msgbroker作为一个严谨的消息中间件也考虑到了这种异常情况,设计了“回查阶段”,这个阶段只会在事务“提交/回滚消息”失败时才会被触发。

总结

事务型消息(事务成功时消息才提交):


image

事务型消息(事务回滚时不发送消息):


image

4.几个消息队列比较

电商、金融对事务型消息要求较高,因此MsgBroker重点在于支持事务型消息

MsgBroker RocketMQ ActiveMQ RabbitMQ KafKa
所属公司社区 蚂蚁 阿里 Apache Mozilla Apache
开发语言 Java Java Java Relang Scale&Java
消息消费模式(pull/push) push 多协议,均支持 多协议,均支持 多协议,均支持 pull
数据可靠性 可靠 可靠,同步刷盘,同/异步复制 可靠,master/slave 保证数据不丢,slave备份 可靠,replica机制,容错容灾
持久化能力 DB 磁盘文件 内存/文件/DB DB / 文件 磁盘文件
是否有序 无序 有序 可以支持有序 一个Client才有序 多Client有序
事务型消息 支持 支持 支持 不支持 不支持
负载均衡 支持 支持 支持 支持 支持
关键场景 事务,高可靠 高吞吐,高可靠 高扩展 高并发,高可靠 高吞吐,分布式

5.知识点回顾

从本地事务到分布式事务到消息队列

5.1事务

事务:一系列指令的集合

满足:ACID原则

5.2本地事务

本地事务是在单个数据源上进行数据访问和更新,资源由资源管理器本地管理


image

本地事务特点:

5.3分布式事务

跨越多个数据源进行数据访问和更新。
随着业务变得复杂,一个单机应用的一个数据库会被拆成多库多表,一个应用也会被拆成多个应用,整个系统处于分布式的状态,这个时候就需要保证分布式架构下的数据一致性。关于分布式事务在之后学习XTS中间件的时候再深入了解。

上一篇 下一篇

猜你喜欢

热点阅读