根據服務器應用來選購Linux服務器
無論是租用服務器還是托管都要面臨一個問題,那就是選擇服務器的硬件配置。前面也說了,選購硬件配置時要根據我們的服務器應用需求而定。因為你無法通過一臺服務器來滿足所有的需求、解決所有的問題。在項目實施或網站架構之前,我們應該從以下幾方面來考慮如何選購Linux服務器:
服務器運行的應用
需要支持的用戶訪問量
需要的存儲數據空間
業務的重要性
服務器網卡方面的考慮
安全方面的考慮
機架合理化安排
服務器的價格預算
下面分別來看一下。
1.服務器運行的應用
這是首先需要考慮的問題,我們通常要根據服務器的應用類型(也就是用途)來決定服務器的性能、容量和可靠性需求。下面將按照負載均衡、緩存服務器、前端服務器、應用程序服務器、數據服務器的常見基礎架構來討論。
負載均衡:它對服務器的要求非常低,尤其是用來做LVS負載時,它會直接將所有的連接要求轉給后端的Web應用。所以,在保證網卡性能的前提下(很多時候我用的是品牌服務器自帶的百兆網卡),可以將性能相對較差的配置用作負載均衡。
緩存服務器:主要是squid或varnish等,需要重點考慮兩方面的因素,即內存盡量多些,硬盤盡量快些,不要因為硬盤的I/O影響了整體性能。
Web前端服務器:正常情況下,大多數Web前端服務器(Front-end)對服務器的要求不高,例如靜態Web服務器、動態服務器、圖片服務器等。事實上現在很流行在一臺性能卓越的服務器上同時運行Web前端+應用服務器,比如Nginx+PHP-FPM、Nginx+Tomcat或Nginx+Resin。
應用程序服務器:由于它承擔了計算和功能實現的重任,我們需要為基于Web架構的應用程序服務器(Application Server)選擇足夠快的服務器。另外應用程序服務器可能需要用到大量的內存,尤其是基于Windows基礎架構的Ruby、Python、Java服務器,這一類服務器至少需要使用單路至強的配置。至于可靠性的問題,如果你的架構中只有一臺應用服務器,那這臺服務器需要足夠可靠,RAID是絕對不能忽視的選項。但如果有兩臺或更多的應用服務器,并設計了負載均衡機制、具有冗余功能,那就不必過于擔心了。
特殊的應用:除了用于Web架構中的應用程序之外,如果你的服務器還要處理流媒體視頻編碼、服務器虛擬化、媒體服務器(Asterisk之類),或者作為游戲服務器(邏輯、地圖、聊天)運行,那同樣會對CPU和內存的需求比較高,至少也要考慮單路至強的服務器。其中,服務器虛擬化對存儲可靠性的要求非常高,因為一個籃子里有十幾個雞蛋,籃子一定要足夠牢靠才行。
公共服務:這里指的是郵件服務器、文件服務器、DNS服務器、域控服務器等。通常我們會部署兩臺DNS服務器互相備份,域控主服務器也會擁有一臺備份服務器(專用的或非專用的),所以對于可靠性無須過于苛刻。至于郵件服務器,至少需要具備足夠的硬件可靠性和容量大小,這主要是對郵件數據負責,因為很多用戶沒有保存和歸檔郵件數據的習慣,待其重裝系統后,就會習慣性地到服務器上重新下載相應的數據。至于性能問題,則應評估用戶數量后再決定。另外,考慮到它的重要性,建議還要盡量選擇穩定的服務器系統,比如Linux或BSD系列。
數據庫:這是我們最后討論的應用,對服務器的要求也是最高、最重要的。無論你使用的是MySQL、SQL Server還是Oracle,一般情況下,它都需要有足夠快的CPU、足夠大的內存、足夠穩定可靠的硬件。可直接采用Dell PowerEdge R710或HP 580G5,CPU和內存也要盡可能最大化。如果預算充分,建議用固態硬盤作為RAID10,因為數據庫服務器對硬盤的I/O要求是最高的。
2.服務器需要支持的用戶訪問量
服務器就是為了給用戶提供某種服務的,所以使用這些服務的用戶同樣是我們必須考慮的因素。我們可以從下面幾個具體的問題進行評估:
有多少注冊用戶?正常情況下有多少用戶會同時在線訪問?每天同時在線訪問的最高峰值大概是多少?
一般在項目實施之前,客戶方面會針對這些問題給出一個大致的結果。但我們要盡量設計得比這更充分和具體。同時,我們還要對未來的用戶增長做一個盡可能準確的預測和規劃,因為你的服務器可能會支持越來越多的用戶,所以在進行網站或系統架構時要讓機器能靈活地擴展。
3.需要的存儲數據空間
關于這個問題需要從兩個方面來考慮,一方面是有哪些類別的數據,包括:操作系統本身占用的空間,安裝應用程序所需要的空間,應用程序所產生的數據、數據庫、日志文件、郵件數據等,如果網站是Web 2.0的,還要計算每個用戶的存儲空間;另一方面是從時間軸上來考慮,這些數據每天都在增長,你至少要為未來1年(我們建議2~3年)的數據增長做個準確的測算,這就需要軟件開發人員和業務人員一起來提供足夠的信息了。最后可將計算出來的結果乘上1.5左右的系數,方便維護的時候做各種數據的備份和文件轉移操作。
4.業務的重要性
關于這個問題就需要根據自身的業務領域來考慮相關要求了。下面舉幾個簡單的例子,幫助你了解這些服務器對可靠性、數據完整性等方面的要求。
如果你的服務器是用來運行一個WordPress博客、與朋友們分享觀點的,那么,一臺酷睿服務器、1GB的內存外加一塊160GB的硬盤就足夠了。就算服務器出現了一點硬件故障,導致幾個小時甚至一兩天不能提供訪問,生活會照常繼續,天也不會塌下來。
如果你的服務器是用作測試平臺的,那么就不會像生產環境那樣對可靠性有極高的要求,你所需要的可能只是做好例行的數據備份,若服務器宕機,只要能在當天把問題解決就行了。
如果是一個電子商務公司的服務器,運行著電子商務網站平臺,那么請一定要十分重視服務器。當硬件發生故障而導致宕機時,你需要對以下“危言聳聽”的后果做好心理準備:投訴電話被打爆、顧客大量流失、顧客要求退款、市場推廣費用打水漂、員工無事可干、公司運營陷入癱瘓狀態、數據丟失等。事實上,電子商務網站一般是需要365×24小時不間斷監控的,而且要有專人輪流值守,并且要有足夠的備份設備,每天還要有專人檢查。個人感覺,在網站運維方面,電子商務的技術含量也是最高的。
如果是大型廣告類或門戶類網站,那么建議選擇CDN系統。由于它有提高網站響應速度、負載均衡、有效抵御DDoS攻擊等特點,相對而言,每節點都會有大量的冗余,所以,除了成本之外,CDN機器的硬盤問題不大。
這里其實只是簡單地討論了業務對服務器硬件可靠性的要求。換言之,如果你覺得業務不能承擔硬盤損壞帶來的停機或數據丟失風險,那么一定要選擇一個合適的RAID卡。對于冗余電源問題,道理是一樣的(要全面解決這個問題,不能只考慮單個服務器的硬件,還需要結合系統架構的規劃設計)。
在回答了以上問題后,接下來就可以決定下面這些具體選項了:
(1)選擇什么CPU
回憶一下上面關于“服務器運行的應用”和“需要支持的用戶訪問量”兩個方面的考慮,這將幫助我們選擇合適的CPU。毫無疑問,CPU的主頻越高,其性能也就越高;兩個CPU要比一個CPU來得更爽,至強肯定比酷睿更猛。但究竟怎樣的CPU才是合適的呢?下面為你提供一些常見情況下的建議:
如果你的業務剛剛起步,預算不是很充足,建議你選擇一款經典的酷睿服務器,這可以幫你節約大量成本。而且,以后可以根據業務發展的情況,隨時升級到更高配置的服務器。
如果你需要在一臺服務器上同時運行多種應用服務,例如.Net+Exchange+SQL Server,那么一個單核至強(例如X3330)或新一代的酷睿I3/I5(雙核四線程)將是最佳的選擇。雖然從技術的角度來說,這不是一個好主意,但至少能夠幫你節約一大筆成本。
如果你的服務器要運行SQL Server、MySQL或Oracle,而且目前有幾百個用戶同時在線,未來還會不斷增長,那么你至少應該選擇安裝一個雙四核服務器。
如果需要的是Web應用服務器,雙四核基本就可以滿足我們的要求了。
(2)需要多大的內存
同樣,“服務器運行的應用”和“需要支持的用戶訪問量”兩方面的考慮也將幫助我們選擇合適的內存容量。相比于CPU,我認為內存(RAM)才是影響性能的最關鍵因素。因為在相當多正在運行的服務器中,CPU的利用率一般都在10%~30%之間,甚至更低。但我們發現由于內存容量不夠而導致服務器運行緩慢的案例比比皆是,如果服務器不能分配足夠的內存給應用程序,應用程序就需要通過硬盤接口緩慢地交換讀寫數據了,這將導致網站慢得令人無法接受。內存的大小主要取決于服務器的用戶數量,當然也和應用軟件對內存的最低需求及內存管理機制有關,所以,最好由程序員或軟件開發商給出最佳的內存配置建議。下面同樣給出了一些常見應用環境下的內存配置建議:
無論是Windows下的IIS還是Linux下的Apache,一般情況下Web前端服務器不需要配置特別高的內存,尤其是在集群架構中,4GB的內存就已經足夠了。如果有幾千個并發用戶,而且他們同時運行動態腳本程序,我們才會考慮使用8GB或更高的內存。
對于運行Tomcat、Resin、WebLogic、Websphere或.NET的應用服務器,4GB內存應該是基準配置,更準確的數字需要根據用戶數量和技術架構來確定。
數據庫服務器的內存由數據庫實例的數量、表大小、索引、用戶數來決定,一般建議配置4GB以上的內存,我們在許多項目方案中使用了24GB~48GB的內存。
諸如Postfix、Notes、Exchange這樣的郵件服務器對內存的要求并不高,1GB~2GB就可以滿足了。
還有一些特殊的服務器,我們需要為之配置盡可能高的內存容量,包括Squid、Varnish、Memcached的緩存服務器。
對于一臺文件服務器,1GB內存可能就足夠了。
事實上,上面的數字已經足夠“慷慨”,由于內存技術在不斷進化,價格也在不斷降低,我們才得以近乎奢侈地討論4GB、8GB、16GB這些曾經不可想象的內存容量。然而,除了花錢購買內存來滿足應用程序的“貪婪”之外,系統優化和數據庫優化仍然是我們需要重視的問題。
(3)需要怎樣的硬盤存儲系統
硬盤存儲系統的選擇和配置是整個服務器系統里最復雜的一部分,我們需要考慮硬盤的數量、容量、接口類型、轉速、緩存大小,以及是否需要RAID卡、RAID卡的型號和RAID級別等問題。甚至在一些高可靠性、高性能的應用環境中,我們還需要考慮使用怎樣的外部存儲系統(SAN、NAS或DAS)。下面將服務器的硬盤RAID卡的特點歸納一下:
如果是用作緩存服務器,比如squid、varnish還有memcached,可以考慮用RAID0。
如果是運行Nginx+PHP5或tomcat、resin等應用,可以考慮用RAID1。
如是是內網開發服務器或存放重要代碼的服務器,可以考慮用RAID5。
如果是運行MySQL或Oracle等數據庫應用,可以考慮用固態硬盤做RAID5或RAID10。
5.網卡性能與數據方面的考慮
如果你的基礎架構是多服務器環境,而且服務器之間有大量的數據交換,那么建議你為每臺服務器配置兩個或更多的網卡,一個用來對外提供服務,另一個用來做內部數據交換。由于現在項目外端都置于防火墻內,所以許多時候單網卡就足夠了;而像LVS+Keepalived這種只用公網地址的Linux集群架構,有時可能僅僅需要一塊網卡。目前,HP或Dell這種品牌服務器自帶的網卡已經足夠使用了。
另外,數據的備份也是很重要的。在實際工作中我們也發現,rsync和scp這些Liunx下的備份工具同樣非常占帶寬,所以,如果用scp,建議盡量用它的限速參數;而rsync則盡量選擇在非業務時間段執行。
6.服務器安全方面的考慮
由于目前國內的DDoS攻擊還是比較普遍,建議給每個項目方案和自己的電子商務網站配備硬件防火墻,比如Juniper、Cisco或神盾等。當然了,這個問題也是網站后期運營維護需要考慮的,這里只是想讓大家有個概念性的認識。有時為了數據的安全,我會讓所有的機器都用RAID5。另外就是定期巡視機房,檢查服務器的硬盤燈指向,一有異常就迅速處理。
7.根據機架數合理安排服務器的數量
這個問題應該在項目實施前就準備好,選擇服務器時應該明確1U、2U和4U到底有多少臺,應該如何安排。在小項目中這個問題可能無關緊要,但在大型項目的實施過程中,這個問題就很突出了,我們應該根據現有或額定的機架數目確定到底應該選擇多少個服務器。
8.成本考慮:服務器的價格問題
這個問題無論是在替公司采購時,還是在項目實施過程中,都是重要的問題。我們的方案經常被退回,理由就是超出預算。尤其是一些小項目,預算更吃緊。我做項目時經常面臨的一種需求是客戶做的是證券類資訊網站,只要求周一至周五的上午9點至下午3點網站不出問題即可,并不想做復雜的負載均衡高可用。所以這時候,我會做成單Nginx或Haproxy,后面接兩臺Web應用。這種情況還好說,如果是做中大型電子商務網站,在服務器成本上的控制就尤其重要。事實上,我們經常遇到的問題是,客戶給出的成本預算有限,而我們的應用又需要更多的服務器。這時候,我們不得不選擇Centos或FreeBSD下的免費虛擬化軟件,這將在后面的章節中重點講述。
以上8個方面即是我們在采購服務器時應該注意的因素,在選擇服務器的組件時要有所偏重,然后根據系統或網站架構來決定服務器的數量,盡量做到服務器資源利用的最大化。