設計自己的高併發架構

2021-07-09 14:37:53 字數 1941 閱讀 7801

在網際網路行業,未來的趨勢就是高併發分布式系統。

作為一名網際網路開發人員,一定要把握發展趨勢,並沿著正確的路線提公升自己。我也是剛剛開始了解什麼是高併發、分布式的系統,怎樣進行這種系統的架構設計。我覺得學習的思路應該是:根據了解到的內容,參考已經存在的方案,自己思考,並動手設計一套自己的系統架構,哪怕十分簡陋,但一定要了解每一部分設計或者優化的目的、原則、思路、具體方法和使用到的技術,然後再一步步完善其中的每一部分,不斷加入最新的方案和技術,並在實際開發中不斷實踐自己的方案,最終形成自己最優的架構設計。

下面是我參考了很多架構設計方案後總結出的系統優化策略。

搭建高併發系統,或針對系統進行高併發優化,需要明確系統高併發出現的時間規律,地域(空間)規律。得到使用者流量、區域分布、請求特點、應用服務瓶頸點、伺服器的效能指標等等,根據這些因素有針對性地對業務流程本身、系統架構進行優化。

優化的原則:應該有靈活的擴充套件性、盡量低的成本、高效能。

優化的思路(出發點):

負載均衡系統

反向**系統

web伺服器系統

快取系統

分布式儲存系統

資料庫集群系統

非同步計算策略

在架構中加入負載均衡系統,

負載均衡系統可以使用的位置:

可以使用在web應用服務之前,也可用在資料庫集群前(如:在mysql集群中,使用lvs將資料庫請求分散到各個從伺服器)。

實現方式包括:硬體負載均衡、軟體負載均衡。

硬體負載均衡效率高,**貴,如f5等;

軟體負載均衡系統**低或免費,效率較硬體低,但一般夠用,如lvs,nginx也有負載均衡功能。

在系統架構中加入反向**。

作用一:將請求對映到對應服務的伺服器。首先需要劃分業務,並統一約定和規範各個業務對應服務的uri,然後通過反向**伺服器將請求對映到各服務所在的伺服器。這樣可以避免在業務集中的情況下出現的單一功能發生瓶頸導致其他功能受到影響。(系統設計時,各業務服務應該按功能或模組進行拆分,便於進行橫向分布式擴充套件)

作用二:提高系統吞吐量。資料在網路中傳輸很耗時,反向**伺服器可以使應用伺服器不必再直接和客戶端進行連線,阻塞程序等待資料接收完成,而是在反向**伺服器將資料緩衝完成後一次性快速傳輸給應用伺服器。

作用三:對靜態資源不必通過應用伺服器,直接找到並返回,減輕應用伺服器壓力。

目前普遍使用nginx作為反向**伺服器,它還是高效能http伺服器,同時可以進行負載均衡。

1.前端展示層:

動態頁面靜態化,可通過cms系統對非動態資訊頁面進行靜態化(靜態化實際就是用程式將html頁面的**輸出到乙個html檔案中,就成了靜態頁面);

靜態化後的頁面同樣可以通過cdn加速,或存入快取。

適用於更新不頻繁的內容。

2.服務端程式:

使用快取減少對資料庫的直接操作,減輕查詢時的i/o壓力

按照存放位置不同,可分為客戶端快取、服務端快取。

1.客戶端快取(主要是快取頁面):

2.服務端快取:

快取實現手段:可對頁面整體快取,也可以快取片段,如esi cache。使用cdn也算是一種快取方式。

快取框架:ehcache

nosql:redis、memcache

使用快取還應該使快取命中率更高。

資料庫的高效能方案有:優化當前資料庫,和建立集群。

當資料庫開始出現效能下降的時候,最優先的方案是:優化當前資料庫的效能,而非立刻建立集群。應該保持簡單原則,畢竟會增加很大複雜度。

1.當前資料庫優化策略:

2.建立集群:

3.mysql集群搭建方案:

這裡沒有具體實施操作的說明,只是以盡量精準、全面的描述出我現在所理解的優化方案,各部分按照從頂層到低層的順序介紹。當然,這只能是我的1.0架構方案,還需要不斷完善。先分享給大家,希望能共同進步!

高併發系統設計 軟體架構

單體架構 單體架構一般用於專案初期,方便盡早的將專案搭建起來。主要有以下特點 開發簡單,和專案集中式管理 運維簡單,節省維護成本 排查問題簡單,方便問題定位 當專案規模變大時,也會遇到以下問題 容易形成瓶頸,當所有功能處於乙個程式中,請求量變大後,容易占用過多資源 管理麻煩,開發人員變多後,容易形成...

架構修煉 10 高併發設計

1.吞吐量throughput 2.響應延遲response delay 1.縮短響應時間 2.提高系統併發數 提公升吞吐量 3.系統處理合理狀態 機器利用率 y座標 綠色機器利用率,紫色併發數,藍色 響應時長 響應時間和併發資料在左邊線位置達到優化目標,之後利用率60 提公升非常緩慢,當超過右側線...

架構設計原則 高併發

架構設計原則 高併發 高併發設計可以從以下幾方面考慮 1.無狀態 無狀態的應用容易進行水平擴充套件。實際常用 應用無狀態,配置檔案有狀態,例如,不同的機房讀取不同的配置檔案,通過配置中心指定。2.拆分 拆分維度 3.服務化 服務化需要考慮自動服務註冊,和服務發現,還有服務的分組 隔離,例如,有的系統...