分散式系統關註點——初識「高可用」

来源:https://www.cnblogs.com/Zachary-Fan/archive/2018/09/26/HighAvailability1.html
-Advertisement-
Play Games

本文長度為2042字,建議閱讀6分鐘。所有「」包裹的文字,只對第一次出現進行高亮顯示。 閱讀目錄 「高可用」的作用? 如何來衡量「高可用」 做「高可用」的本質 結語 「高可用」的作用? 如何來衡量「高可用」 做「高可用」的本質 結語 「高可用」的作用? 如何來衡量「高可用」 做「高可用」的本質 結語 ...


本文長度為2042字,建議閱讀6分鐘。所有「」包裹的文字,只對第一次出現進行高亮顯示。

 

閱讀目錄

 

        咳咳,從這篇開始,正式拉開分散式系統關註點中,我認為第二重要的內容 —— 「高可用」。

 

        本篇的要點主要是明確「高可用」的定義,以及瞭解在分散式系統下哪些環節要做「高可用」,為後續要講的策略、方式方案打下基礎。如有1年以上的分散式系統實戰經驗可酌情選擇跳過本篇。

Tips:「高XX」中的“高”其實是相對的,越滿足期望值,就越是“高”的。

 

 

 一、「高可用」的作用?

        首先,統一下對「高可用」的認知。

        做個通俗一點的類比:獨生子女時代的子女就是“單體應用”,如果出意外了,父母就「失獨」了,整個家族的傳承就斷了,“不可用”了。然而,二胎政策就是通過分散式(冗餘)來降低出現這個問題的概率,從而提高“可用性”。

        對於「高可用」,專業的解釋是:

「高可用」指的是通過儘量縮短因日常維護操作(計劃)和突發的系統崩潰(非計劃)所導致的停機時間,以提高系統和應用的可用性。

        —— 百度百科

        簡而言之,不管發生了什麼(哪怕是地震、洪水了),能夠讓用戶儘可能的無感知,依舊能正常使用系統,也就是越「高可用」的。

 

        為什麼在「數據一致性」後面就聊「高可用」呢?我的理解是,分散式系統的關鍵是做冗餘,但是冗餘的最大敵人卻是「數據一致性」。我們通過冗餘打破了原先的瓶頸,打開了一些新的通道。如,可以去爭取更高的可用性、更高的性能等等。但是這其中,屬「高可用」最重要。從上面引用中的解釋也可以看到,要想儘可能的降低停機時間,單體應用的天花板總會更快的到來。就好比讓一臺電腦永遠保持運行是困難的,期間總得更新幾次操作系統、突然出現幾次硬體故障,甚至機房的光纖被挖斷了!那麼這個時候就處於“不可用”狀態。

        也因此,我認為「高可用」的價值或者說意義,必定是在我們做分散式系統獲得的其它好處之上的,比如「高性能」之類。因為,在一定範圍內,所謂的「高性能」其實通過優化單體應用也有可能達到某個期望值,但是「高可用」則必然需要依賴分散式系統才能達到。

 

 

 二、如何來衡量「高可用」

        一般我們講到最多的是用Service Level Agrement來衡量高可用指標,簡稱SLA。不過,其原意表示的是關於網路服務供應商和客戶間的一份合同,其中定義了服務類型、服務質量和客戶付款等術語,其中還包含除了「有效工作時間」之外的其它概念,如帶寬、服務就緒時間(RFSD)、平均故障間隔時間(MTBF)、服務平均恢復時間(MTRS)、平均修理時間(MTTR)等。最初,SLA多用於電信運營商之類的基礎設施所提供的服務中,商定用戶可以享受什麼樣的等級什麼樣的帶寬服務等等。

        SLA完整的定義會複雜的多,在軟體系統中主要是取了其中的「有效工作時間」部分。只要系統一直能夠提供服務,我們就可以說系統的可用性是100%,但這隻停留在理想中。如果系統每運行100個時間單位,會有1個時間單位無法提供服務,我們說系統的可用性是99%。貼一張常見的表格圖:

▲圖片來源於網路,版權歸原作者所有

 

        如今,我們的生活越來越依賴於移動互聯網的一些應用,假設支付寶掛了幾個小時,這下好了,刷不了卡了、轉不了帳了、信用卡也還不了了,慌不慌?

        不過,相對的,還可以投機的理解為,只要我能保證系統在你使用它的時候是可用的,那麼對外宣傳也可以是「高可用」的。這也是在互聯網普及之前,很多企業的內部C/S架構的信息系統得以正常使用的原因,比如銀行會在非營業時間更新他們的系統,所以對於服務視窗的營業員來說,系統並沒有不可用,因為那個時候我不需要用它。

 

 

 三、做「高可用」的本質

        做「高可用」用一句話來概括就是:

更快的發現故障,更快的隔離故障。

        任何對這2點有幫助的工作就是我們要做的事情。

 

        做任何事情都有主次之分,做高可用的“主”就是「負載均衡」。

        之前的文章中提到過多次,分散式系統的關鍵是做冗餘,那麼讓這些冗餘能發揮「高可用」作用的就是「負載均衡」。所以,這是最基本的,也是邁向「高可用」的第一步,其它的措施都是建立在「負載均衡」之上的。

        「負載均衡」的作用是一個“連接者”,讓上下游之間以我期望的方式“連接”起來。所以,有必要先瞭解一下這些上下游的全貌,並且從中找到我們要做「負載均衡」的地方。

 

        分散式系統有各式各樣的架構方式,不過本質上都是上圖這樣的一個分層架構。圖中紅點標記出的地方就是我們需要做「負載均衡」的地方,可以看到,就是每兩層之間的連接處。

        這些連接處在實際做「負載均衡」的時候,需要結合所處的網路層次。因為在不同的網路層次有不同的做法。如下圖。

        一般主流的四層負載均衡和七層負載均衡,前者指的就是傳輸層,主要涉及的協議是TCP、UDP等,後者指的應用層,主要涉及的協議是Http、Https和FTP等。

 

        用來實現「負載均衡」的解決方案有很多,分為基於硬體或者基於軟體的,比較成熟的諸如:F5(支持四層、七層)、LVS(支持四層)、Nginx(支持七層)等等。

        近些年,隨著Service Mesh的興起,隨著涌現了一大批新一代的「負載均衡」解決方案,如Envoy、Istio、Linkerd、Ribbon等,有興趣的小伙伴們可以自行研究下。

 

 

四、結語

        這篇先起個步,下篇聊聊有哪些做「負載均衡」的策略,用圖說話。

 

 

 

作者:Zachary(個人微信號:Zachary-ZF)

微信公眾號(首發):跨界架構師<-- 點擊後閱讀熱門文章,或右側掃碼關註 -->

定期發表原創內容:架構設計丨分散式系統丨產品丨運營丨一些深度思考

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • HTML: JavaScript: PHP介面(版本7.1.16): ...
  • 一、img的屬性:alt/title alt屬性是替換名字,是給搜索引擎抓取使用,當圖片顯示不出來時,就會顯示出alt的內容; title 屬性是提示文字,當滑鼠移到圖片上的時候會顯示出來,大部分的標簽都會有這個屬性 *******************************alt和title屬 ...
  • 註意:IE瀏覽器需要以下設置: 打開IE,在常用工具欄中選擇“工具” >Internet選項 >選擇"安全"標簽頁 >選擇"自定義級別" >彈出的視窗中找到ActiveX控制項和插件 >將"ActiveX控制項自動提示""對沒有標記安全的ActiveX控制項進行初始化和腳本運行""下載未簽名的Active ...
  • 方法一: jquery方法 movePage($('body')); function movePage(dom) { var startY, moveY, moveSpave; dom.on("touchstart", function(e) { startY = e.originalEvent. ...
  • 在使用伺服器端渲染時,除了服務端的介面緩存、頁面緩存、組建緩存等,瀏覽器端也避免不了要使用緩存,減少頁面的重繪。 這時候我們就會想到vue的keep-alive,接下來我們說一下keep-alive的使用 假如現在我們有兩個頁面,home.vue 和 about.vue home.vue about ...
  • 如果在控制項配置裡面設置了queueLimit屬性為1,就是隊列文件個數為1,並且在<input>標簽設置里multiple屬性。 在IE瀏覽器上傳附件的時候,瀏覽器會報錯“SCRIPT5007: 無法獲取未定義或 null 引用的屬性“replaceChild”。 解決辦法:在設置queueLimi ...
  • 最近寫了一個限流的插件,所以避免不了的接觸到了一些限流演算法。本篇文章就來分析一下這幾種常見的限流演算法 分析之前 計數器演算法 這個演算法可以說是限流演算法中最簡單的一種演算法了。 計數器演算法的意思呢就是當介面在一個時間單位中被訪問時,我就記下來訪問次數,直到它訪問的次數到達上限。 當一個請求過來時,我們就會 ...
  • 今年有人提出了2018年微服務將瘋狂至死,可見微服務的爭論從未停止過。在這我將自己對微服務的理解整理了一下,希望對大家有所幫助。 1.什麼是微服務 1)一組小的服務(大小沒有特別的標準,只要同一團隊的工程師理解服務的標識一致即可) 2)獨立的進程(java的tomcat,nodejs等) 3)輕量級 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...