伺服器效能優化的8種常用方法

2021-09-26 12:35:20 字數 2250 閱讀 5147

1.使用記憶體資料庫

記憶體資料庫,其實就是將資料放在記憶體中直接操作的資料庫。相對於磁碟,記憶體的資料讀寫速度要高出幾個數量級,將資料儲存在記憶體中相比從磁碟上訪問能夠極大地提高應用的效能。記憶體資料庫拋棄了磁碟資料管理的傳統方式,基於全部資料都在記憶體中重新設計了體系結構,並且在資料快取、快速演算法、並行操作方面也進行了相應的改進,所以資料處理速度比傳統資料庫的資料處理速度要快很多。

但是安全性的問題可以說是記憶體資料庫最大的硬傷。因為記憶體本身有掉電丟失的天然缺陷,因此我們在使用記憶體資料庫的時候,通常需要,提前對記憶體上的資料採取一些保護機制,比如備份,記錄日誌,熱備或集群,與磁碟資料庫同步等方式。對於一些重要性不高但是又想要快速響應使用者請求的部分資料可以考慮記憶體資料庫來儲存,同時可以定期把資料固化到磁碟。

2.使用rdd

在大資料雲計算相關領域的一些應用中,spark可以用來加快資料處理速度。spark的核心是rdd,rdd最早**與berkeley實驗室的一篇**《resilient distributed datasets: a fault-tolerant abstraction for in-memory cluster computing》。現有的資料流系統對兩種應用的處理並不高效:一是迭代式演算法,這在圖應用和機器學習領域很常見;二是互動式資料探勘工具。這兩種情況下,將資料儲存在記憶體中能夠極大地提高效能。

3.增加快取

很多web應用是有大量的靜態內容,這些靜態內容主要都是一些小檔案,並且會被頻繁的讀,採用apache以及nginx作為web伺服器。在web訪問量不大的時候,這兩個http伺服器可以說是非常的迅速和高效,如果負載量很大的時候,我們可以採用在前端搭建cache伺服器,將伺服器中的靜態資源檔案快取到作業系統記憶體中直接進行讀操作,因為直接從記憶體讀取資料的速度要遠大於從硬碟讀取。這個其實也是增加記憶體的成本來降低訪問磁碟帶來的時間消耗。

4.使用ssd

除了對記憶體方面的優化,還可以對磁碟這邊進行優化。跟傳統機械硬碟相比,固態硬碟具有快速讀寫、質量輕、能耗低以及體積小等特點。但是ssd的**相比傳統機械硬碟要貴,有條件的可以使用ssd來代替機械硬碟。

5.優化資料庫

大部分的伺服器請求最終都是要落到資料庫中,隨著資料量的增加,資料庫的訪問速度也會越來越慢。想要提公升請求處理速度,必須要對原來的單錶進行動刀了。目前主流的linux伺服器使用的資料庫要屬mysql了,如果我們使用mysql儲存的資料單個表的記錄達到千萬級別的話,查詢速度會很慢的。根據業務上合適的規則對資料庫進行分區分表,可以有效提高資料庫的訪問速度,提公升伺服器的整體效能。另外對於業務上查詢請求,在建表的時候可以根據相關需求設定索引等,以提高查詢速度。

6.選擇合適的io模型

io模型又分為:

(1).阻塞i/o模型:資料沒到達之前,i/o一直阻塞,如果資料到達,則會返回。典型的是recvfrom,一般的預設都是阻塞的。

(2).非阻塞的i/o模型:和阻塞相反,只要不能得到結果的時候,i/o立刻返回。不會阻塞當前執行緒。

io復用模型:也就是自己要學習的部分。多路復用的意思是,將多路訊號合併到一路上進行處理,類似多個管道匯集到乙個管道,與之相反的是多路分解。

io復用模型主要是select,poll,epoll;對乙個io埠,兩次呼叫,兩次返回,比阻塞io並沒有什麼優越性;關鍵是能實現同時對多個io埠進行監聽;函式也會使程序阻塞,但是和阻塞i/o所不同的的,這兩個函式可以同時阻塞多個i/o操作。而且可以同時對多個讀操作,多個寫操作的i/o函式進行檢測,直到有資料可讀或可寫時,才真正呼叫i/o操作函式。

訊號驅動:首先開啟套介面訊號驅動i/o功能,並通過系統呼叫sigaction安裝乙個訊號處理函式。當資料報準備好被讀時,就為該程序生成乙個sigio訊號。隨即可以在訊號處理程式中呼叫recvfrom來讀資料報,井通知主迴圈資料已準備好被處理中。也可以通知主迴圈,讓它來讀資料報。

非同步的io模型:告知核心啟動某個操作,並讓核心在整個操作完成後(包括將資料從核心拷貝到使用者自己的緩衝區)通知我們。這裡並不是說一定要用某個模型,epoll也並不是在所有情況下都比select效能要好的,在選擇的時候還是要結合業務需求來。

7.使用多核處理策略

現在執行伺服器的主流機器配置都是多核cpu的,我們在設計伺服器的時候可以利用多核心的特點,採用多程序或者多執行緒的框架。關於選擇多執行緒還是多程序可以根據實際的需求,結合各自的優缺點進行選擇。對於多執行緒的使用,特別是使用執行緒池的時候可以通過測試不同執行緒池伺服器的效能來設定合適的執行緒池。

8.分布式部署程式

當單機伺服器已經找不到合適的優化點時,我們可以通過分布式部署來提高伺服器的響應能力。優秀的伺服器開發都會為自己的伺服器的擴容,容災提出一些解決方案。個人覺得伺服器設計的時候簡單點比較好,這樣後期擴容的時候會很方便。

8種方法優化MySQL效能

1 選取最適用的字段屬性 另外乙個提高效率的方法是在可能的情況下,應該盡量把字段設定為notnull,這樣在將來執行查詢的時候,資料庫不用去比較null值。對於某些文字字段,例如 省份 或者 性別 我們可以將它們定義為enum型別。因為在mysql中,enum型別被當作數值型資料來處理,而數值型資料...

總結 17 優化伺服器效能

對caffeine的配置我們只要配置乙個快取的最大值和過期時間即可,這是我們在專案中需要用到的。caffeine caffeine.posts.max size 15caffeine.posts.expire seconds 180這是一篇對caffeine進行簡單但是詳細介紹的部落格 在我們的專案...

mysql效能優化 伺服器優化(筆記四)

伺服器的硬體效能直接決定著mysql資料庫的效能,硬體的效能瓶頸,直接決定mysql資料庫的執行速度和效率。需要從以下幾個方面考慮 1 配置較大的記憶體。足夠大的記憶體,是提高mysql資料庫效能的方法之一。記憶體的 io比硬碟快的多,可以增加系統的緩衝區容量,使資料在記憶體停留的時間更長,以減少磁...