欢迎关注我的公众号:石杉的架构笔记(ID:shishan100)
面试
周一至周五早8点半!精品技术文章准时送上!算法
上篇文章「Java进阶面试系列之一」大家系统架构中为什么要引入消息中间件?,给你们讲了讲消息中间件引入系统架构的做用,主要是解决哪些问题的。数据库
其比较常见的实践场景是:性能优化
这篇文章给你们讲讲,若是你在系统架构里引入了消息中间件以后,会有哪些缺点?网络
1)系统可用性下降架构
首先是你的系统总体可用性绝对会下降,给你举个例子,咱们就拿以前的一幅图来讲明。并发
好比说一个核心链路里面,系统A -> 系统B -> 系统C,而后系统C是经过MQ异步调用系统D的。异步
看起来很好,你用这个MQ异步化的手段解决了一个核心链路执行性能过差的问题。分布式
可是你有没有考虑另一个问题,就是万一你依赖的那个MQ中间件忽然挂掉了怎么办?这个还真的不是异想天开,MQ、Redis、MySQL这些组件都有可能会挂掉。微服务
一旦你的MQ挂了,就致使你的系统的核心业务流程中断了。原本你要是不引入MQ中间件,那其实就是一些系统之间的调用,可是如今你引入了MQ,就致使你多了一个依赖。一旦多了一个依赖,就会致使你的可用性下降。
所以,一旦引入了MQ中间件,你就必须去考虑这个MQ是如何部署的,如何保证高可用性。
甚至在复杂的高可用的场景下,你还要考虑若是MQ一旦挂了之后,你的系统有没有备用兜底的技术方案,能够保证系统继续运行下去。
以前写过两篇文章,都涉及到了MQ挂掉以后的高可用保障方案。
大伙若是感兴趣,能够参考一下:
经过这两篇文章,具体看看咱们在各类场景下遇到MQ故障采起的高可用降级方案。
2)系统稳定性下降
仍是上面那张图,你们再来看一下。
不知道你们有没有发现一个问题,这个链路除了MQ中间件挂掉这个可能存在的隐患以外,可能还有一些其余的技术问题。
好比说,莫名其妙的,系统C发了一个消息到MQ,结果那个消息由于网络故障等问题,就丢失了。这就致使系统D没有收到那条消息。
这可就惨了,这样会致使系统D没完成本身该作的任务,此时可能整个系统会出现业务错乱,数据丢失,严重的bug,用户体验不好等各类问题。
这还只是其中之一,万一说系统C给MQ发送消息,不当心一抽风重复发了一条如出一辙的,致使消息重复了,这个时候该怎么办?
可能会致使系统D一会儿把一条数据插入了两次,致使数据错误,脏数据的产生,最后同样会致使各类问题。
或者说若是系统D忽然宕机了几个小时,致使没法消费消息,结果大量的消息在MQ中间件里积压了好久,这个时候怎么办?
即便系统D恢复了,也须要慢慢的消费数据来进行处理。
因此这就是引入MQ中间件的第二个大问题,系统稳定性可能会降低,故障会增多,各类各样乱七八糟的问题均可能产生。
并且一旦产生了一个问题,就会致使系统总体出问题。就须要为了解决各类MQ引起的技术问题,采起不少的技术方案。
关于这个,咱们后面会用专门的文章聊聊MQ中间件的这些问题的解决方案,包括:
3)分布式一致性问题
引入消息中间件,还有分布式一致性的问题。
举个例子,好比说系统C如今处理本身本地数据库成功了,而后发送了一个消息给MQ,系统D也确实是消费到了。
可是结果不幸的是,系统D操做本身本地数据库失败了,那这个时候咋办?
系统C成功了,系统D失败了,会致使系统总体数据不一致了啊。
因此此时又须要使用可靠消息最终一致性的分布式事务方案来保障。
关于这个,能够参考以前的一篇文章:
咱们在里面详细阐述了系统之间异步调用场景下,如何采用分布式事务方案保证其数据一致性。
最后,咱们来作一个简单的小结。
在面试中要答好这个问题,首先必定要熟悉MQ这个技术的优缺点。了解清楚把他引入系统是为了解决哪些问题的,可是他自身又会带来哪些问题。
此外,对于引入MQ之后,是否对他自身可能引起的问题有一些方案的设计,来保证你的系统高可用、高可靠的运行,保证数据的一致性。这个也有作好相应的准备。
END
若有收获,请帮忙转发,您的鼓励是做者最大的动力,谢谢!
一大波微服务、分布式、高并发、高可用的原创系列文章正在路上
欢迎扫描下方二维码,持续关注:
石杉的架构笔记(id:shishan100)
十余年BAT架构经验倾囊相授
推荐阅读:二、【双11狂欢的背后】微服务注册中心如何承载大型系统的千万级访问?
三、【性能优化之道】每秒上万并发下的Spring Cloud参数优化实战
六、大规模集群下Hadoop NameNode如何承载每秒上千次的高并发访问
七、【性能优化的秘密】Hadoop如何将TB级大文件的上传性能优化上百倍
八、拜托,面试请不要再问我TCC分布式事务的实现原理坑爹呀!
九、【坑爹呀!】最终一致性分布式事务如何保障实际生产中99.99%高可用?
十一、【眼前一亮!】看Hadoop底层算法如何优雅的将大规模集群性能提高10倍以上?
1六、亿级流量系统架构之如何设计全链路99.99%高可用架构
1八、大白话聊聊Java并发面试问题之volatile究竟是什么?
1九、大白话聊聊Java并发面试问题之Java 8如何优化CAS性能?
20、大白话聊聊Java并发面试问题之谈谈你对AQS的理解?
2一、大白话聊聊Java并发面试问题之公平锁与非公平锁是啥?
2二、大白话聊聊Java并发面试问题之微服务注册中心的读写锁优化
2三、互联网公司的面试官是如何360°无死角考察候选人的?(上篇)