天天看點

Linux叢集和自動化維1.3 如何根據伺服器應用選購伺服器

<b>1.3 如何根據伺服器應用選購伺服器</b>

  無論實體伺服器是選用idc托管還是aws ec2雲主機(以下為了簡略說明,将它們統稱為伺服器),我們都要面臨一個問題,那就是選擇伺服器的硬體配置,選購硬體配置時要根據伺服器的應用需求而定。因為隻通過一台伺服器是無法滿足所有的需求,并解決所有的問題的。在設計網站的系統架構之前,應該從以下方面考慮如何選購伺服器:

伺服器要運作什麼應用。

需要支援多少使用者通路。

需要多大空間來存儲資料。

業務有多重要。

伺服器網卡方面的考慮。

安全方面的考慮。

機架安排是否合理化。

伺服器的價格是否超出了預算。

1.伺服器運作什麼應用

這是選購伺服器時首先需要考慮的問題,通常是根據伺服器的應用類型(也就是用途),來決定伺服器的性能、容量和可靠性需求。下面将按照負載均衡、緩存伺服器、前端伺服器、應用程式伺服器、資料伺服器和hadoop分布式計算的常見基礎架構來讨論。

負載均衡端:除了網卡性能以外,其他方面對伺服器的要求比較低,如果選用的是lvs負載均衡方案,那麼它會直接将所有的連接配接要求都轉給後端的web應用伺服器,是以建議選用萬兆網卡。如果選用的是haproxy負載均衡器,由于它的運作機制跟lvs不一樣,流量必須雙向經過haproxy機器本身,是以對cpu的運作能力會有要求,也建議選用萬兆網卡。如果選用的是aws ec2機器,則推薦使用m3.xlarge執行個體類型(m3類型提供計算、記憶體和網絡資源的平衡,是以是很多應用程式的良好選擇)。另外,aws官方也推出了負載均衡服務産品,即elastic

load balancing,它具有dns故障轉移和auto scalling的功能。

緩存伺服器:主要是varnish和redis,對cpu及其他方面的性能要求一般,但在記憶體方面的要求會盡量多些。筆者曾為了保證預算,在雙核(r3.large)機器上運作了4個redis執行個體,aws官方也建議将此記憶體優化型執行個體應用于高性能資料庫、分布式記憶體緩存、記憶體中分析、基因組裝配和分析,以及 sap、microsoft

sharepoint 和其他企業級應用程式的較大部署。

應用伺服器:由于它承擔了計算和功能實作的重任,是以需要為基于web架構的應用程式伺服器(application

server)選擇足夠快的伺服器,另外應用程式伺服器可能需要用到大量的記憶體,尤其是基于windows基礎架構的ruby、python、java伺服器,這一類伺服器至少需要使用單路至強的配置;筆者公司線上的核心業務機器選用的aws c3.xlarge類型。至于可靠性問題,如果你的架構中隻有一台應用伺服器,那這台伺服器肯定要足夠可靠才行,raid是絕對不能被忽視的選項。但如果有多台應用伺服器,并設計了負載均衡機制,具有備援功能,那就不必過于擔心了。

c3.xlarge ec2主機屬于計算優化型(compute optimized),也就是cpu加強型。這種類型的cpu/記憶體比例比較大,适合于計算密集型業務,它包含c1和c3系列。其執行個體除了較舊的兩個c1系列(c1.medium和c1.xlarge)是采用普通磁盤作為執行個體存儲以外,其他的(也就是c3系列的)全部都以ssd作為執行個體存儲,其中最高檔次的c3.8xlarge(32核心108個計算單元)的網絡性能明确标注為10g

bit/s,c3系列被認為是最具成本效益的類型。

特殊應用:除了用于web架構中的應用程式之外,如果伺服器還要處理流媒體視訊編碼、伺服器虛拟化、媒體伺服器,或者作為遊戲伺服器(邏輯、地圖、聊天)運作,那麼對cpu和記憶體的需求同樣會比較高,至少要考慮四核以上的伺服器。

公共服務:這裡指的是郵件伺服器、檔案伺服器、dns伺服器、域控伺服器等。通常會部署兩台dns伺服器以互相備份,域控主伺服器也會擁有一台備份伺服器(專用的或非專用的),是以對于可靠性,無須過于苛刻。至于郵件伺服器,至少需要具備足夠的硬體可靠性和容量大小,這主要是對郵件資料負責,因為很多使用者沒有儲存和歸檔郵件資料的習慣,待其重裝系統後,就會習慣性地到伺服器上重新下載下傳相應的資料。至于性能問題,則應評估使用者數量後再做決定。另外,考慮到它的重要性,建議盡量選擇穩定的伺服器系統,比如linux或bsd系列。

資料庫伺服器:資料庫對伺服器的要求也是最高、最重要的。無論你使用的是mysql、sql server還是oracle,一般情況下,都需要有足夠快的cpu、足夠大的記憶體、足夠穩定可靠的硬體。可直接采用dell poweredge r710或hp 580g5,cpu和記憶體方面也要盡可能最大化,如果預算充分,建議用固态硬碟做raid 10,因為資料庫伺服器對硬碟的i/o要求是最高的。

hadoop分布式計算:這裡建議選用密集存儲執行個體—d2執行個體,它擁有高頻率 intel xeon e5-2676v3(haswell)處理器、高達48tb的本地存儲、具備高磁盤吞吐量,并支援

amazon ec2 增強型聯網。它适合于大規模并行處理資料倉庫、mapreduce和hadoop分布式計算、分布式檔案系統、網絡檔案系統、日志或資料處理等應用。

更多關于aws ec2的執行個體類型請參考:https://aws.amazon.com/cn/ec2/instance-types/。

2.伺服器需要支援多少使用者通路

伺服器就是用來給使用者提供某種服務的,是以使用這些服務的使用者同樣是我們必須考慮的因素,可以從下面幾個具體的方面進行評估:

有多少注冊使用者。

正常情況下有多少使用者會同時線上通路。

每天同時線上通路的最高峰值大概是多少。

一般在項目實施之前,客戶方面會針對這些問題給出一個大緻的結果,但設計要盡量更充分和具體,同時,還要對未來的使用者增長做一個盡可能準确的預測和規劃,因為伺服器可能會支援越來越多的使用者,是以在進行網站或系統架構設計時要讓機器能夠靈活地擴充。

3.需要多大空間來存儲資料

關于這個問題需要從兩個方面來考慮,一方面是有哪些類别的資料,包括:作業系統本身占用的空間,安裝應用程式所需要的空間,應用程式所産生的資料、資料庫、日志檔案、郵件資料等,如果網站是web 2.0的,還要計算每個使用者的存儲空間;另一方面是從時間軸上來考慮,這些資料每天都在增長,至少要為未來兩三年的資料增長做個準确的預算,這就需要軟體開發人員和業務人員一起來提供充分的資訊了。最後将計算出來的結果乘上1.5左右的系數,以友善維護的時候做各種資料的備份和檔案轉移操作。

4.我的業務有多重要

這需要根據自身的業務領域來考慮,下面舉幾個簡單的例子,幫助大家了解這些伺服器對可靠性、資料完整性等方面的要求:

如果伺服器是用來運作一個wordpress部落格的,那麼,一台酷睿處理器的伺服器、1gb的記憶體,外加一塊160gb的硬碟就足夠了(如果是aws ec2主機,可以考慮t2.micro執行個體類型)。就算伺服器出現了一點硬體故障,導緻幾個小時甚至一兩天不能提供通路,生活也會照常繼續。

如果伺服器是用作測試平台的,那麼就不會如生産環境那樣對可靠性有極高的要求,所需要的可能隻是做好例行的資料備份即可,若伺服器當機,隻要能在當天把問題解決掉就可以了。

如果是一家電子商務公司的伺服器,運作着電子商務網站平台,當硬體發生故障而導緻當機時,你需要對以下“危言聳聽”的後果做好心理準備:投訴電話被打爆、顧客大量流失、顧客要求退款、市場推廣費用打水漂、員工無事可幹、公司營運陷入癱瘓狀态、資料丢失。事實上,電子商務網站一般是需要365×24小時不間斷運作和監控的,而且要有專人輪流值守,并且要有足夠的備份裝置,每天還要有專人負責檢查。

如果是大型廣告類或門戶類網站,那麼建議選擇cdn系統。由于它具有提高網站響應速度、負載均衡、有效抵禦ddos攻擊等特點,相對而言,每個節點都會有大量的備援。

這裡其實隻是簡單地讨論下業務對伺服器硬體可靠性的要求。要全面解決這個問題,不能隻考慮單個伺服器的硬體,還需要結合系統架構的規劃設計。

在回答了以上問題後,接下來就可以決定下面這些具體的選項了。

(1)選擇什麼cpu

回憶一下上面關于“伺服器運作什麼應用”和“需要支援多少使用者通路”兩個方面的考慮,這将幫助我們選擇合适的cpu。毫無疑問,cpu的主頻越高,其性能也就越高;兩個cpu要比一個cpu來得更好;至強(xeon)肯定比酷睿(core)的性能更強。但究竟怎樣的cpu才是最合适的呢?下面提供了一些常見情況下的建議:

如果業務剛剛起步,預算不是很充足,建議選擇一款經典的酷睿伺服器,這可以幫你節約大量的成本。而且,以後還可以根據業務發展的情況,随時更新到更高配置的伺服器。

如果需要在一台伺服器上同時運作多種應用服務,例如基于lnmp架構的web網站,那麼一個單核至強(例如x3330)或新一代的酷睿i5(雙核四線程)将是最佳的選擇。雖然從技術的角度來說,這并不是一個好主意,但至少能節約一大筆成本。

如果伺服器要運作mysql或oracle資料庫,而且目前有幾百個使用者同時線上,未來還會不斷增長,那麼至少應該選擇安裝一個雙四核伺服器。

如果需要的是web應用伺服器,雙四核基本就可以滿足要求了。

(2)需要多大的記憶體

同樣,“伺服器運作什麼應用”和“需要支援多少使用者通路”兩方面的考慮也将有助于我們選擇合适的記憶體容量。相比于cpu,筆者認為記憶體(ram)才是影響性能的最關鍵因素。因為在很多正在運作的伺服器中,cpu的使用率一般都在10%~30%之間,甚至更低。但由于記憶體容量不夠而導緻伺服器運作緩慢的案例比比皆是,如果伺服器不能配置設定足夠的記憶體給應用程式,那麼應用程式就需要通過硬碟接口緩慢地交換讀寫資料了,這将導緻網站慢得令人無法接受。記憶體的大小主要取決于伺服器的使用者數量,當然也和應用軟體對記憶體的最低需求和記憶體管理機制有關,是以,最好由程式員或軟體開發商給出最佳的記憶體配置建議。下面同樣給出了一些常見應用環境下的記憶體配置建議:

無論是apache還是nginx伺服器,一般情況下web前端伺服器都不需要配置特别高的記憶體,尤其是在叢集架構中,4gb的記憶體就已經足夠了。如果使用者數量持續增加,我們才會考慮使用8gb或更大的記憶體。單apache web機器,在配置了16gb的記憶體後,可以抗6000個并發連結數。

對于運作tomcat、resin、weblogic的應用伺服器,8gb記憶體應該是基準配置,更準确的數字需要根據使用者數量和技術架構來确定。

資料庫伺服器的記憶體由資料庫執行個體的數量、表大小、索引、使用者數量等來決定,一般建議配置16gb以上的記憶體,筆者公司在許多項目方案中使用了24gb到48gb的記憶體。

諸如postfix和exchange這樣的郵件伺服器對記憶體的要求并不高,1gb~2gb就可以滿足了。

還有一些特殊的伺服器,需要為之配置盡可能大的記憶體容量,比如配置有varnish和memcached的緩存伺服器等。

若是隻有一台檔案伺服器,1gb的記憶體可能就足夠了。

事實上,由于記憶體技術在不斷進化,價格也在不斷降低,是以才得以近乎奢侈地讨論4gb、8gb、16gb這些曾經不可想象的記憶體容量。然而,除了花錢購買記憶體來滿足應用程式的“貪婪”之外,系統優化和資料庫優化仍然是我們需要重視的問題。

(3)需要怎樣的硬碟存儲系統

硬碟存儲系統的選擇和配置是整個伺服器系統裡最複雜的一部分,需要考慮硬碟的數量、容量、接口類型、轉速、緩存大小,以及是否需要raid卡、raid卡的型号和raid級别等問題。甚至在一些高可靠性高性能的應用環境中,還需要考慮使用怎樣的外部存儲系統(san、nas或das)。下面将伺服器的硬碟raid卡的特點歸納一下:

如果是用作緩存伺服器,比如varnish或redis,則可以考慮用raid 0。

如果是跑nginx+fastcgi或nginx等應用,則可以考慮用raid 1。

如果是内網開發伺服器或存放重要代碼的伺服器,則可以考慮用raid 5。

如果是跑mysql或oracle等資料庫應用,則可以考慮用固态硬碟做raid 5或raid 10。

5.網卡性能方面的考慮

如果基礎架構是多伺服器環境,而且伺服器之間有大量的資料交換,那麼建議為每台伺服器配置兩個或更多的網卡,一個用來對外提供服務,另一個用來做内部資料交換。由于現在項目外端都置于防火牆内,是以許多時候單網卡就足夠了;而比如lvs+keepalived這種隻用公網位址的linux叢集架構,有時可能隻需要一塊網卡即可。建議大家選用萬兆網卡。另外,建議交換機至少也要選擇千兆網卡級别的。

如果采用的是aws ec2雲主機環境,單純以ec2作為lvs或haproxy意義不大。如果經常使用aws ec2機器,應該會注意到aws将機器的網卡性能分成了3個級别,即low、moderate、 high,那麼這3個級别分别是什麼情況呢?雖然aws沒有帶寬限制,但是由于多虛拟機共享host實體機的網絡性能和i/o性能,單個虛拟機的網絡性能也不是特别好度量,不過大概情況是這樣的:low級别的是20m bit/s,moderate級别的是40m bit/s,high級别的能達到80m bit/s~100m bit/s。從上面的分析情況可以得知,單台aws ec2主機作為網站的負載均衡入口,容易成為網站的瓶頸。這個時候可以考慮使用aws提供的elastic load

balancing産品,它可以在雲中的多個amazon

ec2 執行個體間自動配置設定應用程式的通路流量(大家注意到沒,相當于它将網站的流量分擔到了多台機器上)。它可以實作更高水準的應用程式容錯性能,進而無縫地提供配置設定應用程式流量所需的負載均衡容量。除了提供負載均衡常見的功能之外,它還具有auto scalling功能,關于auto scalling的詳細介紹,可參見aws官方文檔。

6.伺服器安全方面的考慮

由于目前國内的ddos攻擊還是比較普遍的,是以建議給每個項目方案和自己的電子商務網站配備硬體防火牆,比如juniper、cisco等硬體防火牆。當然了,這個問題也是網站後期營運維護需要考慮的,這裡隻是想讓大家有個概念性的認識。此外,建議租賃cdn服務,這樣萬一不幸遭遇惡意的ddos流量攻擊,cdn還能幫助抵擋部分惡意流量,核心機房的業務不至于在很短的時間内就會崩潰。

7.根據機架數合理安排伺服器的數量

這個問題應該在項目實施前就處理好了的,選擇伺服器時應該明确伺服器的規格,即到底是1u、2u還是4u的,到底有多少台伺服器和交換機,應該如何安排,畢竟機櫃隻有42u的容量。在小項目中這個問題可能無關緊要,但在大型項目的實施過程中,這個問題就很突出了。我們應該根據現有或額定的機架數目确定到底應該選擇多少台伺服器和交換機。

8.成本考慮:伺服器的價格問題

無論是在公司采購時,還是在項目實施過程中,成本都是非常重要的問題。筆者的方案經常被退回,理由就是超出預算。尤其對于一些小項目,預算更吃緊。之前筆者經常面對的客戶需求是為證券類資訊網站設計方案,隻要求周一至周日的上午九點至下午三點網站不出問題即可,并不需要做複雜的負載均衡高可用。是以面對這種需求,筆者會将單nginx或haproxy設計成負載均衡,後面接兩台web應用伺服器作為簡單叢集架構。如果是做中大型電子商務網站,那麼在伺服器成本上的控制就尤其重要了。事實上,我們經常面對的問題是,客戶給出的成本預算有限,而實際應用又需要比較多的伺服器,這時候,就不得不另外設計一套最小化成本預算方案來折中處理。

以上8個方面是我們在采購伺服器時應該要注意的因素,在選擇伺服器的元件時要有所偏重,然後根據系統或網站架構來決定伺服器的數量,盡量做到伺服器資源利用的最大化。在控制方案成本的同時,要做到最優的成本效益。