大型網站技術架構筆記(1)_第1頁
大型網站技術架構筆記(1)_第2頁
大型網站技術架構筆記(1)_第3頁
大型網站技術架構筆記(1)_第4頁
大型網站技術架構筆記(1)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一、 大型網站架構演化    在網站還很小的時候就去追求網站的架構是舍本逐末,得不償失。而是伴隨小型網站業(yè)務的逐步發(fā)展,慢慢地演化成一個大型網站。驅動大型網站技術發(fā)展的主要力量是網站的業(yè)務發(fā)展。    如果能控制住并發(fā)訪問的量,很多棘手的技術問題也就不是什么問題了。1. 初始階段    一臺服務器,應用、DB、文件都在一塊,使用經典的LAMP模式構建整個站點。    優(yōu)點很明顯,開發(fā)部署都簡單,船小好掉頭,做不起來也虧不了多少。2. 應用服務與數據服務分離    隨著訪問量的增長,出現問題了:w

2、eb性能變差,數據存儲空間不夠。這時候需要更多的服務器,首要任務是將數據庫分離出來,單獨占用一臺服務器,如果文件讀寫多,需要增加文件服務器;不同的服務器對硬件的要求也不盡相同。    應用服務器需要處理大量業(yè)務邏輯,這需要更強的CPU;     數據庫服務器需要快速磁盤檢索和數據緩存,這需要更快的硬盤和更大的內存;     文件服務器需要存儲用戶上傳的文件,需要更大的硬盤;3. 使用緩存改善網站性能    訪問量持續(xù)增長,web性能再次變差??紤]使用緩存改善網站性能,web的訪問規(guī)律,80%業(yè)務

3、訪問集中在20%的數據上,把一小部分數據緩存在內存中,數據庫壓力得到有效緩解。    緩存可通過以下方式增加:         增加應用服務器本地緩存,這個最直接,也最簡單;         增加遠程分布式緩存集群,當本地的內存不足以放下需要緩存的數據時,就只有通過分布式; 4. 應用服務器集群化改善網站的并發(fā)處理能力    隨著網站的成長,單一應用服務器成為網站瓶頸。    解決方案:應用服務器集群化提高網站并發(fā)處理能力,如

4、果有更多的用戶,就在集群中加入更多的應用服務器。    做成集群的關鍵是增加負載均衡服務器來調度應用集群。5. 數據庫讀寫分離    問題:當增加緩存之后,隨著訪問量的持續(xù)增長,數據庫再次出現問題:數據庫負載壓力過高。    解決方案:數據庫讀寫分離,利用數據庫主從熱備功能,通過配置兩臺數據庫主從關系,可以將一臺數據庫服務器的數據更新同步到另一臺服務器上。6. 使用反向代理和CDN    問題:網站做大,全國甚至全球各區(qū)域的訪問量都來了,但是各區(qū)域的訪問速度差別巨大。    解決方案:使用反向代

5、理和CDN,CDN和反向代理基本原理都是緩存,CDN部署在網絡提供商的機房,使用戶從最近的節(jié)點獲取數據。而反向代理則部署在網站的中心機房,用戶請求時首先訪問到反向代理服務器,如果反向代理服務器中緩存著用戶請求的資源,則直接返回給用戶。7. 使用分布式文件系統(tǒng)和分布式數據庫系統(tǒng)    問題:應用集群如果將session管理做好,或做成無狀態(tài)的應用集群,可達到線性伸縮;而數據庫的壓力卻不是很好解決。    解決方案:使用分布式數據庫拆分,可使用的方法有,單表拆分:將相同的表放到不同的庫中,從而降低單個數據庫的結點的負載;這樣帶來的問題就是不同庫中的表無法做j

6、oin操作; 另一種方法就是按業(yè)務拆分,將屬于同一業(yè)務的表劃分到一個庫中,從而有效降低數據庫負載,同時在業(yè)務邏輯實現上不至于過于復雜;8. 使用NoSQL和搜索引擎    問題:出現海量數據存儲和檢索的需求。    解決方案:使用NoSQl產品分布式部署來支持海量數據的查詢和存儲,如搜索引擎;9. 業(yè)務拆分    按照業(yè)務來劃分子系統(tǒng),按產品線劃分系統(tǒng),通過一個超鏈接建立關系。10. 分布式服務    將一些共用的業(yè)務提取出來,獨立部署。如會員中心。二、 大型網站架構模式1. 分層   

7、; 將系統(tǒng)在橫向維度上切分成幾個部分。最基本的分層一般分為以下三層:         應用層:面向終端用戶的應用;         服務層:為應用層提供服務的通用服務;         數據層:數據存儲層;     禁止跨層次的調用(應用層直接調用數據層)及逆向調用(數據層調用服務層)。2. 分割    分割是從縱向對軟件進行切分。通過分割網站的功能和業(yè)務,大而化小,將不同的模塊分布式部署,從而提

8、高并發(fā)處理能力和功能擴展能力;3. 分布式    分布式需要注意的問題:        分布式調用增加網絡開銷;        服務器多了,服務器宕機概率增大;        如何保持分布式存儲的數據的一致性;        分布式事務難以保證;        分布式部署結構復雜,帶來開發(fā)管理維護困難;(1)分布式應用和服務    分層和分割后的應用分布式部

9、署,提升網站性能和并發(fā)性、加快開發(fā)和發(fā)布速度,減少數據庫連接資源,增加網站的伸縮性和擴展性;(2)分布式靜態(tài)資源 (動靜分離)    這是最為簡單的分布式,將網站中的靜態(tài)資源分離出去,部署到別的機器上, 減輕應用服務器壓力;這種分離最為簡單,而且性能提升明顯;同時,采用獨立域名,加大瀏覽器的并發(fā)加載量,讓網站更快的呈現在用戶面前;web優(yōu)化中有這么一個優(yōu)化順序,先前端后后臺,前端優(yōu)化是需要時間最少而見效最快的方式。(3)分布式數據和存儲    包括關系數據庫的分布式和NoSQL的分布式;關系數據庫的分布式,可以細分為分表和數據分片;數據庫的分布式不是那么

10、簡單,阿里的OceanBase項目貌似是做到了關系數據庫的分布式; Nosql的分布式相對簡單許多,例如新浪的redis使用場景,就是分布式存儲微博內容;(4)分布式計算    以Hadoop和MapReduce為代表的分布式計算,主要應用場景為日志分析、索引建立,數據挖掘等,實時處理的分布式計算還是見得少;4. 集群    即多臺服務器部署相同應用構成一個集群,通過負載均衡設備共同對外提供服務。5. 緩存(1)CDN    即內容分發(fā)網絡,部署在距離終端用戶最近的網絡服務商,用戶的網絡請求總是先到達他的網絡服務商那里,在這

11、里緩存一些靜態(tài)資源。(2)反向代理    反向代理屬于前端架構的一部分,部署在網站的前端,用戶最先訪問的就是反向代理服務器,在這里緩存網站的靜態(tài)資源,無需將請求繼續(xù)轉發(fā)給應用服務器就能返回給用戶。(3)本地緩存    在服務器本地緩存熱點數據。(4)分布式緩存    需要緩存的內容多了,單機裝不下,就得考慮分布式緩存。下圖展示了用戶的WEB請求中會遇到的緩存;   CDN提供最基礎的緩存(靜態(tài)化的頁面和靜態(tài)資源(css、js等); 反向代理提供與CDN類似的數據; WEB服務器的緩存提

12、供片段化的緩存和警惕資源緩存,頁面中變化的部分則需要通過web服務器生成,其中涉及到調用應用服務器; 應用服務器中的緩存為計算結果的緩存,主要是內容緩存,基礎數據緩存;6. 異步    單一服務器上使用多線程共享內存隊列來實現異步,在集群中通常使用分布式消息隊列來實現,比如我們用到的MQ、ZeroQ等;可以達到提高系統(tǒng)可用性,加快網站響應速度,消除并發(fā)訪問高峰。7. 冗余    考慮到數據安全,備份必不可少;冷備份沒有什么好說的,主要是熱備,架構的設計中需要考慮數據的熱備;8. 自動化    自動化應該是程序員最應該掌握的基

13、礎技能;一般而言,自動化要求的技術含量不是很高,但卻是長期實踐的經驗結晶;自動化能有效的降低公司運營成本,提升程序員的生活質量,想想就歡樂,重復的工作都交給機器來做,創(chuàng)造性的工作才需要人來參與嘛;自動化主題廣泛,大致包含以下方面:     發(fā)布過程自動化     自動化代碼管理     自動化測試     自動化部署     自動化監(jiān)控     自動化報警    自動化失效轉移和恢復 &

14、#160;   自動化降級     自動化分配資源9. 安全    加密,驗證碼,過濾、風控。三、 網站的高性能架構-瞬時響應1. 性能測試指標(1)響應時間    指應用執(zhí)行一個操作從發(fā)出請求到最后收到響應數據所需要的時間。如下列出了系統(tǒng)常用的操作響應時間表:操作響應時間網絡傳輸2Kb數據1微秒Java程序本地方法調用幾微秒從內存讀取1M數據十幾微秒從SSD磁盤順序讀取1M數據0.3毫秒從遠程分布式Redis讀取一個數據0.5毫秒從機械磁盤順序讀取1M數據2毫秒機械磁盤一次尋址定位4毫秒數據庫查詢一條記錄(有索引

15、)十幾毫秒打開一個網站幾秒    實踐中計算響應時間通常是通過平均時間計算的平均值。(2)并發(fā)數    指系統(tǒng)能夠同時處理請求的數目,這個數字也反映了系統(tǒng)的負載性能。對于網站而言,并發(fā)數指網站用戶同時提交請求的用戶數目。(3)吞吐量    指單位時間內系統(tǒng)處理的請求數量。可用“請求數/秒”或“頁面數/秒”或“訪問人數/天”或“處理業(yè)務數/小時”等來衡量。    TPS(每秒事物數)是吞吐量的一個常用量化指標。HPS(每秒HTTP請求數)、QPS(每秒查詢數)。(4)性能計數器     

16、 指操作系統(tǒng)的一些數據指標如System load(系統(tǒng)負載),CPU使用率、內存使用率、磁盤等使用情況。2. 性能測試方法    性能測試(合理范圍):在資源可接受范圍內,是否能達到性能預期。    負載測試(性能最高時的臨界值):對系統(tǒng)不斷地增加并發(fā)請求以增加系統(tǒng)壓力,直到系統(tǒng)的某項或多項性能指標達到安全臨界值。這時繼續(xù)施壓系統(tǒng)的處理能力將會下降。    壓力測試(最大能承受的訪問值):對系統(tǒng)繼續(xù)施加壓力,直到系統(tǒng)崩潰或不能再處理任何請求,以此獲得系統(tǒng)最大壓力承受能力。    穩(wěn)定性測試(長時間運行)

17、:給系統(tǒng)加載一定業(yè)務壓力,使系統(tǒng)運行一段較長時間,檢測系統(tǒng)是否穩(wěn)定。3. 性能測試報告并發(fā)數響應時間(ms)TPS錯誤率(%)Load內存(GB)備注1050020058性能測試208003001010性能測試3010004021514性能測試40120045203016負載測試60200030405016壓力測試80超時0100不詳不詳壓力測試    Load為正在執(zhí)行和等待執(zhí)行的進程數量。4. Web前端優(yōu)化(1)瀏覽器訪問優(yōu)化    減少HTTP請求數,主要可通過合并CSS、JavaScript、圖片(CSS偏移)。  

18、0; 使用瀏覽器緩存,通過設置HTTP頭中的Cache-Control和Expires的屬性設置瀏覽器緩存,緩存時間可以是幾天,也可以是幾個月。當需要及時應用到客戶端瀏覽器時,可通過改變文件名來實現。而且在更新文件的時候不要全部文件一起更新,避免用戶集中刷新文件。    啟用壓縮,在服務器端對文件進行壓縮,在瀏覽器端對文件解壓縮,如GZip。文本文件的壓縮效率可達80%以上。但是壓縮對服務器和瀏覽器產生一定的壓力,帶寬良好的時候就需要權衡考慮了。    CSS放在頁面最上面,JavaScript放在頁面最下面(除非頁面解析時就需要用到JS)。 

19、   減少Cookie傳輸的數據量。靜態(tài)資源使用獨立域名訪問,避免請求靜態(tài)資源時發(fā)送Cookie,減少Cookie傳輸的次數。(2)CDN加速    CDN(Content Distribute Network,內容分發(fā)網絡)的本質仍然是一個緩存,只是部署在離用戶最近的網絡運營商的機房,一般緩存的都是靜態(tài)資源。(3)反向代理    代理服務器位于網站機房一側,代理網站Web服務器接收HTTP請求,訪問請求必須經過代理服務器。除了能夠保護網站安全的作用以及負載均衡的作用外,反向代理還能夠提供緩存作用,當用戶第一次訪問靜態(tài)內容的時候,靜態(tài)內容就被緩

20、存在反向代理服務器上,這樣當其它用戶訪問該靜態(tài)內容的時候,就可以直接從反向代理服務器返回。5. 應用服務器性能優(yōu)化    應用服務器就是處理網站業(yè)務的服務器,網站的業(yè)務代碼都部署在這里,主要優(yōu)化手段有緩存、集群、異步等。(1)分布式緩存    當網站遇到性能瓶頸時,第一個想到的解決方案就是使用緩存。    緩存指將數據存儲在相對較高訪問速度的存儲介質中,并且無需重復計算即可直接使用。時間復雜度為O(1)。    合理使用緩存:        頻繁修改的數據,數據更新前至少讀取

21、兩次,緩存才有意義;        沒有熱點的訪問,不遵循二八定律,即大部分數據訪問并沒有集中在小部分數據上,那么緩存就沒有意義,因為大部分數據還沒有被再次訪問就已經被拉出緩存了;        數據不一致與臟讀;        緩存可用性,緩存數據丟失或者緩存不可用不應該影響到應用程序的處理。因緩存服務崩潰導致庫壓力增大而宕機使整個網站不可用,這種情況被稱作緩存雪崩。緩存熱備(違反了緩存的設計初衷),使用分布式緩存保證大部分緩存可用;     

22、   緩存預熱,在緩存系統(tǒng)啟動時就把熱點數據加載好;        緩存穿透,如果因為不恰當的業(yè)務,或者惡意攻擊持續(xù)高并發(fā)地請求某個不存在的數據,由于緩存沒有保存該數據,所有的請求都會落到數據庫上,對數據庫造成壓力。一個簡單的對策是將不存在的數據也緩存起來(其值value值為null)。    分布式緩存指緩存部署在多個服務器組成的集群中,以集群方式提供緩存服務,其具體架構有兩種,一種是以JBoss Cache偽代碼的需要更新同步的分布式緩存, 一種是以Memcached為代表的不互相通信的分布式緩存。    Jboss Cache 的分布式緩存在集群中的所有服務器中保存相同的緩存數據,當某臺服務器有緩存更新的時候,會通知集群中其他機器跟新緩存數據。優(yōu)點是應用程序可以從本地快速的獲取緩存數據,但當集群規(guī)模較大的時候,緩存更新信息需要通過到集群所有機器,其代價可想而知。(2)異步操作    為了改善網站的擴展性,可以使用消息隊列

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論