系統架構如何進行性能優化?
對于業務系統的性能優化,我已經系統的講過分析診斷的思路。今天我就說說業務系統性能優化中思考和分析系統性能問題的一些常用方法。
上線前的性能測試有用嗎?有時候大家可能會疑惑,為什么我們的系統在再次上線之前已經測試過了,為什么上線之后還是會出現系統性能問題。那么我們可以在上線之前考慮一下我們性能測試中可能存在的一些地方,這樣可以不能真正模擬生產環境,特別是:
1.硬件能否完全模擬真實環境?最佳性能測試通常直接在構建的生產環境中進行。
2.數據量能否模擬實際場景?真實的場景往往是很多業務表已經積累了大量的數據,而不是空表。
3.并發可以模擬真實場景嗎?一個是需要記錄復雜的業務場景,一個是并發量大的時候需要多臺測壓機。
其實我們做性能測試的時候很難做到以上幾點,所以完全模擬真實的生產環境是相當困難的,這也導致很多性能問題在真實上線之后才被發現。
系統本身的橫向彈性擴展是否完全解決了性能問題?第二點,也是我們經常講的,就是在設計我們業務系統的架構的時候,特別是面對非功能性需求的時候,會講系統本身的數據庫,中間件采用集群技術,可以實現靈活的橫向擴展。那么這種彈性水平擴展真的解決了性能問題嗎?
事實上,我們看到,對于數據庫來說,往往很難實現無限的彈性水平擴展,即使對于OracleRAC集群,也往往高達單點性能的2到3倍。對于應用集群來說,往往可以實現靈活的橫向擴展,目前的技術已經比較成熟。
當中間件可以充分彈性擴展的時候,可能還是會出現性能問題,也就是隨著我們系統的運行,以及業務數據的不斷積累和增值。其實你可以看到非并發狀態下的單用戶訪問是很慢的,并不是并發滿了。因此,也就是我們常說的給分,即:
當單點訪問性能正常時,集群可以擴展以應對大并發狀態下的同時訪問。
當單點訪問本身性能有問題時,首先要優化單節點訪問的性能。
商業系統性能診斷的分類
對于業務系統性能診斷,從靜態的角度來看,可以考慮以下三個方面進行分類。
操作系統和存儲中間件層(包括數據庫和應用服務器中間件)和軟件層(包括數據庫SQL和存儲過程、邏輯層、前端表示層等。),那么就是某個業務系統的應用功能有問題。當然,我們也可以從動態層面看一個實際的應用請求從被調用到現在經歷了哪些代碼和硬件基礎設施,通過分段的方法定位和查詢問題。
比如我們經常看到的是查詢功能。如果有問題,第一件事就是弄清楚這個查詢函數對應的SQL語句在后臺是不是很慢。如果SQL本身很慢,那么就有必要對SQL語句進行優化。如果SQL本身快但查詢慢,就要看是前端性能問題還是集群問題。
軟件代碼的問題通常是一個性能問題。;不可忽視。對于業務系統的性能問題,我們往往會想到擴展數據庫的硬件性能,比如擴展CPU和內存,擴展集群,但實際上我們可以看到很多應用的性能問題并不是硬件性能造成的,而是軟件代碼性能造成的。我在以前的博客文章中也談到了軟件代碼的常見性能問題,通常包括。
1.初始化大型結構對象、數據庫連接等。在循環中。
2.資源未釋放等導致的內存泄漏
3.基于場景需求的緩存并不能帶來適度的性能提升。
4.長周期事務消耗資源。
5.在處理某個業務場景或問題時,沒有選擇最優的數據結構或算法。
以上是一些常見的軟件代碼性能問題,這些往往需要通過我們的代碼評審或者代碼復查來發現。因此,要想做全面的性能優化,就必須考察軟件代碼的性能問題。
一般有兩種途徑可以通過IT資源監控或APM應用工具發現性能問題。一是通過我們的IT資源監控、APM性能監控和預警提前發現性能問題,二是通過業務用戶在使用過程中的反饋發現性能問題。
隨著D
什么是遠程桌面會話主機(RDSessionHost)?
RD會話主機(也稱為RDS主機)是一臺服務器計算機,用于承載要遠程訪問的應用程序和桌面。在View部署中,RDS主機是安裝了Microsoft遠程桌面服務角色、Microsoft遠程桌面會話主機服務和ViewAgent的Windows服務器。