對高併發系統架構的認識 1

2022-07-20 17:30:16 字數 1685 閱讀 7837

對於乙個需要處理高併發的系統而言,可以從多個層面去解決這個問題。

1、資料庫系統:資料庫系統可以採取集群策略以保證某台資料庫伺服器的宕機不會影響整個系統,並且通過負載均衡策略來降低每一台資料庫伺服器的壓力(當然用一台伺服器應付一般而言沒啥問題,找一台當備機放著應付宕機就行,如果一台應付不了,那麼再加一台,但是備機還是要的,至少一台),另外採取讀/寫分離的方法降低資料庫負載,再加上分庫和分表進一步降低資料庫負載,從而可以從容地應對高併發問題。當然成本會比較高,畢竟要這麼多伺服器。

2、分布式快取系統:建立分布式快取系統是至關重要的,所有的讀寫都先進入快取系統,然後由快取系統來安排從資料庫系統/源伺服器的讀寫。比如讀的話,要是找不到,則把資料從資料庫中讀出放入快取系統裡(同樣的,把頁面從源伺服器中獲取並儲存在快取伺服器中),再讀取給客戶端;寫的話,則先寫入快取,由快取系統把資料非同步提交到訊息佇列中,然後寫入資料庫裡。快取分為硬碟快取和記憶體快取,硬碟快取更多地用來快取頁面和頁面資源例如多**資源,而記憶體快取更多地用來快取資料庫的資料和應用中的一些狀態。硬碟快取有squid,記憶體快取有memcached,微軟在.net framework 4.0推了個velocity也是記憶體快取。

3、監控系統:這麼多伺服器和系統,總歸是需要監控的,不然出了問題排查起來會非常麻煩,所以上述系統在開發時也要考慮到監控這一塊,做好日誌記錄,然後配合監控系統可以一下子查到問題根源。

4、前端系統:和資料庫系統一樣可以採用伺服器集群和負載均衡,可以把各個服務細分然後註冊到服務中心再分別部署到不同的伺服器上即採用分布式服務的方式,還可以使用多執行緒,另外為了更好地使用者體驗,可以多用非同步方式和客戶端操作來顯示資料或者執行操作,ajax,js等等可以派不少用處,此外,還可以使用網頁靜態化(這樣不但降低了開銷還會提高網頁被搜尋到的概率,.net有urlrewrite可以做到,只需要引入dll並註冊然後設定rewrite的規則即可),還有等多**資源單獨設定伺服器與頁面分離,使用映象**或者cdn技術(content delivery network,智慧型映象**+快取技術,讓使用者可以訪問自己最近的映象**的快取伺服器中的快取頁面)

5、伺服器cpu和io的平衡:對於所有的伺服器,都需要保證它們的cpu和io保持平衡,如果失衡,需要查詢原因,更改部署和配置以達到平衡。

對於一般的小型伺服器,最佳執行緒數=cpu核的個數*2 + 2,當然這個只是經驗之談,實際公式比較複雜,為最佳執行緒數=((執行緒等待時間+執行緒cpu時間)/執行緒cpu時間) * cpu核的數量。

memcached的儲存結構是把記憶體劃分成不同尺寸的記憶體塊,並建立多個相同尺寸的記憶體塊作為乙個記憶體塊群,儲存的時候根據資料的實際大小選用最合適尺寸的記憶體塊進行儲存,這樣子的缺點就是如果資料大小不是和記憶體塊大小一致就會浪費一些記憶體,所以再設定記憶體塊大小的時候要確保不同的尺寸之間的大小差距不要太大。

memcached不會刪除儲存的資料,它是在接收到獲取命令時先檢查下資料是否過期,如果過期就返回沒有資料,然後標誌下這個記憶體塊可以被重新儲存資料,當記憶體都被使用需要釋放資料時,它會根據lru(least recently used)機制來釋放記憶體塊。

memcached不支援分布式,也就是說不同伺服器上的memcached不會互相通訊,所以對於使用多台memcached伺服器,需要客戶程式來把需要儲存的資料分發到不同的memcached伺服器上,分發的方法就是用key通過乙個分發策略來確定需要傳送的伺服器,然後進行傳送儲存,獲取時也用key通過相同的分發策略確定伺服器並獲取。如果某台memcached伺服器發生故障,可以通過重新分配伺服器的方法把資料儲存到新的伺服器上。

高併發高負載系統架構

一 為什麼要進行高併發和高負載的研究 1 產品發展的需要 2 公司發展的需要 3 當前形式決定的 二 高併發和高負載的約束條件 1 硬體 2 部署 3 作業系統 4 web 伺服器 5 php 6 mysql 7 測試 三 解決之道 硬體篇 處理能力的提公升 部署多顆cpu,選擇多核心 具備更高運算...

高併發高負載系統架構

首先呢,我羅列一下文章的目錄,讓大家有個整體輪廓的了解!1 為什麼要進行高併發和高負載的研究 2 高併發和高負載的約束條件 3 解決之道 硬體篇 4 解決之道 部署篇 5 解決之道 環境篇 6 解決之道 siteengine篇 7 解決之道 測試篇 8 結尾 1 為什麼要進行高併發和高負載的研究 1...

PHP高併發高負載系統架構

處理能力的提公升最直接的反應在於web請求的處理效率和php程式的執行效率。記憶體頻寬與容量 更大的記憶體頻寬和容量 記憶體頻寬與容量的提公升最直接的反應在於應對資料庫大量的資料交換。磁碟搜尋與i o能力 選擇更高的轉速 更大的硬碟快取 元件磁碟陣列 raid 磁碟搜尋與i o能力的提公升最直接反應...