消息中间件
消息中间件
张欢19933 发表于11个月前
消息中间件
  • 发表于 11个月前
  • 阅读 179
  • 收藏 4
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

概念

消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。

消息中间件适用于需要可靠的数据传送的分布式环境。采用消息中间件机制的系统中,不同的对象之间通过传递消息来激活对方的事件,完成相应的操作。发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。消息中间件能在不同平台之间通信,它常被用来屏蔽掉各种平台及协议之间的特性,实现应用程序之间的协同,其优点在于能够在客户和服务器之间提供同步和异步的连接,并且在任何时刻都可以将消息进行传送或者存储转发,这也是它比远程过程调用更进一步的原因。

特性

1.Message Priority
Producer把消息发送给Broker来存储,那么我们就可以再消息队列中对我们的消息来进行排序,实现不同的优先级。从而满足我们复杂的业务需求。
2.Message Order
消息排序,有的消息的处理是需要按照一定的顺序进行处理的,比如用户的创建订单、订单付款、订单完成。那么对于消费者也需要按照这个流程来消费,否则就没有意义了。
3.Message Filter
在消息对立中,也可以对我们的消息进行过滤,比如按照消息类型等条件来过滤
4.Message Persistence
消息的持久化,一般有以下几种方式
 (1)持久化到数据库,比如MySQL
 (2)持久哈到KV存储,比如redis
 (3)文件形式持久化
消息的持久化,防止了系统挂掉后,仍然能够从之前备份中恢复出来。
5.Broker的Buffer满了怎么办?
我们知道Broker是用来存储需要处理的消息,如果消息过多,导致Buffer满了怎么办?
这时候就会采取一定的策略来丢弃已有的消息。
6.事务的支持
正如上面所谈到的订单的操作,因此消息中间件中也会提供对分布式事务的支持。
7.定时消息
在实际应用中,有时也会需要定时消费的功能,因此中间件中,也会对消息进行排序,然后实现定时发送或者消费消息的业务需求。
8.消息重试
考虑一下这个问题,如果消息消费失败后,怎么办,是等待处理这个消息呢?还是让消费者在此消费一次呢?通常情况下,采取后者的形式,因为大多数情况下,消费失败的原因在于该消息本身的原因,如果在此消费这个消息的话,还是会出现失败的情况,因此通常采取在此发送消息在此消费消息的方式。
9.回溯消费
什么是回溯消费呢?对于已经消费成功的消息,是不是在Broker中就丢弃该消息呢?显而易见是不可能的,因此需要中间件对该功能支持,支持已经消费的信息进行时间段内的存储,等待某一刻内该消息会被重新消费的可能。

应用实例

假设我们有这么一个应用场景,为了完成一个用户注册淘宝的操作,可能需要将用户信息写入到用户库中,然后通知给红包中心给用户发新手红包,然后还需要通知支付宝给用户准备对应的支付宝账号,进行合法性验证,告知sns系统给用户导入新的用户等10步操作。 那么针对这个场景,一个最简单的设计方法就是串行的执行整个流程,如图所示:

这种方式的最大问题是,随着后端流程越来越多,每步流程都需要额外的耗费很多时间,从而会导致用户更长的等待延迟。自然的,我们可以采用并行的方式来完成业务,能够极大的减少延迟,如图所示。

但并行以后又会有一个新的问题出现了,在用户注册这一步,系统并行的发起了4个请求,那么这四个请求中,如果通知SNS这一步需要的时间很长,比如需要10秒钟的话,那么就算是发新手包,准备支付宝账号,进行合法性验证这几个步骤的速度再快,用户也仍然需要等待10秒以后才能完成用户注册过程。因为只有当所有的后续操作全部完成的时候,用户的注册过程才算真正的“完成”了。用户的信息状态才是完整的。而如果这时候发生了更严重的事故,比如发新手红包的所有服务器因为业务逻辑bug导致down机,那么因为用户的注册过程还没有完全完成,业务流程也就是失败的了。这样明显是不符合实际的需要的,随着下游步骤的逐渐增多,那么用户等待的时间就会越来越长,并且更加严重的是,随着下游系统越来越多,整个系统出错的概率也就越来越大。

通过业务分析我们能够得知,用户的实际的核心流程其实只有一个,就是用户注册。而后续的准备支付宝,通知sns等操作虽然必须要完成,但却是不需要让用户等待的。 这种模式有个专业的名词,就叫最终一致。为了达到最终一致,我们引入了MQ系统。业务流程如下:

主流程如图所示:

用户注册流程-引入MQ系统-主流程

异步流程如图所示:

用户注册流程-引入MQ系统-异步流程

发布-订阅消息模式已经呈现在我们面前,利用它可以产生更灵活、更松散耦合的系统。

标签: 消息中间件
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 28
博文 417
码字总数 211350
×
张欢19933
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: