系統架構設計筆記(23)—— 系統性能計算與設計

1 系統性能計算

隨着計算機系統複雜度的不斷增長,性能指標也在不斷地增長,這也增加了衡量計算機系統性能的難度。如何在衆多指標中選取合適的性能指標,以及選擇何種衡量方法都成爲一項重要的課題,因此也衍生了各種性能評估體系。這裏主要介紹一些常用性能指標的計算方法。

在實際應用時,往往是對這些常用性能指標的複合計算,然後通過算法加權處理得到最終結果。

性能指標計算的主要方法有:定義法 、 公式法 、 程序檢測法 、 儀器檢測法。定義法主要根據其定義直接獲取其理想數據,公式法則一般適用於根據基本定義所衍生出的複合性能指標的計算,而程序檢測法和儀器檢測法則是通過實際的測試來得到其實際值(由於測試的環境和條件不定,其結果也可能相差比較大)。

有些性能指標,在不同的環境中,其名字相同,但計算方式和結果可能相差甚遠,例如,吞吐量 、 帶寬等,在計算機 、 路由器 、 交換機和網絡中多處出現了有關吞吐量的定義,但其具體的含義不盡相同。

1.1 MIPS 的計算方法

MIPS ,Million Instructions Per Second,即 每秒處理的百萬級的指令數。

例如,如果要計算 PentiumIV/2.4E 處理機的運算速度,因爲 PentiumIV/2.4E 處理機的 IPC=2 (或 CPI=0.5 ), Fz=2400MHz ,所以 例如,如果要計算 PentiumIV/2.4E 處理機的運算速度,因爲 PentiumIV/2.4E 處理機的 IPC=2 (或 CPI=0.5 ), Fz=2400MHz ,所以 MIPS = 2 * 2400=4800 MIPS。

1.2 峯值計算

衡量計算機性能的一個重要指標就是計算峯值或者浮點計算峯值,它是指計算機每秒鐘能完成的浮點計算最大次數。包括理論浮點峯值和實測浮點峯值。

理論浮點峯值是該計算機理論上能達到的每秒鐘能完成浮點計算最大次數,它主要是由 CPU 的主頻決定。

理論浮點峯值 = CPU 主頻 * CPU 每個時鐘週期執行浮點運算的次數 * 系統中 CPU 數

CPU 每個時鐘週期執行浮點運算的次數是由處理器中浮點運算單元的個數及每個浮點運算單元在每個時鐘週期能處理幾條浮點運算來決定的。

1.3 等效指令速度

  • 靜態指令使用頻度指的是在程序中直接統計的計算機速度。
  • 動態指令使用頻度指的是在程序執行過程中統計的指令速度。

在計算機發展的早期,用加法指令的運算速度來衡量計算機的速度。後來發展成爲等效指令速度法或吉普森( Gibson )法,在這種方法中,通常加 、 減法指令佔 50 % ,乘法指令佔 15% ,除法指令佔 5% ,程序控制指令佔 15% ,其他指令佔 15% 。例如,我國最早研製的小型計算機 DJS-130 ,定點 16 位,加法速度每秒 50 萬次,但沒有硬件乘法和除法等指令。用軟件實現乘法和除法,速度降低 100 倍左右,則其等效指令速度爲:

這裏的 0.8 表示除乘除之外的指令佔比,0.2 表示乘除指令佔比,0.5 表示加法速度,100 表示降速程度。

即每秒 2 萬次,由於乘法和除法用軟件實現,等效速度降低了 25 倍(50/2 = 25)。

又如,如果浮點開平方操作 FPSQR 的比例爲 2% ,它的 CPI 爲 100 ,其他浮點操作的比例爲 23% ,它的 CPI 4.0,其餘指令的 CPI 1.33,則該處理機的等效 CPI 爲

CPI(Clock cycle Per Instruction)表示每條計算機指令執行所需的時鐘週期。

如果 FPSQR 操作的 CPI 也爲 4.0,則其等效 CPI 爲:

由於改進了僅佔 2%的 FPSQR 操作的 CPI,使等效速度提高了近一倍。

2 性能設計

2.1 阿姆達爾解決方案

阿姆達爾定律是這樣的:系統中對某部件採用某種更快的執行方式,所獲得的系統性能的改變程度,取決於這種方式被使用的頻率,或所佔總執行時間的比例。

阿姆達爾定律定義了採用特定部件所取得的加速比。假定使用某種增強部件,計算機的性能就會得到提高,那麼加速比就是如下公式所定義的比率:

加速比反映了使用增強部件後完成一個任務比不使用增強部件完成同一任務加快了多少。阿姆達爾定律爲計算某些情況下的加速比提供了一種便捷的方法。加速比主要取決於兩個因素:

(1)在原有的計算機上,能被改進並增強的部分在總執行時間中所佔的比例。這個值稱之爲增強比例,它永遠小於等於 1(因爲增強的部分肯定屬於原有系統的一部分)。

(2)通過增強的執行方式所取得的改進,即如果整個程序使用了增強的執行方式,那麼這個任務的執行速度會有多少提高,這個值是在原來條件下程序的執行時間與使用增強功能後程序的執行時間之比。原來的機器使用了增強功能後,執行時間等於未改進部分的執行時間加上改進部分的執行時間:

總的加速比等於兩種執行時間之比:

2.2 負載均衡

負載均衡是由多臺服務器以對稱的方式組成一個服務器集合,每臺服務器都具有等價的地位,都可以單獨對外提供服務而無須其他服務器的輔助。通過某種負載分擔技術,將外部發送來的請求均勻地分配到對稱結構中的某一臺服務器上,而接收到請求的服務器獨立地迴應客戶的請求。

當用戶發現 Web 站點負載量非常大時,應當考慮使用負載均衡技術來將負載平均分攤到多個內部服務器上。如果有多個服務器同時執行某一個任務時,這些服務器就構成一個集羣。使用集羣技術可以用最少的投資獲得接近於大型主機的性能。

2.2.1 負載均衡技術的類型

(1)基於特定服務器軟件的負載均衡

很多網絡協議都支持 “ 重定向 ” 功能,例如,在 HTTP 協議中支持 Location 指令,接收到這個指令的瀏覽器將自動重定向到 Location 指明的另一個 URL 上。由於發送 Location 指令比起執行服務請求,對 Web 服務器的負載要小得多,因此可以根據這個功能來設計一種負載均衡的服務器。當 Web 服務器認爲自己負載較大的時候,它就不再直接發送回瀏覽器請求的網頁,而是送回一個 Location 指令,讓瀏覽器在服務器集羣中的其他服務器上獲得所需要的網頁。

在這種方式下,服務器本身必須支持這種功能,然而具體實現起來卻有很多困難。例如,一臺服務器如何能保證它重定向過的服務器是比較空閒的,並且不會再次發送 Location 指令? Location 指令和瀏覽器都沒有這方面的支持能力,這樣很容易在瀏覽器上形成一種死循環。因此這種方式實際應用當中並不多見,使用這種方式實現的服務器集羣軟件也較少。有些特定情況下可以使用 CGI (包括使用Fast CGI 或 mod_perl 擴展來改善性能)來模擬這種方式去分擔負載,而 Web 服務器仍然保持簡潔 、 高效的特性。此時,避免 Location 循環的任務將由用戶的 CGI 程序來承擔。

公共網關接口(Common Gateway Interface,CGI)是Web 服務器運行時外部程序的規範,按CGI 編寫的程序可以擴展服務器功能。CGI 應用程序能與瀏覽器進行交互,還可通過數據API與數據庫服務器等外部數據源進行通信,從數據庫服務器中獲取數據。格式化爲HTML文檔後,發送給瀏覽器,也可以將從瀏覽器獲得的數據放到數據庫中。幾乎所有服務器都支持CGI,可用任何語言編寫CGI,包括流行的C、C ++、Java、VB 和Delphi 等。CGI分爲標準CGI和間接CGI兩種。標準CGI使用命令行參數或環境變量表示服務器的詳細請求,服務器與瀏覽器通信採用標準輸入輸出方式。間接CGI又稱緩衝CGI,在CGI程序和CGI接口之間插入一個緩衝程序,緩衝程序與CGI接口間用標準輸入輸出進行通信。

(2)基於 DNS(Domain Name Server,域名服務器)的負載均衡

通過 DNS 服務中的隨機名字解析來實現負載均衡,在 DNS 服務器中,可以爲多個不同的地址配置同一個名字,而最終查詢這個名字的客戶機將在解析這個名字時得到其中一個地址。因此,對於同一個名字,不同的客戶機會得到不同的地址,它們也就訪問不同地址上的 Web 服務器,從而達到負載均衡的目的。 DNS 負載均衡的優點是簡單易行,並且服務器可以位於互聯網的任意位置上,當前使用在包括 Yahoo 在內的 Web 站點上。

然而它也存在不少缺點,一個缺點是爲了保證 DNS 數據及時更新,一般都要將 DNS 的刷新時間設置得較小,但太小就會造成太大的額外網絡流量,並且更改了 DNS 數據之後也不能立即生效;另一個缺點是 DNS 負載均衡無法得知服務器之間的差異,它不能做到爲性能較好的服務器多分配請求,也不能瞭解到服務器的當前狀態,甚至會出現客戶請求集中在某一臺服務器上的偶然情況。

(3)反向代理負載均衡

使用代理服務器可以將請求轉發給內部的 Web 服務器,使用這種加速模式顯然可以提升靜態網頁的訪問速度。因此也可以考慮使用這種技術,讓代理服務器將請求均勻地轉發給多臺內部 Web 服務器,從而達到負載均衡的目的。這種代理方式與普通的代理方式有所不同,標準代理方式是客戶使用代理訪問多個外部 Web 服務器,而這種代理方式是多個客戶使用它訪問內部 Web 服務器,因此也被稱爲反向代理模式。

實現這個反向代理能力並不能算是一個特別複雜的任務,但是在負載均衡中要求特別高的效率,這樣實現起來就不是十分簡單的事了。每針對一次代理,代理服務器就必須打開兩個連接,一個爲對外的連接,一個爲對內的連接。因此,當連接請求數量非常大的時候,代理服務器的負載也非常大,最後,反向代理服務器會成爲服務的瓶頸。例如,使用 Apache 的 mod_rproxy 模塊來實現負載均衡功能時,提供的併發連接數量受 Apache 本身的併發連接數量的限制。一般來講,可以使用它來連接數量不是特別大 、 但每次連接都需要消耗大量處理資源的站點來進行負載均衡,例如搜尋。

使用反向代理的好處是,可以將負載均衡和代理服務器的高速緩存技術結合在一起,以提供有益的性能;其具備額外的安全性,外部客戶不能直接訪問真實的服務器。並且實現起來可以採用較好的負載均衡策略,將負載非常均衡地分給內部服務器,不會出現負載集中到某個服務器的偶然現象。

(4)基於 NAT(Network Address Translation,網絡地址轉換)的負載均衡技術

網絡地址轉換指的是在內部地址和外部地址之間進行轉換,以便具備內部地址的計算機能訪問外部網絡,而當外部網絡中的計算機訪問地址轉換網關擁有的某一外部地址時,地址轉換網關能將其轉發到一個映射的內部地址上。因此如果地址轉換網關能將每個連接均勻轉換爲不同的內部服務器地址,此後,外部網絡中的計算機就各自與自己轉換得到的地址上的服務器進行通信,從而達到負載分擔的目的。

地址轉換可以通過軟件方式來實現,也可以通過硬件方式來實現。使用硬件方式進行操作一般稱爲交換,而當交換必須保存 TCP 連接信息的時候,這種針對 OSI/RM 網絡層的操作就被稱爲第四層交換。支持負載均衡的網絡地址轉換爲第四層交換機的一種重要功能,由於它基於定製的硬件芯片,因此其性能非常優秀,很多交換機聲稱具備 400MB ~ 800MB 的第四層交換能力;然而也有一些資料表明,在如此快的速度下,大部分交換機就不再具備第四層交換能力了,而僅僅支持第三層甚至第二層交換。

使用軟件方式來實現基於網絡地址轉換的負載均衡則要實際得多,除了一些廠商提供的解決方法之外,更有效的方法是使用免費的自由軟件來完成這項任務。其中包括 Linux Virtual Server Project 中的 NAT 實現方式。一般來講,使用這種軟件方式來實現地址轉換,中心負載均衡器存在帶寬限制,在 100MBps 的快速以太網條件下,能得到最高達 80MBps 的帶寬,然而在實際應用中,可能只有 40MBps ~ 60MBps 的可用帶寬。

(5)擴展的負載均衡技術

上面使用網絡地址轉換來實現負載分擔,毫無疑問所有的網絡連接都必須通過中心負載均衡器,那麼如果負載特別大,以至於後臺的服務器的數量不再在是幾臺 、 十幾臺,而是上百臺甚至更多,這時,即便是使用性能優秀的硬件交換機也會遇到瓶頸。此時問題將轉變爲,如何將那麼多臺服務器分佈到各個互聯網的多個位置,分散網絡負擔。當然這可以通過綜合使用 DNS 和 NAT 兩種方法來實現,然而更好的方式是使用一種半中心的負載均衡方式。

在這種半中心的負載均衡方式下,即當客戶請求發送給負載均衡器的時候,中心負載均衡器將請求打包併發送給某個服務器,而服務器的迴應請求不再返回給中心負載均衡器,而是直接返回給客戶,因此中心負載均衡器只負責接受並轉發請求,其網絡負擔就較小了。

2.2.2 服務器負載均衡

服務器負載均衡一般用於提高服務器的整體處理能力,並提高可靠性 、 可用性和可維護性,最終目的是加快服務器的響應速度,從而提高用戶的體驗度。

負載均衡從結構上分爲本地負載均衡( Local Server Load Balance )和全域負載均衡( Global Server Load Balance ),前者是指對本地的服務器羣做負載均衡,後者是指對分別放置在不同的地理位置 、 有不同的網絡及服務器羣之間做負載均衡。

全域負載均衡有以下特點:
(1)解決網絡擁塞問題,服務就近提供,實現地理位置無關性;
(2)對用戶提供更好的訪問質量;
(3)提高服務器響應速度;
(4)提高服務器及其他資源的利用效率;
(5)避免了數據中心單點失效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章