消息中间件

1、消息的优缺点、选择哪种

  常见的消息插件有Kafka、ActiveMQ、RabbitMQ、RocketMQ...

  优点:
    解耦,使得子系统之间的耦合关系降低,只需要关注消息的发送与接收,不用担心子系统1挂了以后对子系统2产生影响;

    异步,系统直接的数据传输不需要直接请求,直接发送消息,其他系统接收消息,返回,速度大大提高;

    削峰,消息插件控制着请求数量,到达系统的数量/到数据库的数量。

  缺点:系统可用性降低、系统复杂度提高、一致性问题。

  ActiveMQ不支持高并发、高性能、高负债。RabbitMQ是用erlang语言写的,很多人不能研究和掌控,但是对于小公司来说没问题。RocketMQ阿里的也可以。大数据领域用Kafka是业内标准。

 

2、架构中引入消息的缺点

  系统可用性降低:当消息生产者已经将消息传递到MQ中,消费者还未消费,但是MQ突然挂了。所以引入MQ必须考虑到MQ的高可用以及MQ挂了之后的高可用保障方案。

  系统稳定性降低:消息传递者传递到MQ中结果网络故障等原因,接收者没有接收到。 或者传递着发送了多次重复数据,导致脏数据的产生等,降低了系统稳定性。所以此时就需要:消息可靠传递、消息幂等性传递、百万消息线上积压处理。

  分布式一致性的问题:如果接口A对数据库操作成功且将消息成功发送到MQ中,接口B拿到消息但是操作数据库失败,就会发生系统整体数据不一致问题。

  引入MQ中间件,如果消费者接收到消息后宕机了,并没有完成业务逻辑。 那么此时引入MQ后的代码逻辑里,就要对消息机制做一个保障。 在消费者成功处理业务逻辑后再删除MQ中间件中的某一条消息。 如果宕机,那么就重新将消息传递给其他消费者。

 

参考:石杉的架构笔记(公众号)。

posted @ 2018-12-18 08:34  几近虚年  阅读(188)  评论(0编辑  收藏  举报