大型分布式系統的優化解決方案

2021-08-09 03:49:29 字數 3644 閱讀 9488

1、i/o優化

1、增加快取,減少磁碟的訪問次數。

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

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

4、應用合理的raid策略提公升磁碟i/o。

2、web前端調優

1、減少網路互動的次數(多次請求合併)

2、減少網路傳輸資料量的大小(壓縮)

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

4、使用瀏覽器快取

5、減少cookie傳輸

6、合理布局頁面

7、使用頁面壓縮

8、延遲載入頁面

9、css在最上面,js在最下面

10、cdn

11、反向**

12、頁面靜態化

13、異地部署

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

拒絕服務和關閉服務

4、冪等性設計

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

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

5、失效轉移

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

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

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

6、效能優化

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

1、web前端效能優化

2、應用伺服器效能優化

3、儲存效能優化

機械硬碟vs固態硬碟

b+樹 vs lsm樹

raid vs hdfs

7、**優化

8、負載均衡

9、快取

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

反向**:反向**屬於**前端架構的一部分,部署在**的前端,當使用者請求到達**的資料中心時,最先訪問到的就是反向**伺服器,這裡快取**的靜態資源,無需將請求繼續**給應用伺服器就能返回給使用者。

本地快取:在應用伺服器本地快取著熱點資料,應用程式可以在本機記憶體中直接訪問資料,而無需訪問資料庫。

分布式快取:大型**的資料量非常龐大,即使只快取一小部分,需要的記憶體空間也不是單機能承受的,所以除了本地快取,還需要分布式快取,將資料快取在乙個專門的分布式快取集群中,應用程式通過網路通訊訪問快取資料。

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

10、負載均衡演算法

其他演算法

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、加密技術

1、摘要加密:md5, sha

2、對稱加密:des演算法,rc演算法, aes

3、非對稱加密:rsa

4、非對稱加密技術通常用在資訊保安傳輸,數字簽名等場合。

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

15. 流控(流量控制)

1、流量丟棄

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

3、通過分布式訊息佇列來將使用者的請求非同步化。

分布式系統事務解決方案選擇

解決方案一 使用 alibaba seata 可以來解決 但是該種解決方案 不適合 大併發情況下,會影響效能,使用於管理後台各個微服務呼叫的增刪改查的事務管理 解決方案二 使用 mq 來解決,保證資料的最終一致性 如 在電商系統中,當下乙個訂單後,要扣減庫存,我們先遠端呼叫 庫存介面,有可能會出現,...

分布式系統session同步解決方案

session的概念 當瀏覽器端第一次訪問web server時,server端會呼叫getsession 方法建立session物件,經過特殊演算法計算出sessionid,儲存在伺服器端,同時response給瀏覽器 第二次在來請求時會在request header中帶著sessionid訪問伺...

分布式事務解決方案

一 結合mq訊息中介軟體實現的可靠訊息最終一致性 二 tcc補償性事務解決 三 最大努力通知型方案 第一種方案 可靠訊息最終一致性,需要業務系統結合mq訊息中介軟體實現,在實現過程中需要保證訊息的成功傳送及成功消費。即需要通過業務系統控制mq的訊息狀態 第二種方案 tcc補償性,分為三個階段tryi...