日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

分布式系統的挑戰:八個關鍵故障的解讀

來源: 責編: 時間:2023-10-18 17:59:25 351觀看
導讀常見故障原因我們所謂系統發生故障是指當它無法再按照規格要求向用戶提供服務時。這種故障是由故障所引發的,即內部組件或系統所依賴的外部組件發生故障。有一些故障是可以被容忍的,對用戶沒有明顯的影響,而另一些則會導

BkQ28資訊網——每日最新資訊28at.com

常見故障原因

我們所謂系統發生故障是指當它無法再按照規格要求向用戶提供服務時。這種故障是由故障所引發的,即內部組件或系統所依賴的外部組件發生故障。有一些故障是可以被容忍的,對用戶沒有明顯的影響,而另一些則會導致系統故障。BkQ28資訊網——每日最新資訊28at.com

為了構建具備容錯能力的應用程序,首先需要了解可能出現哪些問題。在接下來的內容中,我們將探討一些最常見的故障根本原因。到最后,您可能會思考如何應對各種不同類型的故障。BkQ28資訊網——每日最新資訊28at.com

BkQ28資訊網——每日最新資訊28at.com

1、硬件故障

在計算機系統中,任何物理組件都可能發生故障。硬盤驅動器、內存模塊、電源供應器、主板、固態硬盤、網絡接口卡以及中央處理器等,均可能因各種原因停止正常運作。有時,硬件故障甚至可能導致數據損壞。更甚者,整個數據中心可能會因電力中斷或自然災害而發生故障。不過,正如我們將在后文討論的那樣,通過引入冗余措施,許多這些基礎設施故障是可以應對的。雖然你可能認為這些硬件故障是導致分布式應用程序失敗的主要原因,但實際上,它們往往因為一些非常普通的原因而出現問題。BkQ28資訊網——每日最新資訊28at.com

2、錯誤處理

在最近對五個流行的分布式數據存儲系統進行的用戶報告研究中,發現了多數災難性故障的根本原因是對非致命錯誤處理的不當。在大多數情況下,這些錯誤處理中的問題本可以通過簡單的測試來檢測出來。例如,有些錯誤處理程序完全忽略了錯誤。其他則捕捉了過于通用的異常,比如Java中的Exception,然后出于毫無充分理由的原因終止整個進程。還有一些錯誤處理程序只實施了部分功能,甚至包含了"FIXME"和"TODO"這樣的注釋。回過頭來看,這或許并不太令人意外,因為錯誤處理往往被視為次要問題。這也是Go語言如此重視錯誤處理的原因。在后續,我們將更加深入地探討測試大型分布式應用程序的最佳實踐。BkQ28資訊網——每日最新資訊28at.com

3、配置更改

配置更改是導致災難性故障的主要根本原因之一。問題不僅僅在于錯誤的配置可能會引發問題,還有一種情況是對于啟用了很少被使用的功能的有效配置更改不再按預期工作,或者從來沒有按預期工作。配置更改之所以特別危險,是因為它們的影響可能會拖延。如果一個應用程序僅在真正需要配置值的時候才讀取它們,那么無效的配置更改可能會在幾小時甚至幾天后才顯現出問題,從而無法及早被發現。因此,配置更改應該像代碼更改一樣受到版本控制,經過測試,并在變更時采取預防性驗證措施。在持續部署的背景下,我們將探討代碼和配置更改的安全發布實踐。BkQ28資訊網——每日最新資訊28at.com

4、單點故障

單點故障(SPOF)是指當某個組件故障時,整個系統都會崩潰的情況。實際上,系統可能存在多個單點故障。BkQ28資訊網——每日最新資訊28at.com

BkQ28資訊網——每日最新資訊28at.com

通常情況下,人員往往成為關鍵的單點故障(SPOF),如果將他們置于可能獨立引發災難性故障的位置,幾乎可以確定他們最終會引發這種故障。例如,人類故障經常發生在某人需要按照特定順序手動執行一系列操作步驟而不能犯任何錯誤的情況下。相比之下,計算機在執行指令方面表現出色,因此自動化應盡可能得到充分利用。BkQ28資訊網——每日最新資訊28at.com

另一個常見的SPOF是DNS。如果客戶端無法解析應用程序的域名,它們將無法連接到該應用程序。造成這種情況的原因多種多樣,從域名到期到整個根級域名崩潰都有可能。BkQ28資訊網——每日最新資訊28at.com

類似地,應用程序用于其HTTP端點的TLS證書也是一個SPOF。如果證書過期,客戶端將無法與應用程序建立安全連接。BkQ28資訊網——每日最新資訊28at.com

理想情況下,在系統設計階段就應該識別這些SPOF。檢測它們的最佳方法是審查每個系統組件,然后詢問如果其中任何一個出現故障會發生什么。有些SPOF可以通過引入冗余來解決,而其他一些則無法。在這種情況下,唯一的選擇就是減小SPOF的影響范圍,也就是在它們發生故障時對系統造成的損害。我們將在后續討論的許多彈性模式都旨在減小故障的影響范圍。BkQ28資訊網——每日最新資訊28at.com

5、網絡故障

當客戶端向服務器發送請求時,期望在不久后收到響應。在最佳情況下,請求后很快就會收到響應。如果出現了不同尋常的情況,客戶端有兩種選擇:要么繼續等待,要么因為超時異常或錯誤而取消請求。慢速的網絡調用是分布式系統的潛在隱患,因為客戶端無法確定響應是否最終會到達,因此它可能會長時間等待,或者干脆不取消請求,從而導致性能下降,而這種問題很難調試。這種故障也被稱為"灰色故障",它非常微妙,很難迅速或準確地檢測到。由于其特性,灰色故障可能會輕松使整個系統崩潰。BkQ28資訊網——每日最新資訊28at.com

BkQ28資訊網——每日最新資訊28at.com

當引入故障檢測和超時的概念時,會有很多原因導致未能獲得及時響應。舉例而言,服務器可能因在處理請求時速度極慢或崩潰而未能及時響應;或者可能是網絡丟失了少量數據包,從而引發大量的重傳和延遲。BkQ28資訊網——每日最新資訊28at.com

慢速網絡調用 是分布式系統的潛在殺手。由于客戶端不清楚響應是否最終會抵達,因此它可能花費大量時間等待,甚至可能不會放棄,這將導致性能下降,而問題難以調試。這種故障也被稱為 灰色故障,這是一種如此微妙以至于不能迅速或準確檢測到的故障。由于其特性,灰色故障很容易將整個系統帶入崩潰的邊緣。BkQ28資訊網——每日最新資訊28at.com

6. 資源泄漏

從觀察者的角度來看,一個非常慢的進程與根本不運行的進程幾乎沒有什么不同,兩者都無法執行有用的工作。資源泄漏是導致進程變慢的最常見原因之一。BkQ28資訊網——每日最新資訊28at.com

內存可能是受泄漏影響最廣泛的資源之一。內存泄漏會導致內存消耗逐漸增加。即使是帶有垃圾回收功能的編程語言也容易受到泄漏的影響:如果對不再需要的對象保留了引用,垃圾回收器將無法刪除它。當泄漏消耗了大量內存以至于剩下很少時,操作系統將開始積極將內存頁面交換到磁盤。此外,垃圾回收器將更頻繁地啟動,試圖釋放內存。所有這些都會消耗CPU周期并使進程變得更慢。最終,當物理內存不再可用,且交換文件空間耗盡時,進程將無法分配內存,導致大多數操作失敗。BkQ28資訊網——每日最新資訊28at.com

內存只是眾多可能泄漏的資源之一。以線程池為例:如果從線程池獲取的線程進行同步阻塞的HTTP調用而沒有設置超時,并且該調用從未返回,線程將不會返回到線程池。由于線程池具有有限的最大大小,如果持續喪失線程,最終線程將耗盡。BkQ28資訊網——每日最新資訊28at.com

或許你認為在前述情況下,采用異步調用而不是同步調用會有所幫助。然而,現代HTTP客戶端使用套接字池以避免重復創建TCP連接并支付性能代價。如果請求未設置超時,連接將永遠不會返回到池中。由于池的最大大小是有限的,最終將不再有可用的連接。BkQ28資訊網——每日最新資訊28at.com

此外,你的代碼并不是唯一訪問內存、線程和套接字的代碼。你的應用程序所依賴的庫也會使用相同的資源,它們可能會遇到我們剛剛討論的相同問題。BkQ28資訊網——每日最新資訊28at.com

7. 負載壓力

每個系統都有其負載容量,也就是它可以承受的負載極限。因此,當導向系統的負載持續增加時,它遲早會觸及到這個極限。BkQ28資訊網——每日最新資訊28at.com

然而,有機會的負載增長為系統提供了逐漸擴展和增加容量的時間,這是一種情況;而突然和意外的洪水是另一種情況。BkQ28資訊網——每日最新資訊28at.com

例如,考慮應用程序在一段時間內收到的請求數量。傳入請求的速率和類型可能會隨時間變化,有時甚至會因各種原因突然改變:BkQ28資訊網——每日最新資訊28at.com

  • 請求可能具有季節性。因此,例如,根據一天中的時間,應用程序可能會受到來自不同國家用戶的訪問。
  • 有些請求比其他請求昂貴得多,以意外的方式濫用系統,例如高速爬蟲抓取數據。
  • 有些請求是惡意的,例如試圖通過DDoS攻擊來飽和應用程序的帶寬,從而拒絕合法用戶的訪問。盡管一些負載激增可以通過自動增加容量(例如,自動擴展)來處理,但其他情況下,系統需要拒絕請求以保護自己免受過載。

8. 級聯故障

或許你認為,如果一個系統有數百個進程,那么如果其中一小部分進程變得緩慢或無法訪問,這應該不會有太大的影響。BkQ28資訊網——每日最新資訊28at.com

故障的問題在于它們具有蔓延傳播的潛力,會從一個進程傳播到另一個進程,直到整個系統崩潰。這種情況發生在系統組件相互依賴的情況下,其中一個組件的故障會增加其他組件故障的概率。BkQ28資訊網——每日最新資訊28at.com

通常需要采取足夠大的糾正措施來打破這個循環,比如暫時阻止流量到首次復制品。不幸的是,一旦這些故障開始,它們非常難以減輕,而預防故障從一個組件傳播到另一個組件是最佳方法。BkQ28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-14015-0.html分布式系統的挑戰:八個關鍵故障的解讀

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 如何讓你的Node.js應用程序處理數百萬的API請求

下一篇: 如何在 TypeScript 中使用類和繼承

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 5月iOS設備好評榜:iPhone 14僅排第43?

    來到新的一月,安兔兔的各個榜單又重新匯總了數據,像安卓陣營的榜單都有著比較大的變動,不過iOS由于設備的更新換代并沒有那么快,所以相對來說變化并不大,特別是iOS好評榜,老款設
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • Java NIO內存映射文件:提高文件讀寫效率的優秀實踐!

    Java的NIO庫提供了內存映射文件的支持,它可以將文件映射到內存中,從而可以更快地讀取和寫入文件數據。本文將對Java內存映射文件進行詳細的介紹和演示。內存映射文件概述內存
  • WebRTC.Net庫開發進階,教你實現屏幕共享和多路復用!

    WebRTC.Net庫:讓你的應用更親民友好,實現視頻通話無痛接入! 除了基本用法外,還有一些進階用法可以更好地利用該庫。自定義 STUN/TURN 服務器配置WebRTC.Net 默認使用 Google 的
  • Python異步IO編程的進程/線程通信實現

    這篇文章再講3種方式,同時講4中進程間通信的方式一、 Python 中線程間通信的實現方式共享變量共享變量是多個線程可以共同訪問的變量。在Python中,可以使用threading模塊中的L
  • 回歸OPPO兩年,一加贏了銷量,輸了品牌

    成為OPPO旗下主打性能的先鋒品牌后,一加屢創佳績。今年618期間,一加手機全渠道銷量同比增長362%,憑借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • Windows 11發布,微軟一改往常對老機型開放的態度

    距離 Windows 11 發布已經過去一周,在過去一周里,很多數碼愛好者圍繞其對 Android 應用的支持、對老機型的升級問題展開了激烈討論。與以往不同的是,在這次大
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學的小東加入了一個大學生兼職QQ群。群主“七王”在群里介紹一些刷單賺
Top 主站蜘蛛池模板: 大渡口区| 安阳市| 天水市| 玉山县| 扶余县| 阿鲁科尔沁旗| 昭觉县| 西乌珠穆沁旗| 繁峙县| 麻阳| 中牟县| 当涂县| 威远县| 双鸭山市| 三亚市| 台北县| 集安市| 德州市| 莱阳市| 英德市| 平乐县| 泸州市| 沾益县| 西和县| 时尚| 新闻| 丹凤县| 宜良县| 江北区| 五莲县| 鹿邑县| 宁海县| 芮城县| 东乡| 紫阳县| 潜山县| 清水县| 衢州市| 开远市| 康平县| 开封市|