如何才能做到網站高并發訪問?

看了撫琴煮酒兄弟的文章http://andrewyu.blog.51cto.com/1604432/612032)由感而發,淺談下門戶網站高并發的一些實戰心得,因此寫了本文。

文章架構簡圖:

網站訪問門戶案例7層架構邏輯圖

? 高并發訪問的核心原則其實就一句話“把所有的用戶訪問請求都盡量往前推”。

如果把來訪用戶比作來犯的"敵人",我們一定要把他們擋在800里地以外,即不能讓他們的請求一下打到我們的指揮部(指揮部就是數據庫及分布式存儲)。

如:能緩存在用戶電腦本地的,就不要讓他去訪問CDN。 能緩存CDN服務器上的,就不要讓CDN去訪問源(靜態服務器)了。能訪問靜態服務器的,就不要去訪問動態服務器。以此類推:能不訪問數據庫和存儲就一定不要去訪問數據庫和存儲。

? ? 說起來很輕松,實際做起來卻不容易,但只要稍加努力是可以做到的,Google的日獨立IP過億不也做到了么?我們這幾千萬的PV站比起Google不是小屋見大屋了。我們還是先從我們的小屋搭起吧!哈哈!下面內容的介紹起點是千萬級別的PV站,也可以支持億級PV的網站架構。

高性能高并發高可擴展網站架構訪問的幾個層次:

有人會問,我們老是說把用戶對業務的訪問往前推,到底怎么推啊?推到哪呢?下面,老男孩就為大家一一道來。

第一層:首先在用戶瀏覽器端,使用Apache的mod_deflate壓縮傳輸,再比如:expires功能、deflate和expires功能利用的好,就會大大提升用戶體驗效果及減少網站帶寬,減少后端服務器的壓力。當然,方法還有很多,這里不一一細談了。

提示:有關壓縮傳輸及expires功能nginx/lighttpd等軟件同樣也有。

第二層:頁面元素,如圖片/js/css等或靜態數據html,這個層面是網頁緩存層,比如CDN(效果比公司自己部署squid/nginx要好,他們更專業,價格低廉,比如快網/CC等(價格80元/M/月甚至更低)而且覆蓋的城市節點更多),自己架設squid/nginx cache來做小型CDN是次選(超大規模的公司可能會考慮風險問題實行自建加購買服務結合),除非是為前端的CDN提供數據源服務,以減輕后端我們的服務器數據及存儲壓力,而不是直接提供cache服務給最終用戶。taobao的CDN曾經因為一部分圖片的次寸大而導致CDN壓力大的情況,甚至對圖片尺寸大的來改小,以達到降低流量及帶寬的作用。

提示:我們也可以自己架設一層cache層,對我們購買的CDN提供數據源服務,可用的軟件有varnish/nginx/squid 等cache,以減輕第三層靜態數據層的壓力。在這層的前端我們也可以架設DNS服務器,來達到跨機房業務拓展及智能解析的目的。

? ? 第三層:靜態服務器層一般為圖片服務器,視頻服務器,靜態HTML服務器。這一層是前面緩存層和后面動態服務器層的連接紐帶,大公司發布新聞等內容直接由發布人員分發到各cache節點(sina,163等都是如此),這和一般公司的業務可能不一樣。所以,沒法直接的參考模仿,比如人人的SNS。

我們可以使用Q隊列方式實現異步的分發訪問,同時把動態發布數據(數據庫中的數據)靜態化存儲。即放到本層訪問,或通過其他辦法發布到各cache節點,而不是直接讓所有用戶去訪問數據庫,不知道大家發現了沒有,qq.com門戶的新聞評論多的有幾十萬條,如果所有用戶一看新聞就加載所有評論,那數據庫不掛才怪。他們的評論需要審核(美其名約,實際是異步的方式,而且,評論可能都是靜態化的或類似的靜態化或內存cache的方式),這點可能就是需要51cto.com這樣站點學習的,你們打開51CTO的一篇博文,就會發現下面的評論一直都顯示出來了,也可能是分頁的。不過,應該都是直接讀庫的,一旦訪問量大,數據庫壓力大是必然。這里不是說51cto網站不好,所有的網站都是從類似的程序架構開始發展的。CU也可能是如此。

提示:我們可以在靜態數據層的前端自己架設一層cache層,對我們購買的CDN提供數據源服務,可用的軟件有varnish/nginx/squid 等cache。在這層的前端我們也可以架設DNS服務器,來達到跨機房業務拓展及智能解析的目的。

第四層:動態服務器層:php,java等,只有透過了前面3層后的訪問請求才會到這個層,才可能會訪問數據庫及存儲設備。經過前三層的訪問過濾能到這層訪問請求一般來說已非常少了,一般都是新發布的內容和新發布內容第一次瀏覽如;博文(包括微博等),BBS帖子。

特別提示:此層可以在程序上多做文章,比如向下訪問cache層,memcache,memcachedb,tc,mysql,oracle,在程序級別實現分布式訪問,分布式讀寫分離,而程序級別分布式訪問的每個db cache節點,又可以是一組業務或者一組業務拆分開來的多臺服務器的負載均衡。這樣的架構會為后面的數據庫和存儲層大大的減少壓力,那么這里呢,相當于指揮部的外層了。

第五層:數據庫cache層,比如:memcache,memcachedb,tc等等。

根據不同的業務需求,選擇適合具體業務的數據庫。對于memcache、memcachedb ttserver及相關nosql數據庫,可以在第四層通過程序來實現對本層實現分布式訪問,每個分布式訪問的節點都可能是一組負載均衡(數十臺機器)。

第六層:數據庫層,一般的不是超大站點都會用mysql主從結構,如:163,sina,kaixin都是如此,程序層做分布式數據庫讀寫分離,一主(或雙主)多從的方式,訪問大了,可以做級連的主從及環狀的多主多從,然后,實現多組負載均衡,供前端的分布式程序調用,如果訪問量在大,就需要拆業務了,比如:我再給某企業做兼職時,發現類似的51cto的一個站點,把www服務,blog服務,bbs服務都放一個服務器上,然后做主從。這種情況,當業務訪問量大了,可以簡單的把www,blog,bbs服務分別各用一組服務器拆分開,這種方式運維都會的沒啥難度。當然訪問量在大了,可以繼續針對某一個服務拆分如:www庫拆分,每個庫做一組負載均衡,還可以對庫里的表拆分。需要高可用可以通過drbd等工具做成高可用方式。對于寫大的,可以做主主或多主的MYSQL REP方式,對于ORACLE來說,來幾組oracle DG(1master多salve方式)就夠了,11G的DG可以象mysql rep一樣,支持讀寫分離了。當然可選的方案還有,mysql cluster 和oracle 的RAC,玩mysql cluster和oracle RAC要需要更好更多的硬件及部署后的大量維護成本,因此,要綜合考慮,到這里訪問量還很大,那就恭喜了,起碼是幾千萬以上甚至上億的PV了。

象百度等巨型公司除了會采用常規的mysql及oracle數據庫庫外,會在性能要求更高的領域,大量的使用nosql數據庫,然后前端在加DNS,負載均衡,分布式的讀寫分離,最后依然是拆業務,拆庫,。。。逐步細化,然后每個點又可以是一組或多組機器。

特別提示:數據庫層的硬件好壞也會決定訪問量的多少,尤其是要考慮磁盤IO的問題,大公司往往在性價比上做文章,比如核心業務采用硬件netapp/emc及san光纖架構,對于資源數據存儲,如圖片視頻,會采用sas或固態ssd盤,如果數據超大,可以采取熱點分取分存的方法:如:最常訪問的10-20%使用ssd存儲,中間的20-30%采用sas盤,最后的40-50%可以采用廉價的sata。

第七層:千萬級PV的站如果設計的合理一些,1,2個NFS SERVER就足夠了。我所維護(兼職)或經歷過的上千萬PV的用NFS及普通服務器做存儲的還有大把,多一些磁盤,如SAS 15K*6的,或者用dell6850,搞幾組 NFS存儲,中小網站足夠了。當然可以做成drbd+heartbeat+nfs+a/a的方式。

如果能達到本文設計要求的,中等規模網站,后端的數據庫及存儲壓力會非常小了。 象門戶網站級別,如sina等, 會采用硬件netapp/emc等等硬件存儲設備或是san光纖同道,甚至在性價比上做文章,比如核心業務采用硬件netapp/emc及san光纖架構,對于資源數據存儲,如圖片視頻,會采用sas或固態ssd盤,如果數據超到,可以采取熱點分取分存的方法:如:最常訪問的10-20%使用ssd存儲,中間的20-30%采用sas盤,最后的40-50%可以采用廉價的sata。

象百度等巨型公司會采用hadoop等分布式的存儲架構,前端在加上多層CACHE及多及的負載均衡,同樣會根據業務進行拆分,比如爬蟲層存儲,索引層存儲,服務層存儲。。。可以更細更細。。。為了應付壓力,什么手段都用上了。

? ? 特殊業務,如人人,開心網,包括門戶網站的評論,微博,大多都是異步的寫入方式,即無論讀寫,并發訪問數據庫都是非常少量的。

? ? 以上1-7層,如果都搭好了,這樣漏網到第四層動態服務器層的訪問,就不多了。一般的中等站點,絕對不會對數據庫造成太大的壓力。程序層的分布式訪問是從千萬及PV向億級PV的發展,當然特殊的業務 還需要特殊架構,來合理利用數據庫和存儲。

老男孩講師介紹

老男孩,資深unix/Linux系統運維網站架構專家、高級運維總監。從事一線網站運維及系統架構管理10年以上,13年的教育教學培訓經歷(擅長教育心理,職業規劃,性格分析、談判,職場,就業)。并將自身的網站運維架構及教育領域的經驗成功結合應用到IT教育領域教學工作中。曾前后就職于若干個大規模高并發訪問量的行業門戶網站,并為多家互聯網公司做過技術顧問,企業技術培訓。提供各類網站系統架構解決方案。

老男孩linux實戰培訓中心是老男孩于2007年開辦的國內首個linux運維實戰培訓私塾式精英教育培訓機構。截止到2012年,累計受益學生達到千余人(其中培訓VIP面授學生數百人,網絡班學生數百人)。全科畢業學生平均就業工資7000以上,其中部分學生就職于淘寶、阿里巴巴、百度、騰訊、和訊、開心網、人人、激動網、小米科技、土豆、酷六、sohu、sina、金山、尚德,歡聚網、藍港,chinacache,快網、帝聯,遨游、趕集、拉手網,窩窩團、就業工場、聯通、電信、樂視、樂淘、啟明星辰,尋醫問藥,高德,360等公司。

其他活動:

1)? 曾為《構建高可用Linux服務器》一書做首序!

2)? 曾多次受邀參加51cto,CU,it168技術活動(因兼職及培訓、寫書,部分未參加)。

老男孩目前從事工作:

1) 老男孩linux運維實戰培訓機構精英辦學(面試通過方可入學)。

2)提供企業技術培訓及技術顧問服務。

3)提供各種網站系統架構(數據庫)解決方案。

4)提供linux技術方向企業雇員雙向獵頭、HR。

5)提供優質linux運維原創系列視頻(初級,中級,高級)。

6)Linux網站運維從初級到高級架構的書籍寫作工作。

聯系方式:

網名:老男孩

QQ號:31333741(顧問咨詢)

信箱:31333741@qq.com

培訓咨詢:

咨詢:QQ: 70271111 31333741

電話:18911718229

個人博客:

http://oldboy.blog.51cto.com(2011年度十大杰出IT博客)

個人微博:

http://t.qq.com/tt31333741(運維思想分享地)

http://weibo.com/oldboy8

QQ群:

老男孩培訓交流群? 208160987 226199307? 44246017

網站運維交流群: 114580181 45039636 37081784 180056518 76612019? 1619852

網站運維經理交流群 226200791(非經理級別莫入)

代表作品:

老男孩淺談如何看待運維?

http://oldboy.blog.51cto.com/2561410/830451

老男孩在創業及培訓中28條感悟語錄分享! http://oldboy.blog.51cto.com/2561410/827913

批量分發管理3種簡單、易用的解決方案案例視頻分享

http://oldboy.blog.51cto.com/2561410/824931

淺談千萬級PV/IP規模高性能高并發網站架構

http://oldboy.blog.51cto.com/2561410/736710

老男孩linux培訓某節課前考試試題及答案分享

http://oldboy.blog.51cto.com/2561410/791245

老男孩之學好運維四要素“堅持”的啟示分享

http://oldboy.blog.51cto.com/2561410/768712

學會感恩會使你回報的更多--老男孩

http://oldboy.blog.51cto.com/2561410/766212

一道實用linux運維問題的9種shell解答方法!

http://oldboy.blog.51cto.com/2561410/760192

Linux系統基礎網絡配置老鳥精華篇

http://oldboy.blog.51cto.com/2561410/784625

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容