開發大型高負載類網站應用程式的幾個要點

來源:互聯網
上載者:User

看了一些人的所謂大型項目的方法,我感覺都是沒有說到點子上,有點難受。

我也說說自己的看法.我個人認為,很難衡量所謂項目是否大型,即便很簡單的應用在高負載和高增長情況下都是一個挑戰.因此,按照我的想法,姑且說是高負載高並發或者高增長情況下,需要考慮的問題.這些問題,很多是和程式開發無關,而是和整個系統的架構密切相關的.

  資料庫

 
  沒錯,首先是資料庫,這是大多數應用所面臨的首個SPOF。尤其是Web2.0的應用,資料庫的響應是首先要解決的。

一般來說MySQL是最常用的,可能最初是一個mysql主機,當資料增加到100萬以上,那麼,MySQL的效能急劇下降。常用的最佳化措施是M-S(主-從)方式進行同步複製,將查詢和操作和分別在不同的伺服器上進行操作。我推薦的是M-M-Slaves方式,2個主Mysql,多個Slaves,需要注意的是,雖然有2個Master,但是同時只有1個是Active,我們可以在一定時候切換。之所以用2個M,是保證M不會又成為系統的SPOF。Slaves可以進一步負載平衡,可以結合LVS,從而將select操作適當的平衡到不同的slaves上。

以上架構可以抗衡到一定量的負載,但是隨著使用者進一步增加,你的使用者表資料超過1千萬,這時那個M變成了SPOF。你不能任意擴充Slaves,否則複製同步的開銷將直線上升,怎麼辦?我的方法是表分區,從業務層面上進行分區。最簡單的,以使用者資料為例。

根據一定的切分方式,比如id,切分到不同的資料庫叢集去。全域資料庫用於meta資料的查詢。缺點是每次查詢,會增加一次,比如你要查一個使用者nightsailer,你首先要到全域資料庫群找到nightsailer對應的cluster id,然後再到指定的cluster找到nightsailer的實際資料。

每個cluster可以用m-m方式,或者m-m-slaves方式。這是一個可以擴充的結構,隨著負載的增加,你可以簡單的增加新的mysql cluster進去。

需要注意的是:

1、禁用全部auto_increment的欄位

2、id需要採用通用的演算法集中分配

3、要具有比較好的方法來監控mysql主機的負載和服務的運行狀態。如果你有30台以上的mysql資料庫在跑就明白我的意思了。

4、不要使用持久性連結(不要用pconnect),相反,使用sqlrelay這種第三方的資料庫連結池,或者乾脆自己做,因為php4中mysql的連結池經常出問題。

緩衝
 
  緩衝是另一個大問題,我一般用memcached來做緩衝叢集,一般來說部署10台左右就差不多(10g記憶體池)。需要注意一點,千萬不能用使用swap,最好關閉linux的swap。

負載平衡/加速
 
  可能上面說緩衝的時候,有人第一想的是頁面靜態化,所謂的靜態html,我認為這是常識,不屬於要點了。頁面的靜態化隨之帶來的是靜態服務的
負載平衡和加速。我認為Lighttped+Squid是最好的方式了。

LVS <------->lighttped====>squid(s) ====lighttpd

上面是我經常用的。注意,我沒有用apache,除非特定的需求,否則我不部署apache,因為我一般用php-fastcgi配合lighttpd,效能比apache+mod_php要強很多。

squid的使用可以解決檔案的同步等等問題,但是需要注意,你要很好的監控緩衝的命中率,儘可能的提高的90%以上。squid和lighttped也有很多的話題要討論,這裡不贅述。

儲存
 
儲存也是一個大問題,一種是小檔案的儲存,比如圖片這類。另一種是大檔案的儲存,比如搜尋引擎的索引,一般單檔案都超過2g以上。

小檔案的儲存最簡單的方法是結合lighttpd來進行分布。或者乾脆使用Redhat的GFS,優點是應用透明,缺點是費用較高。我是指你購買盤陣的問題。我的項目中,儲存量是2-10Tb,我採用了分布式儲存。這裡要解決檔案的複製和冗餘。這樣每個檔案有不同的冗餘,這方面可以參考google的gfs的論文。大檔案的儲存,可以參考nutch的方案,現在已經獨立為hadoop子項目。(你可以google it)

其他:

此外,passport等也是考慮的,不過都屬於比較簡單的了。拋磚引玉而已。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。