理解大型分散式網站你必須知道這些概念
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重定向負載均衡
當用戶發來請求的時候,Web伺服器通過修改HTTP響應頭中的Location標記來返回一個新的url,然後瀏覽器再繼續請求這個新url,實際上就是頁面重定向。通過重定向,來達到“負載均衡”的目標。例如,我們在下載PHP原始碼包的時候,點選下載連結時,為了解決不同國家和地域下載速度的問題,它會返回一個離我們近的下載地址。重定向的HTTP返回碼是302。
優點:比較簡單。
缺點:瀏覽器需要兩次請求伺服器才能完成一次訪問,效能較差。重定向服務自身的處理能力有可能成為瓶頸,整個叢集的伸縮性國模有限;使用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和記憶體。因此,適當的等待,既能夠替身使用者體驗,又能夠提高資源利用率。
-
通過分散式訊息佇列來將使用者的請求非同步化。
參考資料
2. 《大型網站技術架構——核心原理與技術分析》李智慧 著。
4. 《大型分散式網站架構設計與實現》陳康賢 著。
相關推薦
理解大型分散式網站你必須知道這些概念
1. I/O優化 增加快取,減少磁碟的訪問次數。 優化磁碟的管理系統,設計最優的磁碟方式策略,以及磁碟的定址策略,這是在底層作業系統層面考慮的。 設計合理的磁碟儲存資料塊,以及訪問這些資料庫的策略,這是在應用層面考慮的。例如,我們可以給存放的資料設計索
理解大型分散式網站你應該知道這些概念
I/O優化 增加快取,減少磁碟的訪問次數。 優化磁碟的管理系統,設計最優的磁碟方式策略,以及磁碟的定址策略,這是在底層作業系統層面考慮的。 設計合理的磁碟儲存資料塊,以及訪問這些資料庫的策略,這是在應用層面考慮的。例如,我們可以給存放的資料設計索引,通過定址索引來加快和減少磁碟的訪問量,
大數據開發如何入門你必須知道這些
oop 小學生 影響 正在 大數據學習 ado src 初學 發的 大數據開發如何入門你必須知道這些 昨天和三個學計算機專業的學生聊天時聊到了大數據開發方面的話題,他們三個人中,有兩個已經進入企業開始工作,另外一個還是大二學生,但已經開設了自己的工作室。他們都是從事程序開發
微服務架構下處理分散式事務,你必須知道的事兒
根據微服務架構的鼻祖 Martin Fowler 的忠告,微服務架構中應當儘量避免分散式事務。然而,在某些領域,分散式事務如同宿命中的對手無法避免。 在工程領域,分散式事務的討論主要聚焦於強一致性和最終一致性的解決方案。 典型方案包括: 兩階段提交(2PC, Two-phase Commit)方案
阿里大牛手把手教你構建一個高效能、高可用的大型分散式網站
大型分散式網站架構技術 大型網站的特點 大型網站一般有如下特點: 1.使用者多,分佈廣泛 2.大流量,高併發 3.海量資料,服
【深入閱讀】關於LLVM,這些東西你必須知道!
只要你和程式碼打交道,瞭解編譯器的工作流程和原理定會讓你受益無窮,無論是分析程式,還是基於它寫自己的外掛,甚至學習一門全新的語音。通過本文,將帶你瞭解LLVM,並使用LLVM來完成一些有意思的事情。 一、什麼是LLVM? The LLVM Project i
手把手教你構建一個高效能、高可用的大型分散式網站
本文是學習大型分散式網站架構的技術總結,對構建一個高效能、高可用、可伸縮及可擴充套件的分散式網站進行了概要性描述,並給出一個架構參考。 文中一部分為讀書筆記,一部分是個人經驗總結,對大型分散式網站架構有較好的參考價值。 大型分散式網站架構技術 大型網站的特點 大型
分散式事務 ( DTS ) 你必須知道的事兒
目前雲端計算、大資料、網際網路領域的大部分系統都採用了SOA、微服務化的架構。一個涉及端到端全鏈路的業務操作往往會由多個服務和資料庫例項共同完成。因此,在一致性要求較高的業務場景中,如何保證多個服務之間RPC呼叫後的資料一致將成為關鍵點。 一、分散式系統/SO
前端開發的你,必須知道這些前端的坑
前端是一個相對比較新的行業。但在這幾年期間,隨著W3C標準的不斷更新以及node.js的興起,基於node.js一系列的工具和諸多
C#刨根究底:《你必須知道的.NET》讀書筆記系列
wid 最終 table bsp 圖解 萬能 展望 應用 light 一、此書到底何方神聖? 《你必須知道的.NET》來自於微軟MVP—王濤(網名:AnyTao,博客園大牛之一,其博客地址為:http://anytao.cnblogs.com/)的最新技術心得和感悟,
《你必須知道的.NET》讀書筆記一:小OO有大智慧
實現 職責 可靠性 基本 code cfile 生存 最好 min() 此篇已收錄至《你必須知道的.Net》讀書筆記目錄貼,點擊訪問該目錄可以獲取更多內容。 一、對象 (1)出生:系統首先會在內存中分配一定的存儲空間,然後初始化其附加成員,調用構造函數執行初始化,這
你必須知道的改變中國人工智能命運的20個人
.com 翻譯 智能 團隊 自己 世界 榜單 中心 我們 近日,福布斯發表一篇名為《20個推動人工智能改革的科技領導者》的署名文章,介紹了中國頂尖科技公司中的20位致力於人工智能的重要人物,並認為在人工智能領域中國正在挑戰美國的領導地位。在福布斯列出的20位重要人物中,有1
為什麽要開展等級保護測評?你必須知道!
等保測評 隨著我國信息技術的快速發展,為維護國家安全和社會穩定,維護信息網絡安全,國務院於1994年頒布了《中華人民共和國計算機信息系統安全保護條例》(國務院147號令)。條例中規定:我國的“計算機信息系統實行安全等級保護。 2003年**辦公廳、國務院辦公廳轉發的《國家信息化領導
【微服務幹貨系列】使用微服務架構之前,你必須知道的
ces pop 負載 average led dsm 部署 通用 works 正如敏捷之父MartinFowler所說的那樣,單體架構和微服務並非簡單的二選一,兩者都是模糊的定義。這就意味著大多數系統都將在一個模糊的邊界區域。非常多開發團隊已經認識到微服務架構比
HTML5你必須知道的28個新特性
html5你必須知道的28個新特性HTML5有很多的新功能.新代碼.非常不錯.現在總結一下.僅供參考1. 新的Doctype盡管使用<!DOCTYPE html>,即使瀏覽器不懂這句話也會按照標準模式去渲染2. Figure元素 用<figure>和<figcaption>
【火的不行的前端你必須知道】一、淺談node.js
images 事件驅動 webp bsp 打包 前端框架 公司 org 詳細分析 引子: 現在都2017年了,在這個前端盛行的年頭,在不懂一些前端流行的技術就落伍了,恰好公司H5端項目也是讓這個方向去替換。 技術選型: 這裏主要是簡單說一下,後面會分章節詳細分
Unity開發-你必須知道的優化建議
instant material asp renderer setting .text 屏幕 格式 coord 轉載;http://blog.csdn.net/leonwei/article/details/18042603 最近研究U3D開發,個人認為,精通一種新
學習算法你必須知道的一些基礎知識(文末福利)
深度學習 機器學習 算法 點擊標題下「異步社區」可快速關註機器學習是解決很多文本任務的基本工具,本文自然會花不少篇幅來介紹機器學習。要想搞明白什麽是機器學習,一定要知道一些概率論和信息論的基本知識,本文就簡單回顧一下這些知識。1.1 概率論概率就是描述一個事件發生的可能性。我們生活中絕大多數事件都
你必須知道的EF知識和經驗
部分 就是 serve 存在 效率 epo 命名空間 omap sql查詢 推薦MiniProfiler插件 數據準備 foreach循環的陷進 AutoMapper工具 聯表查詢統計 性能提升之AsNonUnicode 性能提升之AsNoTracking 多字段
關於建站你必須知道的六個常識
fun 分享圖片 選擇 不能 軟件 索引 轉化率 網民 aid 你以為搭建好網站就可以高枕無憂了嗎?其實不是。建站就和養花是一樣的模式,是需要精心地去維護,才能夠得到想要的效果。 如果建設好網站之後不管不顧,那麽這個網站就是一個死站,產生不了一絲一毫的效益,就變得毫無存在的