




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 構建大型網站架構案例今天我們來談談一個網站一般是如何一步步來構建起系統(tǒng)架構的,雖然我們希望網站一開始就能有一個很好的架構,但馬克思告訴我們事物是在發(fā)展中不斷前進的,網站架構也是隨著業(yè)務的擴大、用戶的需求不斷完善的,下面是一個網站架構逐步發(fā)展的基本過程,讀完后,請思考,你現在在哪個階段。架構演變第一步:物理分離WebServer和數據庫最開始,由于某某些想法,于于是在互聯(lián)網網上搭建了一一個網站,這這個時候甚至至有可能主機機都是租借的的,但由于這這篇文章我們們只關注架構構的演變歷程程,因此就假假設這個時候候已經是托管管了一臺主機機,并且有一一定的帶寬了了。這個時候候由于網站具具備了一定的的特色,
2、吸引引了部分人訪訪問,逐漸你你發(fā)現系統(tǒng)的的壓力越來越越高,響應速速度越來越慢慢,而這個時時候比較明顯顯的是數據庫庫和應用互相相影響,應用用出問題了,數數據庫也很容容易出現問題題,而數據庫庫出問題的時時候,應用也也容易出問題題。于是進入入了第一步演演變階段:將將應用和數據據庫從物理上上分離,變成成了兩臺機器器,這個時候候技術上沒有有什么新的要要求,但你發(fā)發(fā)現確實起到到效果了,系系統(tǒng)又恢復到到以前的響應應速度了,并并且支撐住了了更高的流量量,并且不會會因為數據庫庫和應用形成成互相的影響響。看看這一步完成成后系統(tǒng)的圖圖示:架構演變第二步步:增加頁面面緩存好景不長,隨著著訪問的人越越來越多,你你發(fā)現響
3、應速速度又開始變變慢了,查找找原因,發(fā)現現是訪問數據據庫的操作太太多,導致數數據連接競爭爭激烈,所以以響應變慢。但但數據庫連接接又不能開太太多,否則數數據庫機器壓壓力會很高,因因此考慮采用用緩存機制來來減少數據庫庫連接資源的的競爭和對數數據庫讀的壓壓力。這個時時候首先也許許會選擇采用用squidd等類似的機機制來將系統(tǒng)統(tǒng)中相對靜態(tài)態(tài)的頁面(例例如一兩天才才會有更新的的頁面)進行行緩存(當然然,也可以采采用將頁面靜靜態(tài)化的方案案),這樣程程序上可以不不做修改,就就能夠很好的的減少對WeebServver的壓力力以及減少數數據庫連接資資源的競爭,OOK,于是開開始采用sqquid來做做相對靜態(tài)的的
4、頁面的緩存存??纯催@一步完成成后系統(tǒng)的圖圖示:這一步涉及到了了這些知識體體系:前端頁面緩存技技術,例如ssquid,如如想用好的話話還得深入掌掌握下squuid的實現現方式以及緩緩存的失效算算法等。架構演變第三步步:增加頁面面片段緩存增加了squiid做緩存后后,整體系統(tǒng)統(tǒng)的速度確實實是提升了,WWebSerrver的壓壓力也開始下下降了,但隨隨著訪問量的的增加,發(fā)現現系統(tǒng)又開始始變的有些慢慢了。在嘗到到了squiid之類的動動態(tài)緩存帶來來的好處后,開開始想能不能能讓現在那些些動態(tài)頁面里里相對靜態(tài)的的部分也緩存存起來呢,因因此考慮采用用類似ESII之類的頁面面片段緩存策策略,OK,于于是開始采
5、用用ESI來做做動態(tài)頁面中中相對靜態(tài)的的片段部分的的緩存??纯催@一步完成成后系統(tǒng)的圖圖示:這一步涉及到了了這些知識體體系:頁面片段緩存技技術,例如EESI等,想想用好的話同同樣需要掌握握ESI的實實現方式等;架構演變第四步步:數據緩存存在采用ESI之之類的技術再再次提高了系系統(tǒng)的緩存效效果后,系統(tǒng)統(tǒng)的壓力確實實進一步降低低了,但同樣樣,隨著訪問問量的增加,系系統(tǒng)還是開始始變慢。經過過查找,可能能會發(fā)現系統(tǒng)統(tǒng)中存在一些些重復獲取數數據信息的地地方,像獲取取用戶信息等等,這個時候候開始考慮是是不是可以將將這些數據信信息也緩存起起來呢,于是是將這些數據據緩存到本地地內存,改變變完畢后,完完全符合預期
6、期,系統(tǒng)的響響應速度又恢恢復了,數據據庫的壓力也也再度降低了了不少??纯催@一步完成成后系統(tǒng)的圖圖示:這一步涉及到了了這些知識體體系:緩存技術,包括括像Map數數據結構、緩緩存算法、所所選用的框架架本身的實現現機制等。架構演變第五步步: 增加WWebSerrver好景不長,發(fā)現現隨著系統(tǒng)訪訪問量的再度度增加,weebservver機器的的壓力在高峰峰期會上升到到比較高,這這個時候開始始考慮增加一一臺websserverr,這也是為為了同時解決決可用性的問問題,避免單單臺的webbserveer dowwn機的話就就沒法使用了了,在做了這這些考慮后,決決定增加一臺臺webseerver,增增加一臺
7、weebservver時,會會碰到一些問問題,典型的的有:1、如何讓訪問問分配到這兩兩臺機器上,這這個時候通常常會考慮的方方案是Apaache自帶帶的負載均衡衡方案,或LLVS這類的的軟件負載均均衡方案;2、如何保持狀狀態(tài)信息的同同步,例如用用戶sesssion等,這這個時候會考考慮的方案有有寫入數據庫庫、寫入存儲儲、cookkie或同步步sessiion信息等等機制等;3、如何保持數數據緩存信息息的同步,例例如之前緩存存的用戶數據據等,這個時時候通常會考考慮的機制有有緩存同步或或分布式緩存存;4、如何讓上傳傳文件這些類類似的功能繼繼續(xù)正常,這這個時候通常常會考慮的機機制是使用共共享文件系統(tǒng)統(tǒng)
8、或存儲等;在解決了這些問問題后,終于于是把webbserveer增加為了了兩臺,系統(tǒng)統(tǒng)終于是又恢恢復到了以往往的速度??纯催@一步完成成后系統(tǒng)的圖圖示:這一步涉及到了了這些知識體體系:負載均衡技術(包括但不限限于硬件負載載均衡、軟件件負載均衡、負負載算法、llinux轉轉發(fā)協(xié)議、所所選用的技術術的實現細節(jié)節(jié)等)、主備備技術(包括括但不限于AARP欺騙、llinuxhheart-beat等等)、狀態(tài)信信息或緩存同同步技術(包包括但不限于于Cookiie技術、UUDP協(xié)議、狀狀態(tài)信息廣播播、所選用的的緩存同步技技術的實現細細節(jié)等)、共共享文件技術術(包括但不不限于NFSS等)、存儲儲技術(包括括但不
9、限于存存儲設備等)。架構演變第六步步:分庫享受了一段時間間的系統(tǒng)訪問問量高速增長長的幸福后,發(fā)發(fā)現系統(tǒng)又開開始變慢了,這這次又是什么么狀況呢,經經過查找,發(fā)發(fā)現數據庫寫寫入、更新的的這些操作的的部分數據庫庫連接的資源源競爭非常激激烈,導致了了系統(tǒng)變慢,這這下怎么辦呢呢?此時可選選的方案有數數據庫集群和和分庫策略,集集群方面像有有些數據庫支支持的并不是是很好,因此此分庫會成為為比較普遍的的策略,分庫庫也就意味著著要對原有程程序進行修改改,一通修改改實現分庫后后,不錯,目目標達到了,系系統(tǒng)恢復甚至至速度比以前前還快了??纯催@一步完成成后系統(tǒng)的圖圖示:這一步涉及到了了這些知識體體系:這一步更多的是是
10、需要從業(yè)務務上做合理的的劃分,以實實現分庫,具具體技術細節(jié)節(jié)上沒有其他他的要求;但同時隨著數據據量的增大和和分庫的進行行,在數據庫庫的設計、調調優(yōu)以及維護護上需要做的的更好,因此此對這些方面面的技術還是是提出了很高高的要求的。架構演變第七步步:分表、DDAL和分布布式緩存隨著系統(tǒng)的不斷斷運行,數據據量開始大幅幅度增長,這這個時候發(fā)現現分庫后查詢詢仍然會有些些慢,于是按按照分庫的思思想開始做分分表的工作。當當然,這不可可避免的會需需要對程序進進行一些修改改,也許在這這個時候就會會發(fā)現應用自自己要關心分分庫分表的規(guī)規(guī)則等,還是是有些復雜的的。于是萌生生能否增加一一個通用的框框架來實現分分庫分表的數
11、數據訪問,這這個在ebaay的架構中中對應的就是是DAL,這這個演變的過過程相對而言言需要花費較較長的時間。當當然,也有可可能這個通用用的框架會等等到分表做完完后才開始做做。同時,在在這個階段可可能會發(fā)現之之前的緩存同同步方案出現現問題,因為為數據量太大大,導致現在在不太可能將將緩存存在本本地,然后同同步的方式,需需要采用分布布式緩存方案案了。于是,又又是一通考察察和折磨,終終于是將大量量的數據緩存存轉移到分布布式緩存上了了??纯催@一步完成成后系統(tǒng)的圖圖示:這一步涉及到了了這些知識體體系:分表更多的同樣樣是業(yè)務上的的劃分,技術術上涉及到的的會有動態(tài)hhash算法法、conssistenntha
12、shh算法等;DAL涉及到比比較多的復雜雜技術,例如如數據庫連接接的管理(超超時、異常)、數據庫操操作的控制(超時、異常常)、分庫分分表規(guī)則的封封裝等;架構演變第八步步:增加更多多的WebSServerr在做完分庫分表表這些工作后后,數據庫上上的壓力已經經降到比較低低了,又開始始過著每天看看著訪問量暴暴增的幸福生生活了。突然然有一天,發(fā)發(fā)現系統(tǒng)的訪訪問又開始有有變慢的趨勢勢 了,這個個時候首先查查看數據庫,壓壓力一切正常常,之后查看看webseerver,發(fā)發(fā)現apacche阻塞了了很多的請求求,而應用服服務器對每個個請求也是比比較快的,看看來是請求數數太高導致需需要排隊等待待,響應速度度變慢
13、。這還還好辦,一般般來說,這個個時候也會有有些錢了,于于是添加一些些webseerver服服務器,在這這個添加weebservver服務器器的過程,有有可能會出現現幾種挑戰(zhàn):1、Apachhe的軟負載載或LVS軟軟負載等無法法承擔巨大的的web訪問問量(請求連連接數、網絡絡流量等)的的調度了,這這個時候如果果經費允許的的話,會采取取的方案是購購買硬件負載載平衡設備,例例如F5、NNetscllar、Atthelonn之類的,如如經費不允許許的話,會采采取的方案是是將應用從邏邏輯上做一定定的分類,然然后分散到不不同的軟負載載集群中;2、原有的一些些狀態(tài)信息同同步、文件共共享等方案可可能會出現瓶瓶
14、頸,需要進進行改進,也也許這個時候候會根據情況況編寫符合網網站業(yè)務需求求的分布式文文件系統(tǒng)等;在做完這些工作作后,開始進進入一個看似似完美的無限限伸縮的時代代,當網站流流量增加時,應應對的解決方方案就是不斷斷的添加weebservver。看看這一步完成成后系統(tǒng)的圖圖示:這一步涉及到了了這些知識體體系:到了這一步,隨隨著機器數的的不斷增長、數數據量的不斷斷增長和對系系統(tǒng)可用性的的要求越來越越高,這個時時候要求對所所采用的技術術都要有更為為深入的理解解,并需要根根據網站的需需求來做更加加定制性質的的產品。架構演變第九步步:數據讀寫寫分離和廉價價存儲方案突然有一天,發(fā)發(fā)現這個完美美的時代也要要結束了
15、,數數據庫的噩夢夢又一次出現現在眼前了。由由于添加的wwebserrver太多多了,導致數數據庫連接的的資源還是不不夠用,而這這個時候又已已經分庫分表表了,開始分分析數據庫的的壓力狀況,可可能會發(fā)現數數據庫的讀寫寫比很高,這這個時候通常常會想到數據據讀寫分離的的方案。當然然,這個方案案要實現并不不容易,另外外,可能會發(fā)發(fā)現一些數據據存儲在數據據庫上有些浪浪費,或者說說過于占用數數據庫資源,因因此在這個階階段可能會形形成的架構演演變是實現數數據讀寫分離離,同時編寫寫一些更為廉廉價的存儲方方案,例如BBigTabble這種。看看這一步完成成后系統(tǒng)的圖圖示:這一步涉及到了了這些知識體體系:數據讀寫分
16、離要要求對數據庫庫的復制、sstandbby等策略有有深入的掌握握和理解,同同時會要求具具備自行實現現的技術;廉價存儲方案要要求對OS的的文件存儲有有深入的掌握握和理解,同同時要求對采采用的語言在在文件這塊的的實現有深入入的掌握。架構演變第十步步:進入大型型分布式應用用時代和廉價價服務器群夢夢想時代經過上面這個漫漫長而痛苦的的過程,終于于是再度迎來來了完美的時時代,不斷的的增加webbserveer就可以支支撐越來越高高的訪問量了了。對于大型型網站而言,人人氣的重要毋毋庸置疑,隨隨著人氣的越越來越高,各各種各樣的功功能需求也開開始爆發(fā)性的的增長。這個個時候突然發(fā)發(fā)現,原來部部署在webbser
17、veer上的那個個web應用用已經非常龐龐大 了,當當多個團隊都都開始對其進進行改動時,可可真是相當的的不方便,復復用性也相當當糟糕,基本本是每個團隊隊都做了或多多或少重復的的事情,而且且部署和維護護也是相當的的麻煩。因為為龐大的應用用包在N臺機機器上復制、啟啟動都需要耗耗費不少的時時間,出問題題的時候也不不是很好查,另另外一個更糟糟糕的狀況是是很有可能會會出現某個應應用上的buug就導 致致了全站都不不可用,還有有其他的像調調優(yōu)不好操作作(因為機器器上部署的應應用什么都要要做,根本就就無法進行針針對性的調優(yōu)優(yōu))等因素,根根據這樣的分分析,開始痛痛下決心,將將系統(tǒng)根據職職責進行拆分分,于是一個個大型的分布布式應用就誕誕生了,通常常,這個步驟驟需要耗費相相當長的時間間,因為會碰碰到很多的挑挑戰(zhàn):1、拆成分布式式后需要提供供一個高性能能、穩(wěn)定的通通信框架,并并且需要支持持多種不同的的通信和遠程程調用方式;2、將一個龐大大的應用拆分分需要耗費很很長的時間,需需要進行業(yè)務務的整理和系系統(tǒng)依賴關系系的控制等;3、如何運維(依賴管理、運運行狀況管理理、錯誤追蹤蹤、調優(yōu)、監(jiān)監(jiān)控和報警等
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度環(huán)??萍脊疚膯T聘用及綠色創(chuàng)新協(xié)議
- 二零二五年度農村私人土地租賃與特色養(yǎng)殖合作合同
- 二零二五年度跨境電商金融服務商務協(xié)議書
- 小微企業(yè)市場開拓的營銷推廣計劃
- 電商平臺用戶行為規(guī)范及免責聲明
- 車位抵押借款合同協(xié)議
- 企業(yè)信息化改造升級合作協(xié)議
- 設備采購說明文書模板
- 提高團隊協(xié)作效率的行動計劃
- 物流運輸安全及免責承諾書
- (三級)工業(yè)機器人運用與維護理論考試復習題庫(含答案)
- 2024年廣東省公務員錄用考試《行測》真題及解析
- 高中英語必背3500單詞表(完整版)
- 房產中介居間服務合同模板樣本
- 海洋工程裝備保險研究
- 2024年廣東省深圳市中考英語試題含解析
- GB/T 16288-2024塑料制品的標志
- 麻風病防治知識課件
- 3素炒圓白菜 教案
- 透析患者營養(yǎng)不良護理
- 學生消防安全常識問卷及答案
評論
0/150
提交評論