新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > 解决号 > IT

线上服务器宕机时,如何保证数据100%不丢失

时间:2019-07-04 15:06:49  来源:  作者:  发布:admin

一、写在前面

上篇文章《同学,消息中间件在你们生产项目里如何落地使用的?》,我们用一个简单易懂的电商场景给大家引入说明了一个消息中间件的使用场景。

同时,我们还基于RabbitMQ的HelloWorld级别的代码,给出了订单服务和仓储服务如何基于MQ中间件收发消息的示例。

二、业务场景回顾

这篇文章,我们来稍微深入探讨一些MQ中间件使用中的基础技术问题。

首先回顾一下上篇文章做出来的一个架构图,看看订单服务和消息服务是如何基于MQ来收发消息的。

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

线上服务宕机时,如何保证数据100%不丢失

 

三、意外宕机,问题凸现

假如你线上对MQ技术的使用就到此为止了,那么基本可以跟offer说拜拜了。。。

因为如果是我的话,作为一个面试官就没法继续往下问了。你这个MQ的使用以及理解的深度仅此而已的话,那基本就是刚刚对MQ技术入门的程度。

如果面试官要继续问,完全可以问下面的问题:

  • 那你说说如果仓储服务作为消费者服务,刚收到了一个订单消息,但是在完成消息的处理之前,也就是还没对订单完成仓储调度发货,结果这个仓储服务突然就宕机了,这个时候会发生什么事情?

 

所以说,大家还是要对这个技术了解的稍微深入一点点,否则随便被问几个问题就完蛋了。

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

线上服务宕机时,如何保证数据100%不丢失

 

RabbitMQ这个中间件默认的一个行为,就是只要仓储服务收到一个订单消息,RabbitMQ就会立马把这条订单消息给标记为删除,这个行为叫做自动ack,也就是投递完成一条消息就自动确认这个消息处理完毕了。

但是接着如果此时仓储服务收到了一个订单消息,但是还没来得及对仓库系统完成商品的调度发货,结果直接就宕机了。

此时,明显这个订单消息就丢失了啊,因为RabbitMQ那里已经没有了。。。

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

搞了半天,原因就是他的那个iphone8的订单在仓储服务那里,还没来得及调度发货直接就宕机了,导致这个订单消息就一直丢失了,始终没有给这个用户通知仓库系统进行发货。

这个问题,是不是很尴尬?所以说,技术问题是会严重影响企业的核心业务流程的!

各位小伙伴,还记得上一讲咱们的仓储服务消费消息的代码中,有一行关键的代码:

线上服务宕机时,如何保证数据100%不丢失

 

只要修改为false之后,RabbitMQ就不会盲目的投递消息到仓储服务,立马就删除消息了,说白了就是关闭autoAck的行为,不要自作主张的认为消息处理成功了。

接着,我们需要改造一下处理订单消息的代码,如下代码所示。

这段代码,说白了,就是在对订单完成了调度发货之后,在finally代码块中手动执行了ack操作,说我自己已经完成了耗时几十秒的业务逻辑的处理,现在可以手动ack通知RabbitMQ,这个消息处理完毕了。

线上服务宕机时,如何保证数据100%不丢失

 

此时整个架构运行流程大致看起来跟下面的图那样子。

线上服务宕机时,如何保证数据100%不丢失

 

架构流程改成上面那样后,就意味着只有完成了仓储调度发货的代码业务逻辑,确保仓库系统收到通知之后,仓储服务才会在代码中手动发送ack消息给RabbitMQ。

此时,RabbitMQ收到了这个ack消息,才会标记对应的订单消息被删除了。

如果说在仓储服务收到了订单消息,但是还没来得及完成仓储调度发货的业务逻辑,那也就绝对不会执行这条订单消息的ack操作,然后RabbitMQ也就不会收到这条订单消息的ack通知。

一旦RabbitMQ发现代表消费者的某个仓储服务实例突然宕机了,而这个仓储服务收到的一些订单消息还没来得及处理,没给自己发送那些消息的ack通知。

此时,RabbitMQ会自动对这条订单消息重发推送给其他在运行中的仓储服务实例,让其他的仓储服务实例去处理这条订单消息。

这样的话,就可以保证这条订单消息不会因为某个仓储服务实例的宕机而丢失,他会确保必须由某个仓储服务实例完成这条订单消息的调度发货处理,然后才会删除那条订单消息。

四、总结 tips

最后再来一张图,大家直观的感受一下:

线上服务宕机时,如何保证数据100%不丢失

 

好了,各位同学,这篇文章是不是相对稍微深入一点点,让大家了解到了一些使用MQ技术时候要考虑的一些问题?

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

线上生产环境中运行时,你必须要考虑到消费者服务可能宕机的问题。

如果消费者服务没处理完消息就自己宕机了,那么一定会导致部分消息的丢失,进而影响核心业务流程的运转。

因此大家在线上使用MQ时,一定要充分考虑这些潜在问题,同时结合具体的MQ提供的一些API、参数来进行合理设置,确保消息不要随意丢失。



Tags:服务器   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
◆◆SVN服务器的安装◆◆1)下载VisualSVN Server,官网:https://www.visualsvn.com/server/download,根据要选择32位和64为位。(V3.3.1版本支持操作系统环境:WindowsVista 、Windo...【详细内容】
2020-03-19   服务器  点击:(12)  评论:(0)  加入收藏
1. 获取服务器证书文件下载好压缩包,找到Nginx文件夹中的证书。2. 安装服务器证书复制 server.key、server.cer 文件到 Nginx 安装目录下的 conf 目录。打开 Nginx 安装目录...【详细内容】
2020-03-19   服务器  点击:(5)  评论:(0)  加入收藏
当我们有了一个 VPS 主机以后,为了不浪费 VPS 的强大资源(相比共享主机1000多个站点挤在一台机器上),往往有想让 VPS 做点什么的想法,银子不能白花啊:)。放置多个网站或者博客是...【详细内容】
2020-03-19   服务器  点击:(12)  评论:(0)  加入收藏
最近对自己的博客网站进行HTTPS化,打造一个安全的博客,博客地址:https://www.toptech.top/,,下面是具体步骤:1、下载nginx安装包wget -i -c http://nginx.org/download/nginx-1.17...【详细内容】
2020-02-13   服务器  点击:(2)  评论:(0)  加入收藏
概述:为了安全起见,我们对所有应用服务器,DB服务器,REDIS缓存服务器不配置公网IP,只配内网IP。这样有一个问题就是没有公网IP的服务器无法上网。而某些应用的请求接口需要上网...【详细内容】
2020-03-19   服务器  点击:(6)  评论:(0)  加入收藏
管理Linux服务器有时非常困难。对于没有太多命令行工具经验的人来说,这可能非常困难。此外,管理员在忙碌时也很难管理他们的服务器。从移动设备上的终端模拟器登录并不是最舒服的工作方式。这就是Webmin之类的控制面板...【详细内容】
2019-12-20   服务器  点击:(0)  评论:(0)  加入收藏
首先要确认的是你的服务器的系统,Windows、或者linux系统。 要想在Windows系统里运行php网站,可以选择iis或者Apache,如果你单独的去安装,可能会花很多时间去配置这个软件直接问...【详细内容】
2020-03-17   服务器  点击:(5)  评论:(0)  加入收藏
一直有朋友多次问到服务器1U是什么意思?42u机柜能放多少服务器?这个问题在我们弱电vip群里也经常被问到,之前一直没有发布关于这方面知识,本期我们一起来总结下。 一、什么是1U?...【详细内容】
2020-02-17   服务器  点击:(0)  评论:(0)  加入收藏
服务器其实就是一台配置更高的计算机,它的内部结构也和普通的计算机大同小异。 可以看到,服务器是由电源、CPU、内存、硬盘、风扇、光驱等几部分构成。今天,将挑选一些重要的...【详细内容】
2020-03-17   服务器  点击:(10)  评论:(0)  加入收藏
什么是vps主机、独立服务器、云服务器?(1)vps主机:英文Virtual Private Server的缩写,中午翻译为“虚拟专用服务器”它是虚拟服务器软件在一台物理服务器上创建多个独立的小服务...【详细内容】
2020-03-16   服务器  点击:(7)  评论:(0)  加入收藏
一 DHCP简介网络的普及与网络技术的成熟,现在的人越离不开网络,个人的手机,电脑,智能家居设备等都需要网络,我们的这些用网的设备无论是在在访问Internet网,还是局域网内部通信都...【详细内容】
2019-12-25   服务器  点击:(0)  评论:(0)  加入收藏
linux云服务器上怎么登录?linux系统是我们在购买云服务器时经常会用到的系统,下面我们介绍下从本地登录Linux云服务器的几种方法。远程密码登录1)下载远程链接软件Putty,打开Put...【详细内容】
2020-03-13   服务器  点击:(9)  评论:(0)  加入收藏
云服务器安全配置开放哪些端口?我们购买云服务器?后通常需要设置安全组规则,开放需要用到的端口。常用的端口号如:SSH(22)、HTTP(80)、HTTPS(443)、MYSQL(3306)等。使用云服务器,你肯定...【详细内容】
2020-02-21   服务器  点击:(3)  评论:(0)  加入收藏
一般我们远程连接一台Windows服务器时,不用加端口号,实际上用的是默认的3389端口,如下图:这个端口号经常会被人恶意扫描,因此强烈建议修改,这里介绍几种方法供参考:方法一、修改注...【详细内容】
2020-03-13   服务器  点击:(6)  评论:(0)  加入收藏
关于安全端口的一些说明,Linux远程端口默认22,很多破解机,等模拟猜测系统都是以默认端口22来模拟的 而22的端口是非常危险的,下面新之洲为大家带来的是修改Linux默认端口的方法!...【详细内容】
2020-03-10   服务器  点击:(4)  评论:(0)  加入收藏
云服务器选什么操作系统?云服务器选择什么操作系统,从表面上看,似乎是在Linux或Windows之间二选一即可。事实上却复杂得多,因为Linux以多种发行版的形式出现,每一个发行版本的工...【详细内容】
2020-03-11   服务器  点击:(4)  评论:(0)  加入收藏
在网络上ddos攻击现象严重,为了保证业务的正常稳定运行,隐藏服务器真实IP是个不错的方法,这可以让攻击者找不到攻击目标,从而有效地保护服务器的安全。第一种是使用CDN,CDN内容分...【详细内容】
2020-03-13   服务器  点击:(6)  评论:(0)  加入收藏
机架式服务器是为互联网而设计的一种服务器模式,是按照统一的外观标准设计并与机柜结合使用的服务器。可以说机架式服务器是结构优化的塔式服务器。为什么机架式服务器是为In...【详细内容】
2020-03-12   服务器  点击:(4)  评论:(0)  加入收藏
现在国内互联网环境复杂,网络攻击事件频发,大部分互联网企业都有被网络攻击的经历。当互联网公司遭到网络攻击时,直接导致在线业务瘫痪,给企业造成巨大的经济损失。网度通信建议...【详细内容】
2020-03-13   服务器  点击:(6)  评论:(0)  加入收藏
刀片服务器宕机是什么意思?宕机时间在台湾是一个计算机术语。这就是中国大陆的停机时间。这通常被称为宕机。它之所以叫宕机,是因为它来自英语音译“down”。通常此时,网站无法...【详细内容】
2020-03-13   服务器  点击:(5)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条