讀《大型網(wǎng)站技術架構(gòu) 核心原理與案例分析》有感
互聯(lián)網(wǎng)系統(tǒng)與企業(yè)系統(tǒng)對比
當然這里主要討論大型互聯(lián)網(wǎng)系統(tǒng),用戶數(shù)量在幾萬的系統(tǒng)不在對比范圍。企業(yè)系統(tǒng)用戶數(shù)量在幾千到幾萬。
不同點:
系統(tǒng)性能的評價指標:
系統(tǒng)性能、可用性avalibility、伸縮性flexibility、擴展性、安全性security
一、系統(tǒng)性能:性能對用戶的影響是操作體驗,頁面的響應時間,計算結(jié)果的時間。 性能測試指標:響應時間、并發(fā)數(shù)、吞吐量、性能計數(shù)器
性能測試方法:性能測試、負載測試、壓力測試、穩(wěn)定性測試
性能優(yōu)化措施:
1、瀏覽器訪問優(yōu)化:
減少Http請求,通過合并CSS、Javascript、圖片,使多次請求合并為一次請求。瀏覽器緩存,將CSS、JavaScript、logo、圖標這些更新頻率低的資源緩存在用戶本地。啟用壓縮,服務器端對HTML、CSS、JavaScript啟動gzip壓縮,瀏覽器端對資源解壓縮進行顯示。
CSS放在前面,Javascript放在頁面下面,CSS用于渲染頁面時使用,javascript會立即執(zhí)行,有可能阻塞頁面。
減少Cookie傳輸,太大的cookie會嚴重影響數(shù)據(jù)傳輸。
2、CDN加速
CDN(Content Distribute Network,內(nèi)容分發(fā)網(wǎng)絡)本質(zhì)是緩存,將靜態(tài)資源緩存在離用戶最近的網(wǎng)絡運營商機房,即用戶網(wǎng)絡訪問第一跳。用戶直接從最近的運營商機房取得靜態(tài)資源。
3、反向代理
請求達到反向代理服務器,之后轉(zhuǎn)發(fā)給應用服務器集群進行處理,反向代理服務器可以提供資源緩存服務,負載均衡能力。
反向代理的用處
(1)保護和隱藏原始資源服務器
(2)負載均衡
與反向代理對應的是正向代理,借此機會就在這里介紹一下:
正向代理:
正向代理一般需要對客戶端進行設置,一種正向代理的例子就是我們在請求外網(wǎng)時(www.google.com)需要對IE的代理設置:
大家一定很奇怪,公司的內(nèi)網(wǎng)和外網(wǎng)(Internet)是不連通的,為什么不配代理就不能訪問谷歌,配置了代理之后就可以訪問了,原因在于代理服務器替你請求www.google.com,然后再將結(jié)果返回給客戶端(用戶)。
示意圖如下:
這樣,用戶是沒有訪問www.google.com的權(quán)限的,但是proxy.huawei.com有權(quán)限訪問,這樣經(jīng)由proxy訪問谷歌,然后將結(jié)果返回給用戶,就達到了用戶請求谷歌的目的。
正向代理的用處
(1)訪問本無法訪問的服務器
本來用戶經(jīng)過路由器A和B訪問服務器B,但是由于鏈路斷裂,可以經(jīng)由Proxy訪問服務器B,經(jīng)典的例子是“翻墻”,不過現(xiàn)在翻墻的技術還有VPN了。
(2)加速訪問服務器
同樣是上圖,如果代理服務器到服務器B的帶寬比較足,那么訪問速度要快很多。
(3)cache作用
可以利用proxy緩存需要請求的資源,而直接返回給用戶。
(4)客戶端訪問授權(quán)
proxy可以對請求來源進行識別,讓部分用戶通過proxy訪問服務器B,而對不能訪問外網(wǎng)的用戶請求直接扔掉。
(5)隱藏訪問者的行蹤
黑客比較喜歡利用代理跳轉(zhuǎn),抓到“肉雞”之后就可以利用肉雞做一些非法的事情,但是在目標機器上殘留的確是“肉雞”的信息,而很難追查到攻擊來源。
黑客往往手里掌握幾百臺服務器(肉雞),經(jīng)過不斷跳轉(zhuǎn)而使追查攻擊者來源很難。
正向代理和反向代理對比:
4、應用服務器性能優(yōu)化
分布式緩存
常用的分布式緩存架構(gòu)主要有JBoss Cache、Memcached,memcache使用較多。異步操作,消息隊列機制,需要關注數(shù)據(jù)一致,對實時性要求比較高的不適合利用消息隊列機制。
使用集群,提高吞吐量
代碼優(yōu)化
利用多線程,多線程時線程安全需要關注,將對象設計為無狀態(tài)對象,使用局部對象,并發(fā)訪問時使用鎖是保證線程安全的一些措施。
資源復用,單例和對象池,數(shù)據(jù)庫連接中基本都是用連接池的方式。應用服務器也采用線程池的方式。
session管理
合理利用垃圾回收機制
5、存儲性能優(yōu)化
分布式存儲,利用讀取速度較快的存儲介質(zhì)是需要考慮的問題。
二、可用性:可用性保證用戶在7*24小時時間內(nèi)可以正常訪問頁面的情況,一般大型網(wǎng)站都要保持4個9(一年時間內(nèi)99.99%時間系統(tǒng)可用,宕機時間在53分鐘以內(nèi))。
為了保證可用性一般有如下措施:通過負載均衡進行無狀態(tài)服務的失效轉(zhuǎn)移應用服務器集群的Session管理,分級管理、超時設置、異步調(diào)用、服務降級、冪等性設計
CAP原理
CAP原理一般認為在分布式系統(tǒng)中此三個指標不能同時得到滿足,最多滿足其中兩個,而一般系統(tǒng)設計中犧牲的指標是數(shù)一致性。
發(fā)散一下:項目管理中也有一個鐵三角,質(zhì)量、時間、成本鐵三角,三者之間互相影響,改變其中之一就會對另外兩個的造成影響,例如要在短時間內(nèi)完成一個項目,就要以較高成本和犧牲一定的質(zhì)量為代價。若要時間短、高質(zhì)量,就要付出更多的成本若要成本低,就要耗費較長的時間,甚至質(zhì)量上要做出讓步.
數(shù)據(jù)備份:分為數(shù)據(jù)冷備和數(shù)據(jù)熱備(異步熱備方式和同步熱備方式)
網(wǎng)站發(fā)布:網(wǎng)站發(fā)布前需要進行自動化測試、預發(fā)布驗證、灰度發(fā)布、正式發(fā)布,一般對于多服務器集群都是采用。
三、伸縮性:通過增加機器數(shù)量達到承載更多用戶并發(fā)訪問的目的。如果具備這種能力,那么我們可以說系統(tǒng)可伸縮性是不錯的。
伸縮性的設計可以從兩個維度進行,分別是橫向擴展和縱向擴展,橫向擴展是不同業(yè)務模塊或不同產(chǎn)品的擴展,一般采用“分而治之”的策略,將每個模塊獨立分開;縱向擴展一般采用集群方式滿足大量用戶的并發(fā)訪問。
集群的伸縮性設計
1、HTTP重定向負載均衡
用戶請求域名,DNS服務器解析域名到達114.100.80.10這臺HTTP重定向負載均衡服務器,負載均衡服務器通過特定算法獲得重定向地址114.100.80.3寫入響應,并設置狀態(tài)碼302返回給瀏覽器,瀏覽器重新請求114.100.80.3,完成請求。
總結(jié):這種負載均衡的優(yōu)點是配置簡單,缺點是請求需要兩次才能得到結(jié)果。
2、DNS域名解析負載均衡
用戶請求域名,域名服務器DNS根據(jù)特定算法返回其中一臺物理機器的IP地址,瀏覽器請求該IP獲得響應。
例如百度網(wǎng)站也是做了DNS負載均衡的,利用nslookup命令可看到可以得到兩個IP,112.80.248.74和112.80.248.73,訪問任一個IP都是訪問百度首頁。
總結(jié):優(yōu)點是將負載均衡的工作交給DNS服務器,缺點是如果某臺服務器下線,但是DNS依然緩存了此服務器IP地址,那么會導致用戶請求失敗。事實上一般將DNS負載均衡作為第一級負載均衡,即解析得到的服務器并不是實際提供服務的物理服務器,而是同樣提供內(nèi)部服務的內(nèi)部服務器。
3、反向代理負載均衡
瀏覽器訪問請求的地址是反向代理服務器的地址114.100.80.10,反向代理服務器收到請求后,根據(jù)負載均衡算法得到其中一臺真實物理服務器的地址10.0.0.3,并將請求轉(zhuǎn)發(fā)給服務器,10.0.0.3處理完請求后將響應返回給反向代理服務器,反向代理服務器再講響應返回給用戶。
總結(jié):優(yōu)點是和反向代理服務器功能集成在一起,部署簡單,缺點是反向代理服務器是所有請求和響應的中轉(zhuǎn)站,其性能可能會成為瓶頸。
4、IP負載均衡
用戶請求數(shù)據(jù)包到達負載均衡服務器114.100.80.10后,負載均衡服務器在操作系統(tǒng)內(nèi)核進程獲取網(wǎng)絡數(shù)據(jù)包,根據(jù)負載均算法計算得到一臺真實Web服務器10.0.0.1,然后將數(shù)據(jù)目的IP地址修改為10.0.0.1,不需要通過用戶進程處理。真實Web應用服務器處理完成后,響應數(shù)據(jù)包回到負載均衡服務器,負載均衡服務器再將數(shù)據(jù)包源地址修改為自身的IP地址(114.100.80.10)發(fā)送給用戶瀏覽器。
總結(jié):IP負載均衡在內(nèi)核進程完成數(shù)據(jù)分發(fā),較反向代理負載均衡有更好的處理性能。但是由于所有請求響應都需要經(jīng)過負載均衡服務器,集群的最大響應數(shù)據(jù)吞吐量不得不受限制于負載均衡服務器網(wǎng)卡帶寬。對于提供下載服務或者視頻服務等需要傳輸大量數(shù)據(jù)的網(wǎng)站而言,難以滿足需求。
5、數(shù)據(jù)鏈路層負載均衡
四、擴展性:當業(yè)務有新增加時,是否能做到對以前的功能無影響,這就是系統(tǒng)擴展性。主要對業(yè)務橫向擴展能力的描述。
利用分布式消息隊列降低系統(tǒng)耦合性提供Web Service
五、安全性:不言而喻,安全性是系統(tǒng)必須要關注的特性
常見攻擊: XSS攻擊、注入攻擊、CSRF攻擊
常用安全手段:Web應用防火墻(ModSecurity)、網(wǎng)站安全漏洞掃描
利用信息加密技術保障數(shù)據(jù)安全:
單向散列加密:MD5、SHA等
對稱加密:DES算法、RC算法
非對稱加密: RSA算法,數(shù)字證書
除了上面介紹的五個特性,一個架構(gòu)設計完善的系統(tǒng)還應該有全面的監(jiān)控系統(tǒng),收集用戶行為,監(jiān)控服務器性能(系統(tǒng)load/內(nèi)存占用/磁盤IO/網(wǎng)絡IO扥),系統(tǒng)報警系統(tǒng)等。
結(jié)束語:以業(yè)務驅(qū)動為發(fā)展動力,技術為業(yè)務服務。每個大型互聯(lián)網(wǎng)系統(tǒng)都是由小做大的,很多大型互聯(lián)網(wǎng)網(wǎng)站最開始都是采用LAMP
這樣免費輕型的組合方式,最初可能只有一臺機器,隨著業(yè)務發(fā)展,用戶數(shù)量增加,將LAMP重構(gòu)使之符合當時的情況。
轉(zhuǎn)載請注明出處:華為云博客 https://portal.hwclouds.com/blogs
云性能測試服務 CPTS CDN
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。