欢迎来到爱乐透双色球预测_爱乐透app下载_爱乐透app官网! 联系我们 网站地图

爱乐透双色球预测_爱乐透app下载_爱乐透app官网

0379-65557469

项目建议书
全国服务热线
0379-65557469

电话: 0379-65557469
0379-63930906
0379-63900388 
0379-63253525   
传真: 0379-65557469
地址:洛阳市洛龙区开元大道219号2幢1-2522、2501、2502、2503、2504、2505室 

项目建议书
当前位置: 首页 | 咨询案例 > 项目建议书

线上服务宕机时,怎么确保数据100%不丢掉

作者:admin 发布时间:2019-10-01 18:59:35 浏览次数:296
打印 收藏 关闭
字体【
视力保护色

一、写在前面

上篇文章《同学,音讯中间件在你们出产项目里怎么落地运用的?》,咱们用一个简略易懂的电商场景给咱们引进说明晰一个音讯中间件的运用场景。

一起,咱们还根据RabbitMQ的HelloWorld等级的代码,给出了订单服务和仓储服务怎么根据MQ中间件收发音讯的示例。

二、事务场景回忆

这篇文章,咱们来略微深化探讨一些MQ中间件运用中的根底技能问题。

首要回忆一下上篇文章做出来的一个架构图,看看订单服务和音讯服务是怎么根据MQ来收发音讯的。

咱们略微把这个图细化一点,简略来说便是多个订单服务实例给queue推送音讯,多个仓储服务每个消费一部分音讯。如下图所示:

三、意外宕机,问题凸现

假设你线上对MQ技能的运用就到此为止了,那么根本能够跟offer说拜拜了。。。

由于假如是我的话,作为一个面试官就无法持续往下问了。你这个MQ的运用以及了解的深度仅此而已的话,那根本便是刚刚对MQ技能入门的程度。

假如面试官要持续问,完全能够问下面的问题:

  • 那你说说假如仓储服务作为顾客服务,刚收到了一个订单音讯,可是在完结音讯的处理之前,也便是还没对订单完结仓储调度发货,成果这个仓储服务忽然就宕机了,这个时分会发作什么事情?


所以说,咱们仍是要对这个技能了解的略微深化一点点,不然随意被问几个问题就完蛋了。

大伙儿先来看看下面的图,感受一下事故现场。

RabbitMQ这个中间件默许的一个行为,便是只需仓储服务收到一个订单音讯线上服务宕机时,怎么确保数据100%不丢掉,RabbitMQ就会立马把这条订单音讯给符号为删去,这个行为叫做主动ack,也便是投递完结一条音讯就主动承认这个音讯处理完毕了。

可是接着假如此刻仓储服务收到了一个订单音讯,可是还没来得及对库房体系完结产品的调度发货,成果直接就宕机了。

此刻,显着这个订单音讯就丢掉了啊,由于线上服务宕机时,怎么确保数据100%不丢掉RabbitMQ那里现已没有了。。。线上服务宕机时,怎么确保数据100%不丢掉

这会导致什么样的为难体会呢?便是一个用户支付了8999元,对一个iphone8下了订单,成果呢,死等活等了好几天,便是不见网站上显现他的iphone8在发货。

搞了半天,原因便是他的那个iphone8的订单在仓储服务那里,还没来得及调度发货直接就宕机了,导致这个订单音讯就一向丢掉了,一直没有给这个用户告诉库房体系进行发货。

这个问题,是不是很为难?所以说,技能问题是会严重影响企业的中心事务流程的!

各位小伙伴,还记得上一讲咱们的仓储服务消费音讯的代码中,有一行要害的代码:

只需修改为false之后,RabbitMQ就不会盲目的投递音讯到仓储服务,立马就删去音讯了,说白了便是封闭autoAck的行为,不要自作主张的以为音讯处理成功了。

接着,咱们需求改造一下处理订单音讯的代码,如下代码所示。

这段代码,说白了,便是在对订单完结了调度发货之后,在finally代码块中手动履行了ack操作,说我自己现已完结了耗时几十秒的事务逻辑的处理,现在能够手动ack告诉RabbitMQ,这个音讯处理完毕了。

此刻整个架构工作流程大致看起来跟下面的图那姿态。

架构流程改成上面那样后,就意味着只要完结了仓储调度发货的代码事务逻辑,保证库房体系收到告诉之后,仓储服务才会在代码中手动发送ack音讯给RabbitMQ。

此刻,RabbitMQ收到了这个ack音讯,才会符号对应的订单音讯被删去了。

假如说在仓储服务收到了订单音讯,可是还没来得及完结仓储调度发货的中青旅事务逻辑,那也就肯定不会履行这条订单音讯的ack操作,然后RabbitMQ也就不会收到这条订单音讯的ack告诉。

一旦RabbitMQ发现代表顾客的某个仓储服务实例忽然宕机了,而这个仓储服务收到的一些订单音讯还没来得及处理,没给自己发送那些音讯的ack告诉。

此刻,RabbitMQ会主动对这条订单音讯重发推送给其他在工作中的仓储服务实例,让其他的仓储服务实例去处理这条订单音讯。

这样的话,就能够保证这条订单音讯不会由于某个仓储服务实例的宕机而丢掉,他会保证必须由某个仓储服务实例完结这条订单音讯的调度发货处理,然后才会删去那条订单音讯。

四、总结 tips

最终再来一张图,咱们直观的感受一下:

好了,各位同学,这篇文章是线上服务宕机时,怎么确保数据100%不丢掉不是相对略微深化一点点,让咱们了解到了一些运用MQ技能时分要考虑的一些问题?

实际上无论是RocketMQ、Kafka仍是RabbitMQ,都有相似的autoAck或者是手动ack的机制。

线上出产环境中工作时,你必需要考虑到顾客服务或许宕机的问题。

假如顾客服务没处理完音讯就自己宕机了,那么一定会导致部分音讯的丢掉,从而影响中心事务流程的工作。

因而咱们在线上运用MQ时,一定要充分考虑这些潜在问题,一起结合详细的MQ供给的一些API、参数来进行合理设置,保证音讯不要随意丢掉。

原文地址:https://dwz.cn/dfTYRJds

作者:石杉的架构笔记

版权所有:洛阳市建设工程咨询有限责任公司 联系人:李经理 电话: 地址:洛阳市洛龙区开元大道219号2幢1-2522、2501、2502、2503、2504、2505室
版权所有 爱乐透双色球预测 冀ICP备170427648号-10