5.4 消息队列:如何避免系统故障传递?
1.同步调用 VS 异步调用
1.1同步调用:
sendEmail 被阻塞,同步等待。

1.2多个耗时操作的异步调用:

1.3异步调用:

优点:sendEmail不在被阻塞,立即返回。
缺点:sendEmail无法知晓发送结果:成功,失败。

2.消息队列构建异步调用架构

2.1点对点模型:
消息生产一次,消费一次

2.2发布订阅模型:
消息生产一次,消费多次。

3.消息队列的好处
1.实现异步处理,提升处理性能:加快写性能


2. 更好的伸缩性:可单独对前端集群扩容,也可以单独对后端消费者扩容,增加服务器,不需要对系统做任何调整

3.削峰填谷

4.失败隔离和自我修复:
发布者不直接依赖消费者,所以消息系统可以将消费者系统错误与生产者系统组件隔离。
生产者和消费者互相不受对方失败影响。
这意味着任何时刻,我们都可以对后端服务器执行维护和发布操作。我们可以重启,添加或者删除服务器而不影响生产者可用性,这样简化了部署和服务器管理的难度。
5.解耦:

4.事件驱动架构EDA

业务扩展:添加新的消费者,订阅消息队列,其他消费者不要任何改动。
对比:非EDA,同步调用操作:前面出现异常,后面无法处理。
主要MQ产品比较
1.RabbitMQ----Erlang---(49M)
2.ActiveMQ-----Java----(27M)
3.RocketMQ-----Java--(35M)
4.Kafka----------Scala---(63M)
选择核心要点:出现问题,很快能找到解决方案。
选择要素:资料多,社区活跃,信息多,未来更有前景
简单暴力方法:baidu,google 搜索结果对比。
评论