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