水平縮放的原因
什麼是水平縮放?
當我們在電腦科學中討論“縮放”時,我們指的是一個過程,透過該過程我們向系統新增更多“東西”以允許它處理更多“其他東西”。例如,您可以為膝上型電腦新增更多記憶體能夠一次執行更多程式。 這是擴充套件計算機的一種形式。 關鍵的想法是,您有一項要完成的任務,缺少某些資源會阻止您完成該任務。 在我們的膝上型電腦示例中,您缺少的資源是記憶體。 我們可以說你受到缺乏記憶的限制。
我們進一步將縮放分為兩大類:垂直縮放和水平縮放。 垂直擴充套件意味著我們將更多資源新增到單個計算機。 例如,我們新增更多磁碟空間,更多記憶體或更多CPU。 這些中的每一種都是垂直縮放的形式。
最終,垂直縮放將達到極限。 我們的計算機可以支援的記憶體和CPU數量有限制。 它因計算機而異,但限制在那裡。 最終,如果我們需要進一步擴充套件,我們需要透過新增更多計算機來擴充套件。 新增更多計算機的過程是水平縮放。
垂直縮放也稱為“向上擴充套件”,而水平縮放稱為“向外擴充套件”。因此,垂直擴充套件為系統中的單個節點新增更多資源,而水平擴充套件是向系統新增更多節點的過程。
您可能希望水平擴充套件系統的原因有很多。 我將覆蓋其中三個:
-
處理更多吞吐量。
-
容錯。
-
需要比單個節點更多的資源。
處理更多吞吐量
有時您需要能夠處理比單個節點更多的吞吐量。 典型的情況是執行多個Web伺服器來處理您的熱門網站獲得的所有流量。 大多數小型網站都可以使用單個Web伺服器。 隨著站點越來越流行,最終單個Web伺服器無法處理所有傳入請求,並且需要新增更多Web伺服器來處理負載。
對於某些用例,可以輕鬆實現吞吐量的水平擴充套件。 對於其他用例,透過水平擴充套件來提高吞吐量可能具有挑戰性。
有困難的場景和容易出場的場景之間有什麼區別? 主要區別之一是協調。 如果您可以新增不需要了解任何其他節點的新節點,那麼新增新節點相對簡單,這將允許您處理更多吞吐量。
以我們的Web伺服器為例。 網站可以成為橫向擴充套件的理想選擇。 如果每個Web伺服器都有一個站點內容的副本(這在許多網站中很常見),那麼我們可以在新節點之後新增新節點以處理越來越多的流量。 這通常被稱為“無共享”架構。 每個新的Web伺服器都是獨立的。 他們不互相交談,也不共享任何共享資源。
當您新增節點之間的協調和通訊,或者它們依賴於共享資源時,水平擴充套件以處理更多吞吐量開始變得更加困難。
容錯
看到想要向系統新增更多節點以提供更多容錯的人是相對常見的。 新增更多節點以更好地應對故障通常被稱為“高可用性”或“HA”。
假設我有一個由單個Web伺服器提供服務的網站。 如果該Web伺服器出現故障,我的網站將不再可用。 遊民。 我可以採取的一種方法是新增更多的Web伺服器,這樣如果一個伺服器發生故障,我仍然可以使用其他服 只要每個新節點可以獨立於其他節點執行,就可以新增更多節點。 如果我的網站是一個簡單的 靜態網站 ,那麼我可以新增更多節點並獲得更高的容錯能力。 但是,要實現這一點,我需要每個Web伺服器都是“無狀態的”。這允許任何單個節點處理對系統的任何請求。 無狀態,無 共享 系統是最容易新增容錯的。
即使我的系統不是無狀態,無共享系統,仍然可以透過水平擴充套件來新增容錯。 分散式資料庫透過在多個節點(3個或更多節點)上執行,然後跨這些節點複製資料來提供容錯功能。 副本的數量,也稱為“複製因子”,使我們能夠在系統的某些成員(通常稱為“叢集”)丟失的情況下生存。 複製因子越高,我們可以丟失並繼續執行的節點越多。 為什麼? 我們需要的資料存在於多個節點上,因此,即使我們丟失了該節點,我們仍然可以在叢集中的某個位置訪問它。
需要比單個節點更多的資源
在追求垂直擴充套件策略時,您最終會遇到限制。 您將無法新增更多記憶體,新增更多磁碟,新增更多“內容”。當那一天到來時,您需要找到一種方法來橫向擴充套件應用程式以解決問題。
想象一下批次資料處理系統。 每天晚上,它執行並透過一堆檔案進行攪拌以建立一些業務輸出。 隨著時間的推移,越來越多的輸入檔案越來越大。 當您生成非常重要的業務輸出時,輸入量的增加會導致您需要在記憶體中保留越來越多的資料。
可以新增到執行處理的計算機的記憶體量存在物理限制。 您可以升級到可以容納更多記憶體的計算機,但最終,您將無法繼續獲得更強大的單個節點。 您將對可以新增到給定節點的記憶體量達到物理限制。 您將需要新增更多節點,以便您可以繼續新增更多記憶體。 假設您的機器最多可以儲存64個記憶體。 當您達到該限制時,如果您需要更多記憶體,則需要開始新增其他節點。 你可以增加擁有兩臺機器,每臺機器有64臺記憶體,而不是被困在64臺機器的一臺機器上。
縮放以處理缺少物理資源聽起來像一個相對簡單的任務。 但是,當您的系統變得足夠大以實際需要這種轉換時,您可能會發現這是一個痛苦的工程挑戰。 為什麼? 我們正在談論擴充套件共享資源。 大多數在單個節點上執行的應用程式都沒有任何方法可以獲取記憶體等共享資源(有狀態)並在多臺計算機上使用它。 根據您的具體問題,可能會有一個框架來幫助您(如 Wallaroo )。
以下是重要的內容:如果您認為最終需要水平擴充套件,因為您需要更多的磁碟,記憶體或CPU,請提前計劃。 知道你將如何做到這一點,所以你不會突然發現自己需要在幾天內完成它,而你最好的情況是用幾周來衡量的。
包起來
水平縮放是一個深刻而複雜的主題。 我希望你比開始這篇文章時感受到更多的教育。 如果你想探索更多,我會推薦我的 2018 Papers We Love San Francisco談論Pat Helland的“超越分散式交易”。 該演講涵蓋了如何橫向擴充套件有狀態應用程式以及我們如何在Wallaroo中實現它們。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557424/viewspace-2284560/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- cad縮放快捷鍵命令 cad縮放快捷鍵使用的方法
- 縮放比
- 如何縮放SVGSVG
- AUTOCAD——視窗縮放
- Kubernetes的垂直和水平擴縮容的效能評估
- CAD如何使用縮放命令
- CKKS Part5: CKKS的重縮放
- win10游標怎麼縮放_win10游標縮放方法Win10
- macw的CAD教程:如何更快的縮放和平移Mac
- opencv 影像的型別轉換、影像的縮放OpenCV型別
- wpf viewbox整體縮放介面View
- Java中縮放緩衝影像Java
- 【Azure Standard Logic App】Workflow積壓非常嚴重的情況下, 執行例項居然不能自動縮放的原因?APP
- k8s HPA(HorizontalPodAutoscaler)--自動水平伸縮K8S
- win10怎麼開啟自定義縮放 win10怎麼自定義縮放Win10
- js如何監聽頁面縮放?JS
- unity3d縮放物體Unity3D
- 影像縮放、旋轉、翻轉、平移
- Flutter螢幕適配 - 等比縮放Flutter
- Flutter 自定義縮放控制元件Flutter控制元件
- Python tkinter矩形縮放測試程式Python
- android imageview 縮放檢視圖片AndroidView
- Canvas 縮放圖片中細節消失Canvas
- THREEJS 將構件縮放至視野中的方法JS
- ZoomIt 螢幕縮放和批註工具OOMMIT
- IINA 設定字幕縮放快捷鍵教程
- 禁止web頁面縮放解決方案Web
- SwiftUI圖片處理(縮放、拼圖)SwiftUI
- meta設定h5禁止縮放H5
- opencv 圖片幾何變換-縮放OpenCV
- 《你不知道的 CSS》之等比例縮放的盒子CSS
- 1.15 列印的縮放和頁邊距的設定 [Excel教程]Excel
- VAR:自迴歸建模與縮放的視覺大模型視覺大模型
- C#獲取Windows10螢幕的縮放比例C#Windows
- 使用RxJava實現ImageView的拖動、旋轉和縮放RxJavaView
- win10螢幕字型縮放模糊怎麼辦_win10縮放後字型模糊如何解決Win10
- 教你如何進行Prometheus 分片自動縮放Prometheus
- ios使用openlayer地圖縮放時卡頓iOS地圖