如何才能作到網站高併發訪問?

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

文章架構簡圖:
網站訪問門戶案例7層架構邏輯圖php

  高併發訪問的核心原則其實就一句話「把全部的用戶訪問請求都儘可能往前推」。css

若是把來訪用戶比做來犯的"敵人",咱們必定要把他們擋在800裏地之外,即不能讓他們的請求一下打到咱們的指揮部(指揮部就是數據庫及分佈式存儲)。html

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

    提及來很輕鬆,實際作起來卻不容易,但只要稍加努力是能夠作到的,Google的日獨立IP過億不也作到了麼?咱們這幾千萬的PV站比起Google不是小屋見大屋了。咱們仍是先從咱們的小屋搭起吧!哈哈!下面內容的介紹起點是千萬級別的PV站,也能夠支持億級PV的網站架構。java

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

有人會問,咱們總是說把用戶對業務的訪問往前推,到底怎麼推啊?推到哪呢?下面,老男孩就爲你們一一道來。linux

第一層:首先在用戶瀏覽器端,使用Apachemod_deflate壓縮傳輸,再好比:expires功能、deflateexpires功能利用的好,就會大大提高用戶體驗效果及減小網站帶寬,減小後端服務器的壓力。固然,方法還有不少,這裏不一一細談了。nginx

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

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

提示:咱們也能夠本身架設一層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等等。

根據不一樣的業務需求,選擇適合具體業務的數據庫。對於memcachememcachedb ttserver及相關nosql數據庫,能夠在第四層經過程序來實現對本層實現分佈式訪問,每一個分佈式訪問的節點均可能是一組負載均衡(數十臺機器)。

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

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

特別提示:數據庫層的硬件好壞也會決定訪問量的多少,尤爲是要考慮磁盤IO的問題,大公司每每在性價比上作文章,好比核心業務採用硬件netapp/emcsan光纖架構,對於資源數據存儲,如圖片視頻,會採用sas或固態ssd盤,若是數據超大,能夠採起熱點分取分存的方法:如:最常訪問的10-20%使用ssd存儲,中間的20-30%採用sas盤,最後的40-50%能夠採用廉價的sata

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

若是能達到本文設計要求的,中等規模網站,後端的數據庫及存儲壓力會很是小了。 象門戶網站級別,如sina等, 會採用硬件netapp/emc等等硬件存儲設備或是san光纖同道,甚至在性價比上作文章,好比核心業務採用硬件netapp/emcsan光纖架構,對於資源數據存儲,如圖片視頻,會採用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以上,其中部分學生就任於淘寶、阿里巴巴、百度、騰訊、和訊、開心網、人人、激動網、小米科技、土豆、酷6、sohusina、金山、尚德,歡聚網、藍港,chinacache,快網、帝聯,遨遊、趕集、拉手網,窩窩團、就業工場、聯通、電信、樂視、樂淘、啓明星辰,尋醫問藥,高德,360等公司。

其餘活動:

1)  曾爲《構建高可用Linux服務器》一書作首序!

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

老男孩目前從事工做:

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

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

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

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

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

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

聯繫方式:

網名:老男孩

QQ:31333741(顧問諮詢) 

信箱:31333741@qq.com

培訓諮詢:

諮詢:QQ: 70271111 31333741

電話:18911718229

我的博客:

http://oldboy.blog.51cto.com2011年度十大傑出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運維問題的9shell解答方法!

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

 

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

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

相關文章
相關標籤/搜索