當前位置:
首頁 > 知識 > 理解大型分布式網站你必須知道這些概念

理解大型分布式網站你必須知道這些概念

理解大型分布式網站你必須知道這些概念



作者:朱小廝


1. I/O優化


增加緩存,減少磁碟的訪問次數。

優化磁碟的管理系統,設計最優的磁碟方式策略,以及磁碟的定址策略,這是在底層操作系統層面考慮的。


設計合理的磁碟存儲數據塊,以及訪問這些資料庫的策略,這是在應用層面考慮的。例如,我們可以給存放的數據設計索引,通過定址索引來加快和減少磁碟的訪問量,還可以採用非同步和非阻塞的方式加快磁碟的訪問速度。


應用合理的RAID策略提升磁碟I/O。


2. Web前端調優


減少網路交互的次數(多次請求合并)


減少網路傳輸數據量的大小(壓縮)


盡量減少編碼(盡量提前將字元轉化為位元組,或者減少從字元到位元組的轉化過程。)


使用瀏覽器緩存


減少Cookie傳輸


合理布局頁面

使用頁面壓縮


延遲載入頁面


CSS在最上面,JS在最下面


CDN


反向代理


頁面靜態化


異地部署


3.服務降級(自動優雅降級)


拒絕服務和關閉服務


4.冪等性設計

有些服務天然具有冪等性,比如講用戶性別設置為男性,不管設置多少次,結果都一樣。但是對轉賬交易等操作,問題就會比較複雜,需要通過交易編號等信息進行服務調用有效性校驗,只有有效的操作才能繼續執行。


(註:冪等性是系統的介面對外一種承諾(而不是實現), 承諾只要調用介面成功, 外部多次調用對系統的影響是一致的. 聲明為冪等的介面會認為外部調用失敗是常態, 並且失敗之後必然會有重試.)


5.失效轉移


若數據伺服器集群中任何一台伺服器宕機,那麼應用程序針對這台伺服器的所有讀寫操作都需要重新路由到其他伺服器,保證數據訪問不會失敗,這個過程叫失效轉移。


失效轉移包括:失效確認(心跳檢測和應用程序訪問失敗報告)、訪問轉移、數據恢復。


失效轉移保證當一個數據副本不可訪問時,可以快速切換訪問數據的其他副本,保證系統可用。


6.性能優化


根據網站分層架構,性能優化可分為:web前端性能優化、應用伺服器性能優化、存儲伺服器性能優化。


1. web前端性能優化


瀏覽器訪問優化:減少http請求;使用瀏覽器緩存;啟用壓縮;css放在頁面最上面、javaScript放在頁面最下面;減少Cookie傳輸

CDN加速


反向代理


2. 應用伺服器性能優化


分布式緩存(Redis等)


非同步操作(消息隊列)


使用集群(負載均衡)


代碼優化


3. 存儲性能優化


機械硬碟vs固態硬碟


B+樹 vs LSM樹

RAID vs HDFS


7. 代碼優化


多線程(Q:怎麼確保線程安全?無鎖機制有哪些?)


資源復用(單例模式,連接池,線程池)


數據結構


垃圾回收


8. 負載均衡


HTTP重定向負載均衡


優點:比較簡單。


缺點:瀏覽器需要兩次請求伺服器才能完成一次訪問,性能較差。重定向服務自身的處理能力有可能成為瓶頸,整個集群的伸縮性國模有限;使用HTTP302響應碼重定向,有可能使搜索引擎判斷為SEO作弊,降低搜索排名。

DNS域名解析負載均衡


DNS(Domain Name System)負責域名解析的服務,域名url實際上是伺服器的別名,實際映射是一個IP地址,解析過程,就是DNS完成域名到IP的映射。而一個域名是可以配置成對應多個IP的。因此,DNS也就可以作為負載均衡服務。


事實上,大型網站總是部分使用DNS域名解析,利用域名解析作為第一級負載均衡手段,即域名解析得到的一組伺服器並不是實際提供Web服務的物理伺服器,而是同樣提供負載均衡服務的內部伺服器,這組內部負載均衡伺服器再進行負載均衡,將請求分發到真是的Web伺服器上。


優點:將負載均衡的工作轉交給DNS,省掉了網站管理維護負載均衡伺服器的麻煩,同時許多DNS還支持基於地理位置的域名解析,即會將域名解析成舉例用戶地理最近的一個伺服器地址,這樣可以加快用戶訪問速度,改善性能。


缺點:不能自由定義規則,而且變更被映射的IP或者機器故障時很麻煩,還存在DNS生效延遲的問題。而且DNS負載均衡的控制權在域名服務商那裡,網站無法對其做更多改善和更強大的管理。


反向代理負載均衡


反向代理服務可以緩存資源以改善網站性能。實際上,在部署位置上,反向代理伺服器處於Web伺服器前面(這樣才可能緩存Web相應,加速訪問),這個位置也正好是負載均衡伺服器的位置,所以大多數反向代理伺服器同時提供負載均衡的功能,管理一組Web伺服器,將請求根據負載均衡演算法轉發到不同的Web伺服器上。Web伺服器處理完成的響應也需要通過反向代理伺服器返回給用戶。由於web伺服器不直接對外提供訪問,因此Web伺服器不需要使用外部ip地址,而反向代理伺服器則需要配置雙網卡和內部外部兩套IP地址。


優點:和反向代理伺服器功能集成在一起,部署簡單。


缺點:反向代理伺服器是所有請求和響應的中轉站,其性能可能會成為瓶頸。


LVS-NAT:修改IP地址

LVS-TUN: 一個IP報文封裝在另一個IP報文的技術。


LVS-DR:將數據幀的MAC地址改為選出伺服器的MAC地址,再將修改後的數據幀在與伺服器組的區域網上發送。


9.緩存


緩存就是將數據存放在距離計算最近的位置以加快處理速度。緩存是改善軟體性能的第一手段,現在CPU越來越快的一個重要因素就是使用了更多的緩存,在複雜的軟體設計中,緩存幾乎無處不在。大型網站架構設計在很多方面都使用了緩存設計。


CDN: 及內容分發網路,部署在距離終端用戶最近的網路服務商,用戶的網路請求總是先到達他的網路服務商哪裡,在這裡緩存網站的一些靜態資源(較少變化的數據),可以就近以最快速度返回給用戶,如視頻網站和門戶網站會將用戶訪問量大的熱點內容緩存在CDN中。


反向代理:反向代理屬於網站前端架構的一部分,部署在網站的前端,當用戶請求到達網站的數據中心時,最先訪問到的就是反向代理伺服器,這裡緩存網站的靜態資源,無需將請求繼續轉發給應用伺服器就能返回給用戶。


本地緩存:在應用伺服器本地緩存著熱點數據,應用程序可以在本機內存中直接訪問數據,而無需訪問資料庫。


分布式緩存:大型網站的數據量非常龐大,即使只緩存一小部分,需要的內存空間也不是單機能承受的,所以除了本地緩存,還需要分布式緩存,將數據緩存在一個專門的分布式緩存集群中,應用程序通過網路通信訪問緩存數據。


使用緩存有兩個前提條件,一是數據訪問熱點不均衡,某些數據會被更頻繁的訪問,這些數據應該放在緩存中;二是數據在某個時間段內有效,不會很快過期,否則緩存的數據就會因已經失效而產生臟讀,影響結果的正確性。網站應用中,緩存處理可以加快數據訪問速度,還可以減輕後端應用和數據存儲的負載壓力,這一點對網站資料庫架構至關重要,網站資料庫幾乎都是按照有緩存的前提進行負載能力設計的。


10. 負載均衡演算法

輪詢 Round Robin


加強輪詢 Weight Round Robin


隨機 Random


加強隨機 Weight Random


最少連接 Least Connections


加強最少連接


源地址散列 Hash


其他演算法


最快演算法(Fastest):傳遞連接給那些響應最快的伺服器。當其中某個伺服器發生第二到第7 層的故障,BIG-IP 就把其從伺服器隊列中拿出,不參加下一次的用戶請求的分配,直到其恢復正常。


觀察演算法(Observed):連接數目和響應時間以這兩項的最佳平衡為依據為新的請求選擇伺服器。當其中某個伺服器發生第二到第7 層的故障,BIG-IP就把其從伺服器隊列中拿出,不參加下一次的用戶請求的分配,直到其恢復正常。

預測演算法(Predictive):BIG-IP利用收集到的伺服器當前的性能指標,進行預測分析,選擇一台伺服器在下一個時間片內,其性能將達到最佳的伺服器相應用戶的請求。(被BIG-IP 進行檢測)


動態性能分配演算法(Dynamic Ratio-APM):BIG-IP 收集到的應用程序和應用伺服器的各項性能參數,動態調整流量分配。


動態伺服器補充演算法(Dynamic Server Act.):當主伺服器群中因故障導致數量減少時,動態地將備份伺服器補充至主伺服器群。


服務質量演算法(QoS):按不同的優先順序對數據流進行分配。


服務類型演算法(ToS): 按不同的服務類型(在Type of Field中標識)負載均衡對數據流進行分配。


規則模式演算法:針對不同的數據流設置導向規則,用戶可自行


11. 擴展性和伸縮性的區別


擴展性:指對現有系統影響最小的情況下,系統功能可持續擴展或替身的能力。表現在系統基礎設施穩定不需要經常變更,應用之間較少依賴和耦合,對需求變更可以敏捷響應。它是系統架構設計層面的開閉原則(對擴展開放,對修改關閉),架構設計考慮未來功能擴展,當系統增加新功能時,不需要對現有系統的結構和代碼進行修改。


衡量網站架構擴展性好壞的主要標準就是在網站增加新的業務產品時,是否可以實現對現有產品透明無影響,不需要任何改動或者很少改動既有業務功能就可以上線新產品。不同產品之間是否很少耦合,一個產品改動對其他產品無影響,其他產品和功能不需要受牽連進行改動。


伸縮性:所謂網站的伸縮性指是不需要改變網站的軟硬體設計,僅僅通過改變部署的伺服器數量就可以擴大或者縮小網站的服務處理能力。


指系統能夠增加(減少)自身資源規模的方式增強(減少)自己計算處理事務的能力。如果這種增減是成比例的,就被稱作線性伸縮性。在網站架構中,通常指利用集群的方式增加伺服器數量、提高系統的整體事務吞吐能力。


衡量架構伸縮性的主要標準就是可以用多台伺服器構建集群,是否容易向集群中添加新的伺服器。加入新的伺服器後是否可以提供和原來服務無差別的服務、集群中的可容納的總的伺服器數量是否有限制。


12.分布式緩存的一致性hash


具體演算法過程:先構造一個長度為2^32的整數環(這個環被稱作一致性Hash環)根據節點名稱的Hash值(其分布範圍為[0,2^32 - 1])將緩存伺服器階段設置在這個Hash環上。然後根據需要緩存的數據的Key值計算得到Hash值(其分布範圍也同樣為[0,2^32 - 1]),然後在Hash環上順時針查找舉例這個KEY的hash值最近的緩存伺服器節點,完成KEY到伺服器的Hash映射查找。


優化策略:將每台物理伺服器虛擬為一組虛擬緩存伺服器,將虛擬伺服器的Hash值放置在Hash環上,key在換上先找到虛擬伺服器節點,再得到物理伺服器的信息。


一台物理伺服器設置多少個虛擬伺服器節點合適呢?經驗值:150。


13. 網路安全


1. XSS攻擊


跨站點腳本攻擊(Cross Site Script),指黑客通過篡改網頁,注入惡意的HTML腳本,在用戶瀏覽網頁時,控制用戶瀏覽器進行惡意操作的一種攻擊方式。


防範手段:消毒(XSS攻擊者一般都是通過在請求中嵌入惡意腳本大道攻擊的目的,這些腳本是一般用戶輸入中不使用的,如果進行過濾和消毒處理,即對某些html危險字元轉移,如「>」轉譯為「& gt;」);HttpOnly(防止XSS攻擊者竊取Cookie).


2. 注入攻擊:SQL注入和OS注入


SQL防範:預編譯語句PreparedStatement; ORM;避免密碼明文存放;處理好相應的異常。


3. CSRF(Cross Site Request Forgery,跨站點請求偽造)。聽起來與XSS有點相似,事實上兩者區別很大,XSS利用的是站內的信任用戶,而CSRF則是通過偽裝來自受信任用戶的請求來利用受信任的網站。


防範:httpOnly;增加token;通過Referer識別。


4. 文件上傳漏洞


5. DDos攻擊


14. 加密技術


摘要加密:MD5, SHA


對稱加密:DES演算法,RC演算法, AES


非對稱加密:RSA


非對稱加密技術通常用在信息安全傳輸,數字簽名等場合。


HTTPS傳輸中瀏覽器使用的數字證書實質上是經過權威機構認證的非對稱加密的公鑰。


15. 流控(流量控制)


流量丟棄


通過單機內存隊列來進行有限的等待,直接丟棄用戶請求的處理方式顯得簡單而粗暴,並且如果是I/O密集型應用(包括網路I/O和磁碟I/O),瓶頸一般不再CPU和內存。因此,適當的等待,既能夠替身用戶體驗,又能夠提高資源利用率。


通過分布式消息隊列來將用戶的請求非同步化。


最近熱文:


1、邀你參加11期 程序員專場相親活動


2、PHP高工/架構師,18-50K,深圳南山


3、JAVA/Web前端,深圳前海,15-30K


4、如何判斷是否到了該辭職的時候?


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序源 的精彩文章:

創業做一個app究竟要花多少錢?
Nginx反向代理,负载均衡,redis session共享,keepalived高可用
Redis隊列最佳實踐
Ajax保留瀏覽器歷史的兩種解決方案

TAG:程序源 |

您可能感興趣

生蚝清理方法圖解 這些步驟你都知道么
為什麼經常咳嗽?知道這些幫你解決問題
你知道你的臉型嗎?理髮前必看,依照7大臉型挑髮型
整理的魔法只有你知道
這些知識你要知道!
讀完這篇你大概知道《俱舍論》說什麼了
心理文學:你知道臉型跟心理有哪些關係嗎?
磨骨改臉型,你需要知道這些
塌鼻怎麼改善 這些化妝技巧你一定要知道
你知道嗎?你不知道
人臉識別解鎖的手機你知道哪些
紐西蘭總理宣布懷孕,你知道曬魚鉤是哪門子意思嗎?
雙向暗戀是一種什麼體驗?網友:怕你知道又怕你不知道
你了解形體舞蹈嗎 這些好處你要知道
你只知道吃雞絕地求生,卻不知道原型是電影《大逃殺》
想知道怎麼邀約女孩子?這些你必須知道!
這些由好問題產生的好設計你都知道嗎?
你需要知道的這些藥品安全知識
為什麼您知道了很多管理理論,卻做不好管理?
知道長斑的幾大原因後 你知道該如何處理嗎