也談架構:百萬pv項目與虛擬化

也談架構:百萬pv項目與虛擬化php


一 說明
100萬pv的項目網站,說大不大,說小又具有了必定規模,最近公司網站的xxx項目從物理機遷移到了VMware虛擬化平臺(ESXI),這裏總結下該項目的網站架構,若有不妥之處還肯請老鳥多指點,新同窗能夠看成簡單的參考資料!mysql


二 項目架構介紹
2.1 公司xxx項目開始於2007年,目前日均pv 100萬左右,峯值流量(BGP)60Mbit左右,haproxy 負載均衡器峯值併發4000左右,xxx項目共佔用兩個機櫃 14u機位,共計13臺 由12臺Dell 1950 與 1臺Dell 2950組成,
包括
1 臺 CDN 源站服務器
1 臺 haproxy 負載均衡器
4 臺 iis web服務器
2 臺 memcache 緩存服務器
2 臺 lucene 檢索服務器
1 臺 SqlServer 主數據庫服務器
2 臺 SqlServer 從數據庫服務器

2.2 網站架構
xxx項目邏輯上能夠分爲5層
1 CDN 層,爲提升用戶體驗度,公司網站所有使用商用CDN來加速網站,cdn 源站服務器用於存儲用戶或者CMS發佈的靜態文件。
2 代理層,使用haproxy 反向代理IIS服務器,haproxy 擁有強大的負載均衡能力與健康檢查功能,提供友好的監控頁面。
3 應用層,IIS 服務器適用於.net ,同理若是你使用php|jsp 那麼就要換成 apache|nginx|tomcat 等等。
4 緩存層,memcache  lucene 都是爲了減輕數據庫壓力而存在的。
5 數據庫層, SqlServer 數據庫由1主(寫)2從(讀)組成。

2.3 網站架構拓撲圖nginx


2.4 架構存在的問題
a CDN 源站單點問題,不考慮費用的狀況下這個能夠考慮雙機HA,或者將 xxximg.xxx.com 合併到主站CDN源服務器
b haproxy 單點問題,這個已經經過haproxy + keepalived 方式解決
c 其實有些經驗的朋友都能看出來,緩存層中不管是 memcache 仍是 lucene 都是爲了減輕數據庫壓力而存在的,目前數據庫是1主(寫)2從(讀)在緩存層服務器的幫助下,負載並不高,不過一旦緩存服務器崩潰,數據壓力馬上增長!

三 項目虛擬化
3.1 爲何要進行虛擬化?
1 xxx項目的服務器已經運行近5年原計劃考慮升級服務器配置,或者更換新的服務器代替老舊的服務器,可是不能忽略成本這個重要的因素!
2 XXX機房目前中國IDC行業首屈一指的角色,可是它的機櫃資源很是緊張,以咱們公司爲例四個月前向其申請新的機櫃,至今還在「排隊」等待!
3 XXX機房限制機櫃用電量,好比每機櫃限制在6.8安,因此老舊服務器耗電量是一個問題!
4 集中管理與集中控制,可使用Vmware Vcenter 集中管理Vmware ESXI 主機,舉個例子:若是我要重啓一臺服務器只須要在Vcenter直接reboot ESXI主機便可,很是方便!

3.2 虛擬化後服務器數量
1 臺 CDN 源站服務器(保持不變)
4 臺 Vmware ESXI 服務器

3.3 虛擬機劃分web

  
  
  
  
  1. haproxy01    sql_master  sql_slave01  sql_slave02 
  2. iis01        iis02       iis03        iis04 
  3. memcache01   memcache02  lucene01     lucene02 
  4.                                       haproxy02 
  5. -------------------------------------------------------- 
  6. Esxi-1       Esxi-2      Esxi-3       Esxi-4 


3.4 虛擬化注意事項

線上ESXI 服務器配置:sql

  
  
  
  
  1. Dell R610 1U 
  2. cpu  *2 XEON 5620 
  3. mem 32GB 
  4. disk *4 300G 10k sas  
  5. perc 6i raid 10 

線上虛擬機資源分配:數據庫

  
  
  
  
  1. haproxy 2 vcpu/2GB mem/30GB vdisk/       #耗網絡(相對) 
  2. iis 4vcpu/6GB mem/60GB vdisk/            #耗cpu+內存 
  3. memcache 2vcpu/10GB mem/30GB vdisk/      #耗內存 
  4. lucene 4vcpu/10GB mem/80GB vdisk/        #耗內存 
  5. sqlserver 4vcpu/10GB mem/100GB vdisk/    #耗cpu+內存+IO 

注意事項從四個方面考慮,包括apache

1. 處理器性能:爲虛擬機分配資源要考慮服務器類型,不建議爲虛擬機分配過多的vcpu"夠用則好",不然將致使此虛擬機搶佔資源太多,會影響同一宿主機上的其它虛擬機的正常共做 。
2. 內存容量:分配內存與分配cpu大體相同「夠用則好」,不過不要忘記爲ESXI主機預留必定內存用於ESXI自身開銷,線上ESXI主機通常預留1GB至2GB內存。
3. I/O資源:結合實際i/o使用狀況,建議一臺ESXI主機虛擬機數量小於6個,以線上服務器爲例,通常一臺ESXI主機在3-4臺虛擬機之間,固然這個不是絕對的,好比線上另外一臺mysql 從庫服務器獨享 ESXI主機所有資源。
4. 網絡資源:因爲幾臺虛擬機共享ESXI主機網絡設備,因此高帶寬高流量的服務要注意,能夠將ESXI主機的某個網卡獨享給每臺虛擬機緩存


最後咱們能夠看到 ,虛擬機部署是按照不一樣服務類型來分攤到每一個一ESXI主機上的,而不是把所有的雞蛋放在一個籃子裏面,這樣作的緣由是若是服務器硬件形成的故障,線上服務影響到最小限度;其次,分析不一樣服務類型佔用的資源不一樣再對虛擬機做出調整,好比 haproxy 很省資源,只分給其 2 vcpu/2GB mem/30GB vdisk/ 。

不適用於虛擬化
目前來說,假如系統 負載/IO/cpu/內存/網絡 等較小,均可以遷移至虛擬化平臺,可是 IO/cpu/內存/網絡 等等要求極高,
例如"繁忙"的數據庫 或者本項目中的 cdn源站服務器(磁盤),虛擬化就須要三思然後行了,固然爲了方便集中管理,能夠將ESXI主機所有資源分給此虛擬機,此虛擬機獨享ESXI所有資源 (VMware vsphere 5 )

四 成本對比tomcat

  
  
  
  
  1. XXX項目     服務器數量  機位數量    耗電量 
  2.  
  3. 物理機       13 臺        14       約10安 
  4.  
  5. 虛擬化       5  臺         6       約4安 


結束
此文資料來自公司線上某項目,這裏咱們討論了網站架構與虛擬化,若有不妥之處還肯請老鳥多指點,新同窗能夠看成簡單的參考資料,若有疑問歡迎到此討論(你懂得) 37275208!


 服務器

相關文章
相關標籤/搜索