也談架構:百萬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
- haproxy01 sql_master sql_slave01 sql_slave02
- iis01 iis02 iis03 iis04
- memcache01 memcache02 lucene01 lucene02
- haproxy02
- --------------------------------------------------------
- Esxi-1 Esxi-2 Esxi-3 Esxi-4
3.4 虛擬化注意事項
線上ESXI 服務器配置:sql
- Dell R610 1U
- cpu *2 XEON 5620
- mem 32GB
- disk *4 300G 10k sas
- perc 6i raid 10
線上虛擬機資源分配:數據庫
- haproxy 2 vcpu/2GB mem/30GB vdisk/ #耗網絡(相對)
- iis 4vcpu/6GB mem/60GB vdisk/ #耗cpu+內存
- memcache 2vcpu/10GB mem/30GB vdisk/ #耗內存
- lucene 4vcpu/10GB mem/80GB vdisk/ #耗內存
- 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
- XXX項目 服務器數量 機位數量 耗電量
- 物理機 13 臺 14 約10安
- 虛擬化 5 臺 6 約4安
結束
此文資料來自公司線上某項目,這裏咱們討論了網站架構與虛擬化,若有不妥之處還肯請老鳥多指點,新同窗能夠看成簡單的參考資料,若有疑問歡迎到此討論(你懂得) 37275208!
服務器