1
0
mirror of https://github.com/doocs/advanced-java.git synced 2025-04-13 13:40:51 +08:00

Add association

This commit is contained in:
yanglbme 2018-10-07 20:58:15 +08:00
parent a5e83c48a2
commit 4847fab9cc
3 changed files with 5 additions and 5 deletions

View File

@ -2,7 +2,7 @@
如何保证消息队列的高可用?
## 面试官心理分析
如果有人问到你 MQ 的知识,**高可用是必问的**。上一讲提到MQ 会导致**系统可用性降低**。所以只要你用了 MQ接下来问的一些要点肯定就是围绕着 MQ 的那些缺点怎么来解决了。
如果有人问到你 MQ 的知识,**高可用是必问的**。[上一讲](/docs/high-concurrency/why-mq.md)提到MQ 会导致**系统可用性降低**。所以只要你用了 MQ接下来问的一些要点肯定就是围绕着 MQ 的那些缺点怎么来解决了。
要是你傻乎乎的就干用了一个 MQ各种问题从来没考虑过那你就杯具了面试官对你的印象就是只会简单使用一些技术没任何思考马上对你的印象就不太好了。这样的同学招进来要是做个 20k 薪资以内的普通小弟还凑合,要是做薪资 20k+ 的高工,那就惨了,让你设计个系统,里面肯定一堆坑,出了事故公司受损失,团队一起背锅。
@ -30,7 +30,7 @@ RabbitMQ 有三种模式:单机模式、普通集群模式、镜像集群模
所以这个事儿就比较尴尬了,这就**没有什么所谓的高可用性****这方案主要是提高吞吐量的**,就是说让集群中多个节点来服务某个 queue 的读写操作。
#### 镜像集群模式(高可用性)
#### 镜像集群模式(高可用性)
这种模式,才是所谓的 RabbitMQ 的高可用模式,跟普通集群模式不一样的是,你创建的 queue无论元数据还是 queue 里的消息都会**存在于多个实例上**,然后每次你写消息到 queue 的时候,都会自动把**消息同步**到多个实例的 queue 上。
![mq-8](http://p9ucdlghd.bkt.clouddn.com/mq-8.png)

View File

@ -11,7 +11,7 @@
Kafka 实际上有个 offset 的概念,就是每个消息写进去,都有一个 offset代表消息的序号然后 consumer 消费了数据之后,**每隔一段时间**(定时定期),会把自己消费过的消息的 offset 提交一下,表示“我已经消费过了,下次我要是重启啥的,你就让我继续从上次消费到的 offset 来继续消费吧”。
但是凡事总有意外,比如我们之前生产经常遇到的,就是你有时候重启系统,看你怎么重启了,如果碰到点着急的,直接 kill 进程了再重启。这会导致consumer 有些消息处理了,但是没来得及提交 offset尴尬了。重启之后少数消息会再次消费一次。
但是凡事总有意外,比如我们之前生产经常遇到的,就是你有时候重启系统,看你怎么重启了,如果碰到点着急的,直接 kill 进程了,再重启。这会导致 consumer 有些消息处理了,但是没来得及提交 offset尴尬了。重启之后少数消息会再次消费一次。
![mq-10](http://p9ucdlghd.bkt.clouddn.com/mq-10.png)

View File

@ -72,10 +72,10 @@
缺点有以下几个:
- 系统可用性降低<br>
系统引入的外部依赖越多,越容易挂掉。本来你就是 A 系统调用 BCD 三个系统的接口就好了,人 ABCD 四个系统好好的,没啥问题,你偏加个 MQ 进来,万一 MQ 挂了咋整MQ 一挂,整套系统崩溃的,你不就完了?如何保证消息队列的高可用,可以[点击这里查看](/high-concurrency/how-to-ensure-high-availability-of-message-queues.md)。
系统引入的外部依赖越多,越容易挂掉。本来你就是 A 系统调用 BCD 三个系统的接口就好了,人 ABCD 四个系统好好的,没啥问题,你偏加个 MQ 进来,万一 MQ 挂了咋整MQ 一挂,整套系统崩溃的,你不就完了?如何保证消息队列的高可用,可以[点击这里查看](/docs/high-concurrency/how-to-ensure-high-availability-of-message-queues.md)。
- 系统复杂度提高<br>
硬生生加个 MQ 进来,你怎么[保证消息没有重复消费](/high-concurrency/how-to-ensure-that-messages-are-not-repeatedly-consumed.md)?怎么处理消息丢失的情况?怎么保证消息传递的顺序性?头大头大,问题一大堆,痛苦不已。
硬生生加个 MQ 进来,你怎么[保证消息没有重复消费](/docs/high-concurrency/how-to-ensure-that-messages-are-not-repeatedly-consumed.md)?怎么处理消息丢失的情况?怎么保证消息传递的顺序性?头大头大,问题一大堆,痛苦不已。
- 一致性问题<br>
A 系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要是 BCD 三个系统那里BD 两个系统写库成功了,结果 C 系统写库失败了,咋整?你这数据就不一致了。