新聞資訊  快訊  焦點  財經  政策  社會
互 聯 網   電商  金融  數據  計算  技巧
生活百科  科技  職場  健康  法律  汽車
手機百科  知識  軟件  修理  測評  微信
軟件技術  應用  系統  圖像  視頻  經驗
硬件技術  知識  技術  測評  選購  維修
網絡技術  硬件  軟件  設置  安全  技術
程序開發  語言  移動  數據  開源  百科
安全防護  資訊  黑客  木馬  病毒  移動
站長技術  搜索  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:服務器   點擊:()  評論:()
聲明:本站部分內容來自互聯網,內容觀點僅代表作者本人,如有任何版權侵犯請與我們聯系,我們將立即刪除。
▌相關評論
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
▌相關推薦
我們知道做好負載均衡對網站的正常運行,用戶體驗相當重要。在負載均衡中有一個必須要做的事情就是給服務器開啟GZIP壓縮功能,對用戶請求的頁面進行壓縮處理,以達到節省網絡帶寬...【詳細內容】
2019-12-27   服務器  點擊:(3)  評論:(0)  加入收藏
網站的種類多到讓我們眼花繚亂,不管是高端網站建設還是普通的模板建站,我們都知道網站要想運行需要放到虛擬主機或者服務器上,那么我們也面臨著如何選擇購買主機的問題。網站主...【詳細內容】
2019-12-27   服務器  點擊:(2)  評論:(0)  加入收藏
Linux服務器程序一般以后臺形式運行。后臺程序又稱守護進程。它沒有控制終端,因而也不會意外接受用戶輸入。守護進程的父進程一般是init進程(pid=1)...【詳細內容】
2019-12-26   服務器  點擊:(1)  評論:(0)  加入收藏
一、http_load 程序非常小,解壓后也不到100Khttp_load以并行復用的方式運行,用以測試web服務器的吞吐量與負載。但是它不同于大多數壓力測試工具,它可以以一個單一的進程運行,一...【詳細內容】
2019-11-21   服務器  點擊:(1)  評論:(0)  加入收藏
第一步:安裝vsftpd提供ftp服務  https://www.cnblogs.com/lyq159/p/12070791.html第二步:安裝Nginx提供http服務  1.安裝準備:安裝Nginx環境    a)gcc      安裝...【詳細內容】
2019-12-26   服務器  點擊:(1)  評論:(0)  加入收藏
不少電腦客戶端用戶為了方便訪問Oracle服務器,想必經常為Oracle服務器配置ODBC源,當然了,這個過程也是比較簡單的,下面看一下32位的操作系統是如何配置ODBC數據源的打開控制面板...【詳細內容】
2019-12-26   服務器  點擊:(1)  評論:(0)  加入收藏
漏洞描述近日webmin被發現存在一處遠程命令執行漏洞,經過分析后,初步猜測其為一次后門植入事件,webmin是目前功能最強大的基于web的unix系統管理工具,管理員通過瀏覽器訪問webmi...【詳細內容】
2019-12-26   服務器  點擊:(1)  評論:(0)  加入收藏
前言上一篇樹莓派也跑Docker和.NET Core有對樹莓派做簡單的介紹。包括系統的燒錄、基本的設置、docker的安裝、.net core的運行等。有人問我是不是一定要跑docker,答案肯定是...【詳細內容】
2019-10-25   服務器  點擊:(0)  評論:(0)  加入收藏
安裝ffmpeg安裝過程略安裝完成后,檢查是否安裝成功。比如我這里采用向pili推流的方式,將本地的一個mp4視頻推流到七牛pili。ffmpeg -re -i /tmp/ffmpeg_test.mp4 -vcodec copy...【詳細內容】
2019-12-25   服務器  點擊:(4)  評論:(0)  加入收藏
代理服務器,英文全稱是“Proxy Server”,功能是借助代理網絡,幫用戶去取得網絡信息。形象地說,它是一個網絡信息的中轉站,是個人網絡和Internet(因特網)服務商之間的中間代理機構,負...【詳細內容】
2019-12-24   服務器  點擊:(1)  評論:(0)  加入收藏
作為IT基礎設施資源的新一代交付和使用模式,云服務器近兩年在國內風生水起,迅速贏得市場認可,越來越多的企業開始將關鍵業務遷移上云。受到市場刺激,國內大大小小的服務商紛紛...【詳細內容】
2019-12-23   服務器  點擊:(4)  評論:(0)  加入收藏
說說過往的經歷我是在2003年左右,讀大學的時候接觸Linux的,開始僅僅是為了玩,就是好玩,因為Linux和windows不一樣,感覺很神秘,也很酷,期間斷斷續續。直到2006年開始講授Linux服務...【詳細內容】
2019-10-06   服務器  點擊:(2)  評論:(0)  加入收藏
安全是 IT 行業一個老生常談的話題了,從之前的“棱鏡門”事件中折射出了很多安全問題,處理好信息安全問題已變得刻不容緩。 因此做為運維人員,就必須了解一些安全運維準則,同時...【詳細內容】
2019-12-23   服務器  點擊:(1)  評論:(0)  加入收藏
隨著網絡的發展,服務器在企業中發揮的作用也越來越大,但同樣隨著網絡技術的發展,網絡攻擊和病毒也日益猖狂,那么我們應該要怎么來維護服務器呢? 服務器的維護可以分為兩大模塊,分...【詳細內容】
2019-12-20   服務器  點擊:(7)  評論:(0)  加入收藏
最近要做一個相關的解決方案,在虛擬機測試沒有問題。給大家分享出來,有更好的解決方案,歡迎討論。1.1 inotify相關介紹1、rsync與傳統的cp、tar備份方式相比,rsync具有安全性高...【詳細內容】
2019-12-19   服務器  點擊:(6)  評論:(0)  加入收藏
我們站長在選擇云服務器的時候會瀏覽看到一些主機評測類網站,基本上看到的評測類網站對于商家和服務器的評測信息都包含各種跑分和測評腳本工具出來的數據。我們很多網友還是...【詳細內容】
2019-12-19   服務器  點擊:(7)  評論:(0)  加入收藏
1. 首先查看網絡連接數netstat -an或者 ss -s 進行統計,如果帶上-p參數的話當連接數比較多的時候就會比較慢或者查看系統:/proc/net/sockstat:sockets: used 160TCP: inuse 0...【詳細內容】
2019-12-17   服務器  點擊:(6)  評論:(0)  加入收藏
阿里云Ecs服務器運維過程中,無論是Centos系統還是Windows系統,有時候我們需要監控分析最新的服務器資源利用率等運行情況,例如最近3個小時CPU使用率情況、內存使用率、網絡流入...【詳細內容】
2019-12-17   服務器  點擊:(4)  評論:(0)  加入收藏
第一部分 RDS MySQL 數據庫遷移第二部分 ECS 服務器鏡像遷移第三部分 遷移服務器后遇到的問題說明 為了更加容易方便閱讀目的地賬號 為 A賬號(杭州)源賬號 為 B 賬號(新加坡...【詳細內容】
2019-12-17   服務器  點擊:(5)  評論:(0)  加入收藏
apache服務器是Linux系統中基于提供網站web瀏覽的服務器,是建立web站點非常常用的服務器軟件之一,除了apache還有nginx。今天以apache服務器軟件為例給大家做介紹。1、安裝apa...【詳細內容】
2019-12-13   服務器  點擊:(13)  評論:(0)  加入收藏
最新更新
欄目熱門
欄目頭條
31选7开奖11185