大型網(wǎng)站架構演化歷程:
架構演化-分布式服務
演化的價值觀
誤區(qū)
模式的關鍵在于模式的可重復性
架構是“最高層次的規(guī)劃,難以改變的規(guī)定”。主要關注五個要素:
下面依次對這五個要素進行歸納
性能的測試指標主要有:
性能測試方法:
性能測試曲線
性能優(yōu)化,根據(jù)網(wǎng)站分層架構,可以分為三大類:
大型網(wǎng)站的“大型”是指:
伸縮性的分為如下幾個方面
系統(tǒng)架構設計層面的“開閉原則”
XSS 攻擊和 SQL 注入攻擊是構成網(wǎng)站應用攻擊最主要的兩種手段,此外還包括 CSRF,Session 劫持等手段。
最后針對于上面的知識點我總結出了 “怎樣學架構更有效” 做成了文檔和架構視頻資料免費分享給大家
希望能幫助到您提高自己的技術升職加薪,也節(jié)省大家在網(wǎng)上搜索資料的時間來學習,也可以關注我一下以后會有更多干貨分享。
轉發(fā)+關注私信回復【架構資料】領取技術資料【面試資料】
對于訪問量大的網(wǎng)站而言,將網(wǎng)站的各個部分拆分分別部署到不同服務器上是很有必要的。例如將圖片和web站點分開。一般而言,在網(wǎng)站的整個服務器部署上分為如下幾種類型:
文件服務器:一般存儲系統(tǒng)的相關圖片和文件,給各個子系統(tǒng)提供統(tǒng)一的文件調(diào)用
代理服務器:一般使用linux+Nginx作為反向代理
web服務器:.net中最常用的Web服務器IIS,Mono中一般使用Nginx
應用服務器:負責系統(tǒng)中各個業(yè)務邏輯的提供,比如用戶中心,結算中心,支付中心等
緩存服務器:提供MemCached緩存服務
數(shù)據(jù)庫服務器:負責網(wǎng)站數(shù)據(jù)的提供,一般為Sqlserver,mysql,oracle等
假設網(wǎng)站每天要承受100萬pv的訪問量,計算帶寬要涉及到兩個指標(峰值流量和頁面平均大小),帶寬單位為bps(bit/s)。
1、假設峰值流量為平均流量的5倍;
2、假設每次訪問的平均頁面大小為100KB左右。
1B=8b---------------------1B/s=8b/s(1Bps=8bps)
1KB=1024B ------------- 1KB/s=1024B/s
1MB=1024KB------------1Mps=1024KB/s
100萬pv訪問量一天平均分布,折合每秒大約訪問12次,頁面大小為字節(jié)(Byte),總共訪問頁面大小就是12*100KB=1200KB,1Byte=8bit,則1200KB=9600Kb,9600Kb/1024大約9Mb/s(9Mbps),我們網(wǎng)站在峰值流量時一定要保持正常訪問,則真實帶寬應該在9M*5=45Mbps左右。
公司剛剛起步,業(yè)務量不大,往往可能在某個虛擬主機空間商租用一個虛擬主機和一個數(shù)據(jù)庫就搭建了一個最基本的網(wǎng)站
隨著業(yè)務量增加,用戶的訪問越來越多,網(wǎng)站經(jīng)常性的打不開,慢,甚至出現(xiàn)數(shù)據(jù)庫鏈接達到最大限制數(shù),這個時候需要針對網(wǎng)站做一些優(yōu)化策略:
當系統(tǒng)訪問量的再度增加,webserver機器的壓力在高峰會上升到比較高,這個時候開始考慮增加一臺WebServer,但是增加一臺WebServer的時候意味著要在兩臺的服務器上分別建立相同的站點,那么就會出現(xiàn)如下問題:
如何讓訪問分配到這兩臺機器上?Nginx
如何保持狀態(tài)信息的同步,例如用戶session等?
正常考慮的方案有寫入數(shù)據(jù)庫、開啟狀態(tài)服務器、cookie、寫入緩存等。
如何保持數(shù)據(jù)緩存信息的同步?
緩存服務器
如何讓上傳文件這些類似的功能繼續(xù)正常?
采用文件服務器統(tǒng)一管理
通過增加web服務器享受了一段快速訪問的幸福后,發(fā)現(xiàn)系統(tǒng)又開始變慢了,經(jīng)過查找,發(fā)現(xiàn)數(shù)據(jù)庫寫入、更新的這些操作的部分數(shù)據(jù)庫連接的 資源競爭非常激烈,導致了系統(tǒng)變慢,這下怎么辦呢?
分庫
分表
Memcache,Redis分布式緩存
在做完分庫分表這些工作后,數(shù)據(jù)庫上的壓力已經(jīng)降到比較低了,這個時候可能到了下一個瓶頸,查看windows的性能計數(shù)器發(fā)現(xiàn)有大量的阻塞請求,于是可以做Web園或者添加一些webserver服務器。在這個添加webserver服務器的過程,有可能會出現(xiàn)如下幾個問題:
一臺Nginx服務器的軟負載已經(jīng)無法承擔巨大的web訪問量了,可以用硬件負載解決F5或應用從邏輯上做一定的分類,然后分散到不同的軟負載集群中
原有的一些狀態(tài)信息同步、文件共享等方案可能會出現(xiàn)瓶頸,需要進行改進,也許這個時候會根據(jù)情況編寫符合網(wǎng)站業(yè)務需求的分布式文件系統(tǒng)等;
在做完這些工作后,開始進入一個看似完美的無限伸縮的時代,當網(wǎng)站流量增加時,應對的解決方案就是不斷的添加webserver。
通過增加web服務器享受了一段快速訪問的幸福后,發(fā)現(xiàn)系統(tǒng)又開始變慢了,經(jīng)過查找,發(fā)現(xiàn)數(shù)據(jù)庫寫入、更新的這些操作的部分數(shù)據(jù)庫連接的 資源競爭非常激烈,導致了系統(tǒng)變慢,這下怎么辦呢,讀寫分離,訂閱和發(fā)布
NoSQL=Not Only SQL 指的是非關系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關系數(shù)據(jù)庫在應付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題,而非關系型的數(shù)據(jù)庫則由于其本身的特點得到了非常迅速的發(fā)展。
NoSql數(shù)據(jù)庫大量應用于微博系統(tǒng)等事務性不強的系統(tǒng)
BigTable
MongoDB
http://tech.it168.com/topic/2011/10-1/nosqlapp/index.html
經(jīng)過上面這個漫長而痛苦的過程,終于再度迎來了完美的時代,不斷的增加webserver就可以支撐越來越高的訪問量了,但是原來部署在webserver上的那個web應用已經(jīng)非常龐大 了,當多個團隊都開始對其進行改動時,相當?shù)牟环奖悖瑥陀眯砸蚕喈斣愀猓旧厦總€團隊都做了或多或少重復的事情,而且部署和維護也是相當?shù)穆闊驗辇嫶蟮膽冒贜臺機器上復制、啟動都需要耗費不少的時間,出問題的時候也不是很好查,另外一個更糟糕的狀況是很有可能會出現(xiàn)某個應用上的bug就導 致了全站都不可用,還有其他的像調(diào)優(yōu)不好操作(因為機器上部署的應用什么都要做,根本就無法進行針對性的調(diào)優(yōu))等因素,根據(jù)這樣的分析,開始痛下決心,將 系統(tǒng)根據(jù)職責進行拆分,于是一個大型的分布式應用就誕生了,通常,這個步驟需要耗費相當長的時間,因為會碰到很多的挑戰(zhàn):
1、拆成分布式后需要提供一個高性能、穩(wěn)定的通信框架,并且需要支持多種不同的通信和遠程調(diào)用方式;
2、將一個龐大的應用拆分需要耗費很長的時間,需要進行業(yè)務的整理和系統(tǒng)依賴關系的控制等;
3、如何運維(依賴管理、運行狀況管理、錯誤追蹤、調(diào)優(yōu)、監(jiān)控和報警等)好這個龐大的分布式應用。
經(jīng)過這一步,差不多系統(tǒng)的架構進入相對穩(wěn)定的階段,同時也能開始采用大量的廉價機器來支撐著巨大的訪問量和數(shù)據(jù)量,結合這套架構以及這么多次演變過程吸取的經(jīng)驗來采用其他各種各樣的方法來支撐著越來越高的訪問量。
什么是CDN?
CDN的全稱是Content Delivery Network,即內(nèi)容分發(fā)網(wǎng)絡。其目的是通過在現(xiàn)有的Internet中增加一層新的網(wǎng)絡架構,將網(wǎng)站的內(nèi)容發(fā)布到最接近用戶的網(wǎng)絡”邊緣”,使用戶可 以就近取得所需的內(nèi)容,解決Internet網(wǎng)絡擁塞狀況,提高用戶訪問網(wǎng)站的響應速度。從技術上全面解決由于網(wǎng)絡帶寬小、用戶訪問量大、網(wǎng)點分布不均等 原因,解決用戶訪問網(wǎng)站的響應速度慢的根本原因。
狹義地講,內(nèi)容分發(fā)布網(wǎng)絡(CDN)是一種新型的網(wǎng)絡構建方式,它是為能在傳統(tǒng)的IP網(wǎng)發(fā)布寬帶豐富媒體而特別優(yōu)化的網(wǎng)絡覆蓋層;而從廣義的角 度,CDN代表了一種基于質(zhì)量與秩序的網(wǎng)絡服務模式。簡單地說,內(nèi)容發(fā)布網(wǎng)絡(CDN)是一個經(jīng)策略性部署的整體系統(tǒng),包括分布式存儲、負載均衡、網(wǎng)絡請 求的重定向和內(nèi)容管理4個要件,而內(nèi)容管理和全局的網(wǎng)絡流量管理(Traffic Management)是CDN的核心所在。通過用戶就近性和服務器負載的判斷,CDN確保內(nèi)容以一種極為高效的方式為用戶的請求提供服務。總的來說,內(nèi) 容服務基于緩存服務器,也稱作代理緩存(Surrogate),它位于網(wǎng)絡的邊緣,距用戶僅有”一跳”(Single Hop)之遙。同時,代理緩存是內(nèi)容提供商源服務器(通常位于CDN服務提供商的數(shù)據(jù)中心)的一個透明鏡像。這樣的架構使得CDN服務提供商能夠代表他們 客戶,即內(nèi)容供應商,向最終用戶提供盡可能好的體驗,而這些用戶是不能容忍請求響應時間有任何延遲的。據(jù)統(tǒng)計,采用CDN技術,能處理整個網(wǎng)站頁面的 70%~95%的內(nèi)容訪問量,減輕服務器的壓力,提升了網(wǎng)站的性能和可擴展性。
CDN 的工作原理
在描述CDN的實現(xiàn)原理,讓我們先看傳統(tǒng)的未加緩存服務的訪問過程,以便了解CDN緩存訪問方式與未加緩存訪問方式的差別:
由上圖可見,用戶訪問未使用CDN緩存網(wǎng)站的過程為:
1)、用戶向瀏覽器提供要訪問的域名;
2)、瀏覽器調(diào)用域名解析函數(shù)庫對域名進行解析,以得到此域名對應的IP地址;
3)、瀏覽器使用所得到的IP地址,域名的服務主機發(fā)出數(shù)據(jù)訪問請求;
4)、瀏覽器根據(jù)域名主機返回的數(shù)據(jù)顯示網(wǎng)頁的內(nèi)容。
CDN的通俗理解就是網(wǎng)站加速,可以解決跨運營商,跨地區(qū),服務器負載能力過低,帶寬過少等帶來的網(wǎng)站打開速度慢等問題。網(wǎng)宿,睿江,藍訊
分布式架構中,節(jié)點的故障是不可避免的,當添加和刪除某一節(jié)點時,會導致大量散列數(shù)據(jù)失效,需要重新散列。這意味著這些丟失的數(shù)據(jù)要去數(shù)據(jù)庫中請求一次以后才能按照hash(key) /服務器數(shù)=服務器編號 重新散列緩存到對應的服務器上。這對于高訪問量的系統(tǒng)來講影響是非常大的。
人們采用一致性Hash來解決此類問題
化網(wǎng)站架構對于SEO來說是非常重要的,它可以幫助搜索引擎更好地索引你的網(wǎng)站,提高網(wǎng)站的排名。下面將詳細介紹如何構建一個優(yōu)化SEO的網(wǎng)站架構。
首先,一個良好的網(wǎng)站架構應該是清晰且易于導航的。這意味著你的網(wǎng)站應該有一個明確的主題和目標,并且分類結構應該簡單明了。對于用戶和搜索引擎爬蟲來說,能夠快速找到所需要的信息是非常重要的。因此,你需要通過設置簡潔的導航菜單和目錄結構,來確保用戶能夠輕松地瀏覽你的網(wǎng)站。
其次,一個良好的網(wǎng)站架構應該具有扁平化結構。傳統(tǒng)的網(wǎng)站結構往往是層級結構,即網(wǎng)站首頁鏈接到二級頁面,二級頁面鏈接到三級頁面,以此類推。然而,這樣的層級結構在SEO上并不理想。因為搜索引擎爬蟲在抓取網(wǎng)頁時,通常會注重抓取層級較淺的頁面,并忽略深層次的頁面。因此,采用扁平化結構,減少網(wǎng)頁的層級深度,可以提高搜索引擎爬蟲對頁面的抓取效率,從而更好地索引你的網(wǎng)站。
第三,一個良好的網(wǎng)站架構應該具有清晰的URL結構。URL是網(wǎng)站的地址,它是搜索引擎判斷網(wǎng)頁內(nèi)容的一個重要因素。因此,你需要確保你的URL簡潔、有意義且易讀。避免使用過長的URL,使用短鏈接和關鍵詞來描述頁面內(nèi)容。另外,確保你的URL結構層次清晰,通過使用文件夾和子文件夾來組織和分類相關的頁面。
第四,一個良好的網(wǎng)站架構應該具備合理的內(nèi)部鏈接。內(nèi)部鏈接是指在網(wǎng)站內(nèi)部鏈接到其他頁面的鏈接。它們可以幫助用戶和搜索引擎爬蟲更好地瀏覽和索引你的網(wǎng)站。通過合理設置內(nèi)部鏈接,可以提高網(wǎng)站的頁面權重,幫助搜索引擎更好地理解和索引你的頁面。你可以通過在有關的文章中內(nèi)部鏈接到其他相關頁面,或在頁面底部添加相關文章推薦等方式來優(yōu)化內(nèi)部鏈接。
第五,一個良好的網(wǎng)站架構還應該具有良好的頁面加載速度。頁面加載速度是搜索引擎排名的一個重要因素。如果你的網(wǎng)站加載速度過慢,不僅會影響用戶體驗,也會導致搜索引擎爬蟲無法快速抓取你的頁面。為了提高頁面加載速度,你可以通過優(yōu)化圖片和視頻的大小和格式,壓縮CSS和JavaScript文件,使用CDN等方式來減少頁面加載時間。
第六,一個良好的網(wǎng)站架構還應該具備響應式設計。響應式設計是指網(wǎng)站能夠根據(jù)設備的不同而自動調(diào)整布局和顯示效果。由于移動設備的興起,越來越多的用戶使用手機和平板電腦訪問網(wǎng)站。如果你的網(wǎng)站沒有良好的響應式設計,則可能導致用戶在移動設備上的訪問體驗不佳,進而影響SEO排名。因此,確保你的網(wǎng)站能夠適應不同的設備,并具備良好的移動端訪問體驗,是提高SEO的重要一步。
最后,要注意避免使用Flash和AJAX等對搜索引擎不友好的技術。盡量選擇搜索引擎容易索引的HTML和CSS技術來構建你的網(wǎng)站。另外,還要注意避免使用重復內(nèi)容和無效的頁面。重復內(nèi)容會被搜索引擎視為垃圾內(nèi)容,而無效的頁面會降低整個網(wǎng)站的質(zhì)量,影響搜索引擎對其的評級。
總之,一個優(yōu)化SEO的網(wǎng)站架構應該是清晰、簡潔且有良好的導航結構。它應該具備扁平化結構、清晰的URL結構、合理的內(nèi)部鏈接、快速的頁面加載速度、良好的響應式設計,并避免使用不友好的技術和垃圾內(nèi)容。通過遵循這些原則,你可以建立一個優(yōu)化SEO的網(wǎng)站架構,提高你的網(wǎng)站在搜索引擎中的排名。
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。