1. I/O優化
- 增加緩存,減少磁盤的訪問次數。
- 優化磁盤的管理系統,設計最優的磁盤方式策略,以及磁盤的尋址策略,這是在底層操作系統層面考慮的。
- 設計合理的磁盤存儲數據塊,以及訪問這些數據庫的策略,這是在應用層面考慮的。例如,我們可以給存放的數據設計索引,通過尋址索引來加快和減少磁盤的訪問量,還可以採用異步和非阻塞的方式加快磁盤的訪問速度。
- 應用合理的RAID策略提升磁盤I/O。
2. Web前端調優
- 減少網絡交互的次數(多次請求合併)
- 減少網絡傳輸數據量的大小(壓縮)
- 儘量減少編碼(儘量提前將字符轉化爲字節,或者減少從字符到字節的轉化過程。)
- 使用瀏覽器緩存
- 減少Cookie傳輸
- 合理佈局頁面
- 使用頁面壓縮
- 延遲加載頁面
- CSS在最上面,JS在最下面
- CDN
- 反向代理
- 頁面靜態化
- 異地部署
3. 冪等性設計
- 有些服務天然具有冪等性,比如講用戶性別設置爲男性,不管設置多少次,結果都一樣。但是對轉賬交易等操作,問題就會比較複雜,需要通過交易編號等信息進行服務調用有效性校驗,只有有效的操作才能繼續執行。
- 注:冪等性是系統的接口對外一種承諾(而不是實現), 承諾只要調用接口成功, 外部多次調用對系統的影響是一致的. 聲明爲冪等的接口會認爲外部調用失敗是常態, 並且失敗之後必然會有重試.
4. 失效轉移
- 若數據服務器集羣中任何一臺服務器宕機,那麼應用程序針對這臺服務器的所有讀寫操作都需要重新路由到其他服務器,保證數據訪問不會失敗,這個過程叫失效轉移。
- 失效轉移包括:失效確認(心跳檢測和應用程序訪問失敗報告)、訪問轉移、數據恢復。
- 失效轉移保證當一個數據副本不可訪問時,可以快速切換訪問數據的其他副本,保證系統可用。
5. 性能優化
根據網站分層架構,性能優化可分爲:web前端性能優化、應用服務器性能優化、存儲服務器性能優化。
- Web前端性能優化 瀏覽器訪問優化:減少http請求;使用瀏覽器緩存;啓用壓縮;css放在頁面最上面、javaScript放在頁面最下面;減少Cookie傳輸 CDN加速 反向代理
- 應用服務器性能優化 :分佈式緩存(Redis等) 異步操作(消息隊列) 使用集羣(負載均衡) 代碼優化
- 存儲性能優化 :機械硬盤vs固態硬盤 B+樹 vs LSM樹 RAID vs HDFS
6. 代碼優化
多線程(Q:怎麼確保線程安全?無鎖機制有哪些?)
資源複用(單例模式,連接池,線程池)
數據結構
垃圾回收
7. 負載均衡
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地址,再將修改後的數據幀在與服務器組的局域網上發送。
8. 緩存
緩存就是將數據存放在距離計算最近的位置以加快處理速度。緩存是改善軟件性能的第一手段,現在CPU越來越快的一個重要因素就是使用了更多的緩存,在複雜的軟件設計中,緩存幾乎無處不在。大型網站架構設計在很多方面都使用了緩存設計。
CDN: 及內容分發網絡,部署在距離終端用戶最近的網絡服務商,用戶的網絡請求總是先到達他的網絡服務商哪裏,在這裏緩存網站的一些靜態資源(較少變化的數據),可以就近以最快速度返回給用戶,如視頻網站和門戶網站會將用戶訪問量大的熱點內容緩存在CDN中。
反向代理:反向代理屬於網站前端架構的一部分,部署在網站的前端,當用戶請求到達網站的數據中心時,最先訪問到的就是反向代理服務器,這裏緩存網站的靜態資源,無需將請求繼續轉發給應用服務器就能返回給用戶。
本地緩存:在應用服務器本地緩存着熱點數據,應用程序可以在本機內存中直接訪問數據,而無需訪問數據庫。
分佈式緩存:大型網站的數據量非常龐大,即使只緩存一小部分,需要的內存空間也不是單機能承受的,所以除了本地緩存,還需要分佈式緩存,將數據緩存在一個專門的分佈式緩存集羣中,應用程序通過網絡通信訪問緩存數據。
使用緩存有兩個前提條件,一是數據訪問熱點不均衡,某些數據會被更頻繁的訪問,這些數據應該放在緩存中;二是數據在某個時間段內有效,不會很快過期,否則緩存的數據就會因已經失效而產生髒讀,影響結果的正確性。網站應用中,緩存處理可以加快數據訪問速度,還可以減輕後端應用和數據存儲的負載壓力,這一點對網站數據庫架構至關重要,網站數據庫幾乎都是按照有緩存的前提進行負載能力設計的。
9. 負載均衡算法
輪詢 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中標識)負載均衡對數據流進行分配。
規則模式算法:針對不同的數據流設置導向規則,用戶可自行
參考文章:簡單瞭解一些分佈式術語,總結給大家!