成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

軟件系統可擴展性背后的爭用、一致性和數學

譯文
開源
如何量化系統的可擴展性?人們需要了解哪些定律能夠幫助估計軟件系統上線之后的擴展能力。

【51CTO.com快譯】本文將介紹如何通過數學方程來描述系統——至少在某種程度上是這樣的。人們將熟悉諸如爭用、一致性和相關性延遲之類的術語。此外,還將展示可以幫助計算這三種機制對應用程序影響的定律及其數學方程。

這篇文章側重于整體系統設計和架構,并將嘗試回答“可以無限地擴展系統嗎?”這個問題。

然而,為了充分理解這個主題,將首先回答一個更簡單的問題:什么是可擴展性?

什么是可擴展性?

可擴展性的最佳定義之一可以在維基百科中找到,可以這樣引用:通過添加更多資源來處理越來越多的工作的系統屬性(...)

從這樣的聲明中,可以預期,如果軟件系統被認為是可擴展的,可以添加越來越多的資源(線程、CPU、節點),并可能處理任何增加的傳入流量。然而,這僅適用于理想世界。在令人失望的現實中,必須考慮以上提到的三個概念。在開始解釋它為什么采用這種方式之前,先介紹有關線性可擴展性的細節。

線性可擴展性

一般來說,這是想要實現的最佳情況。在這里,當向系統添加資源時,它總是會導致其性能提升。更重要的是,可以無限期地做到這一點,而不會受到任何負面影響。可以用來計算線性可擴展性影響的數學方程非常小且簡單。

線性可擴展性方程

S→整體任務的執行時間整體提升

N→改進的資源(線程、CPU、節點)

現在可以看到,執行時間的整體改進只取決于改進的資源,所以添加的資源越多,獲得的性能提升就越大。不幸的是,如上所述,在更復雜的系統中幾乎不可能出現這種情況。

在對線性可擴展性進行了簡要介紹之后,可以進一步探討其他主題,先從爭用開始。

什么是爭用?

簡單地說,這是對共享資源訪問權的競爭。幾乎所有東西都可以是這樣的資源,從像CPU周期這樣的低級資源到像數據庫訪問線程這樣的高級資源,甚至是更高的抽象資源(例如系統套接字)。

就像每場比賽一樣都只有一名獲勝者一樣,但更重要的是,在“獲勝者”勝出之后,其余的“參與者”必須等待,仍在利用和封鎖他們的資源,等待“獲勝者”完成任務之后,然后從頭開始進行比賽。

同樣,與任何其他比賽一樣,擁有的競爭者越多,成為最終獲勝者所需的時間就越多。在面向軟件的世界中,這意味著當將系統置于足夠的負載時,可以預期所有可接受的時間限制都將被打破。與此同時,系統將繼續利用其他地方可能需要的資源,這可能會導致越來越多的故障。

在任何類型的線程池的情況下,情況似乎更加復雜。在那里,可以看到最終有多個贏家的情況,因為有很多線程在線程池中,并且有多個輸家。此外,在這種情況下選擇下一個獲勝者的過程與特定的線程池實施密切相關。

現在,當知道什么是爭用以及它可能如何影響應用程序之后,繼續描述第一條定律。

什么是阿姆達爾定律?

阿姆達爾定律是由吉恩·阿姆達爾于1967年提出的。它描述了在資源得到改進的系統中,在固定負載下任務執行延遲的理論改進——例如在多線程的情況下,這里指的是添加更多線程。

簡而言之,它可以用來計算通過向系統添加更多資源而獲得的最大改進。在這里至關重要的是,只有使用特定資源的代碼才能從這種資源改進中獲益,這是一個非常合乎邏輯的結論,因此受到非獲益部分的執行時間的限制。

例如:

如果想向系統添加更多線程,只有多線程的部分才能從這些操作中受益,而且將會受到單線程部分的執行時間的限制。

阿姆達爾定律方程

S→整體任務執行時間整體提升

σ→未受益于改進資源的部分最初占用的執行時間比例

N→改進的資源(線程、CPU、節點)

當參數(σ)設置為0時,阿姆達爾定律將自身簡化為線性可擴展方程形式。

可以將σ替換為(1-p),并在轉換后得到另一個與上述公式類似的方程:

p→受益于改進資源的部分原先占用的執行時間比例。

與p=1時的σ=0類似,阿姆達爾定律將自身簡化為線性可擴展方程形式。這兩種情況都描述了當整個應用程序受益于改進資源時的最大潛在好處。

需要記住的是,這兩個方程是相等的,并且應該為各自的數據返回相同的結果。將在示例中包括計算。

例子:

例如有一項工作運行了9個小時。假設5小時長的部分可以并行化和改進,改進后的速度將是之前的三倍。

現在知道:

N=3

p=5/9=0.56

σ=4/9=0.44

所以

如上所見,在這種情況下,將能夠比以前快0.59倍(大約6小時3分鐘)完成任務。

這里有兩個值得注意的事情:

(1)如果整個程序受益于系統資源改進,S最多可以等于3;σ=0|p=1。

(2)受益部分越大,改善越大。

在上圖中,可以看到N從0到10的繪制圖,σ=0.44,這適用于阿姆達爾定律。

阿姆達爾定律和爭用

由于爭用使每個請求者的可用資源越來越少,從而限制了系統的并行化,因此可以看到,代碼庫越有爭議,改進所產生的整體影響就越小。

在解釋了爭用、爭用對軟件的影響以及如何計算爭用之后,可以轉向需要討論的第二個概念。

什么是一致性?

一致性是指處理讀/寫的順序,以確保以合理的順序查看這兩個操作。它是整個系統設計中最重要的主題之一。這就是它在字母C下的CAP定理中找到了其表示的原因。兩個最重要的一致性模型是最終一致性和強一致性。還有其他一致性模型,但它們不那么重要。

什么是相關性?

相關性是一個與一致性密切相關的術語,是關于確保任何相關方在給定時刻看到處于相同狀態的同一特定數據段。對于在兩個或多個節點之間共享其部分狀態的所有系統來說,這是一個至關重要的概念。

什么是相關性延遲?

如果相關性是為了確保對狀態特定部分的任何請求返回相同的值,那么相關性延遲可以被視為達到系統范圍一致性所需的時間。

這里值得一提的是,向系統添加更多節點會增加相關性延遲的時間。

相關性延遲和岡瑟定律

岡瑟定律或通用可擴展性定律(USL)由尼爾·岡瑟于1993年制定。它建立在阿姆達爾定律之上,但另外,它考慮了由于進程間通信引起的開銷。

通俗地說,它允許計算系統的可擴展性,同時考慮并發性、爭用(阿姆達爾定律)和相關性延遲,使最終結果更符合實際情況。事實上,由于在方程中引入了相關性延遲,能夠看到嘗試擴大系統的負面結果。

岡瑟定律方程

S→整體任務執行時間整體提升。

σ→未受益于改進資源的部分最初占用的執行時間比例。

κ→系統用于實現一致性的執行時間比例,即相關性延遲;沒有辦法計算它,必須測量它或者只是通過在等式中放置不同的值來試驗它,查看系統可以擴展的程度。

N→改進的資源(線程、CPU、節點)

當描述相關性延遲(κ)的參數設置為0時,岡瑟定律將自身簡化為阿姆達爾定律方程形式。

例子:

數據與阿姆達爾定律的數據相同,但此外,系統將其正常運行時間的7%用于使其狀態保持一致。

N=3

σ=4/9=0.44

κ=0.07

那么根據上面的計算可以做什么呢?

(1)性能改進有所下降,而不是0.59改進,只有0.30的提升。

(2)如果繼續給系統增加資源,可以看到性能下降而不是增加,這里可以看到當將N縮放到10時,性能下降了0.11。

(3)從計算中可以看出,相關性延遲(κ)對整體改進的影響比爭用大得多。

可以在下面找到岡瑟定律的繪圖,其中N從0到10,σ=0,44κ=0.07。可以看到,對于N等于9,開始注意到性能下降。

如何選擇最優的N?

這個答案很簡單,但需要做一些數學運算,本文中的大部分內容也是如此。首先,可以將岡瑟定律視為一個函數S(N),對于任何函數(實際上只是一部分),可以計算S(N)具有最大值的點(N)。擁有這樣的價值提供了兩條非常重要的信息:

(1)知道在投入使用之前需要準備多少資源。

(2)可以計算系統在當前狀態下擴展的范圍。

所有這一切都可以使用普通的計算器或紙筆實現,不包括計算機(取決于計算機的先進程度)。

最優N方程:

例子:

正在計算所需的節點數,以最大限度地改進岡瑟定律示例中的數據。

σ=4/9=0.44

κ=0.07

如上所見,最佳節點數為2.83,但由于無法添加部分節點,因此會添加3個節點并最終得到p=3。

為了驗證它,將計算S(4),并查看使用4個節點而不是3個節點。將實現多大的改進。需要記住,S(3)=1.3。

S(4)=1.26

如上所見,S(4)比S(3)小(稍微小一些)。

回答最后的問題

可以無限擴展系統嗎?當然不是。

除非系統完全無狀態(這樣的情況很少),否則只能將其擴展到岡瑟定律所描述的程度。如果在該限制范圍內添加更多資源,最終將降低系統性能,而不是提高性能。

即使在幾乎沒有相關性延遲的最佳情況下,最終也會受到阿姆達爾定律的限制,這仍然遠遠不能達到線性可擴展性的程度,要實現這樣的可擴展性,基本上必須沒有狀態,并且完全并行化的軟件沒有串行瓶頸。

在上圖中,可以看到繪制的圖表:線性可擴展性(藍線)、阿姆達爾定律(綠線)和通用的可擴展性定律(紅線)從0到5。可以清楚地看到它們之間的差異,特別是它們與期望的可擴展性(線性)之間的距離。當然,N越大,這種差異就越明顯。根據研究,κ參數的值沒有通用規則。它的真正價值僅取決于系統的復雜性。

結論

希望通過本文可以學到有關整體系統設計的新知識,并且對將來有用。需要記住的是,可以計算可擴展性,而線性可擴展性是不可能的。

原文標題:Contention, Coherency, and Math Behind Software,作者:Bartłomiej Żyliński

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

 

責任編輯:華軒 來源: 51CTO
相關推薦

2021-09-02 09:42:11

測試軟件可擴展性開發

2024-10-10 14:01:34

2023-06-15 15:40:36

2022-09-05 15:17:34

區塊鏈比特幣可擴展性

2017-07-25 14:38:56

數據庫一致性非鎖定讀一致性鎖定讀

2022-03-29 10:39:10

緩存數據庫數據

2024-10-28 12:41:25

2020-04-01 15:50:17

TiDBMySQL數據庫

2022-12-14 08:23:30

2021-12-03 14:41:00

云存儲可擴展性存儲

2012-06-04 11:04:46

虛擬化

2021-05-17 07:28:23

Spring可擴展性項目

2016-10-13 14:38:51

OpenStack可擴展性IT人員

2021-12-09 05:36:16

云存儲可擴展性數據存儲云存儲

2013-04-09 10:16:28

OpenStackGrizzlyHyper-V

2021-12-05 21:06:27

軟件

2021-02-05 08:00:48

哈希算法?機器

2021-02-02 12:40:50

哈希算法數據

2010-03-18 11:01:34

VMware

2023-05-17 15:53:21

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 不卡视频在线 | 福利av在线 | 成人在线看片 | 九九久久在线看 | 国产成人av一区二区三区 | 国产一区二区三区精品久久久 | 欧美极品视频在线观看 | 国产成人久久精品一区二区三区 | 精品国产18久久久久久二百 | 全部免费毛片在线播放网站 | 综合天天久久 | 久久精品国产一区二区电影 | 国产激情一区二区三区 | 欧美日产国产成人免费图片 | 玖玖精品视频 | 欧美成人在线网站 | 精品一区视频 | 天天射天天操天天干 | 成人影院网站ww555久久精品 | 玩丰满女领导对白露脸hd | 可以免费看的毛片 | 一区二区三区av夏目彩春 | 欧美日韩国产精品一区二区 | 美日韩免费 | 亚洲一区二区三区在线免费观看 | 性欧美精品一区二区三区在线播放 | 国产精品久久久久久久久久久久冷 | 久久亚洲美女 | 国产一区二区 | 999热在线视频 | av一区二区三区 | 一级黄色影片在线观看 | 国产一区二区视频在线 | 国产伦一区二区三区久久 | 亚洲欧美激情国产综合久久久 | 日本一区二区高清不卡 | 精品久久久精品 | 一级日韩 | 久久在线视频 | 日日人人 | 一级做a爰片性色毛片 |