當前位置:才華齋>職業>系統架構師>

企業應用系統架構優化方法

系統架構師 閱讀(7.85K)

系統優化是一個全面而複雜的工作,很難通過某一方面的提升而獲得很好的效果,也很難在一朝一夕完成系統的全面優化,每個系統都有其特性,需要綜合分析綜合考慮才能獲得比較好的效果。 小編下面為大家整理了一些企業應用系統架構優化的方法,歡迎閱讀參考:

企業應用系統架構優化方法

  1 實現動靜分離

所謂“動靜”分離,就是將靜態資源如圖片、CSS、Js等和動態資源如JSP、Servlet等進行分開的處理,通過使用不同的伺服器,從而加快頁面的響應速度,這是目前網際網路應用最常用的方式之一,但是在企業應用端相對應用較少。

動靜分離至少有兩個方面的好處,一是提高了靜態資源的處理速度,因為應用伺服器處理靜態資源的速度—般都不如專業的web伺服器,第二個好處就是減少了應用伺服器的負擔,應用伺服器專注於處理動態請求,這對系統的穩定執行是有很大的幫助的。

要實現動靜分離,有兩種方式,一種是在載入靜態資源的HTML語言中,將地址指定到不同的IP/域名上,實現徹底的分離。這種方式需要在設計之初進行考慮,並不適合優化專案,因為這種修改會產生很大的工作量。第二種方式是通過分發器,攔截對靜態資源的訪問,將動態資源轉發給後端的應用伺服器,實現動靜分離。這種方式的好處是不需要改動現有的程式碼,僅需要做部署方式故調整,增加web伺服器進行靜態資源的處理。示意圖如下:

目前轉發器比較多,既有老牌的Apache Web Server、有效能卓越的Zeus,也有目前如日中天的Nainx,不同的專案可以按照各自的需求進行選擇。

  2 使用快取技術

快取技術是巨型專案、超大型專案中最重要的技術,範圍也比較廣,從前端的頁面、應用中的資料、資料庫本身等均可以進行快取,每個方面使用的技術也千差萬別。使用快取可以帶來兩個方面的好處,一是快取的資料可以被高速載入,從記憶體中讀取資料比通過資料庫或磁碟讀取具有更好的效率;二是最重要的,減少了資料庫伺服器的壓力,有利於資料庫的穩定,資料庫可以使用更多的資源進行查詢、統計等工作,有利於提高系統的整體執行速度。對於大中型應用而言,應用中的資料快取和資料庫端的快取是應該被考慮的。資料庫端的快取在本文資料庫章節中進行描述,本節描述應用中資料的快取。

要使用快取,首先需要明確快取的內容。一般優化專案不建議做全部資料快取,或者使用記憶體資料庫之類的技術,這種修改工作量巨大,由此帶來的安全性、穩定性、資料的一致性都可能存在較大的隱患。所以,快取的內容需要有所選擇,一般的說,應該根據資料的資料量、被讀取的次數、增加/更新頻率進行選擇。如果資料較少、增加/更新頻率非常低,那麼應該考慮直接快取在應用伺服器端,只有對於重要性較高、讀取次數較多、增加/更新頻率相對適中的'資料,才適合使用獨立快取。   確定快取的內容之後,就應該確定快取的方式。對於緩存於應用伺服器端的資源,一般選擇KEY-ALUE(OBJECT)進行快取。對於獨立快取,其內容也KEY-VALUE的格式進行儲存(如果使用記憶體資料庫實現快取,那麼儲存的就是與資料庫相同的資訊),VALUE可以選擇SON或者Java Object,其中JSON佔用空間較少,讀取的網路流量較少,讀取之後需要進行轉換為Java物件;JavaXCN佔用空間較大,讀取的網路流量會較多,讀取之後無需進行轉化(前提是要求該物件已經系列化),不同系統可以各自特點進行選擇。

對於獨立快取,接下來的工作是選擇快取伺服器,快取伺服器選擇需要具有一定的原則:是否滿足已經確定的快取方式、對作業系統要求如何、穩定性如何、是否支援分散式、是否支援多節點熱備、客戶端(即JAVA呼叫介面)介面是否支援漂移(一個節點崩潰是否能轉移到另外的節點)、客戶端是否高效等等。從目前業界來看,memcached、redis都是應用比較廣泛的快取伺服器。

選擇完快取伺服器之後,就需要對系統的程式碼進行一定的改造。改造的內容就是將通過資料庫讀取的資訊改為從快取伺服器獲得,而對資料的儲存、修改、刪除操作,既要操作資料庫上的資料,也需要對快取伺服器的資訊進行更新,如下圖所示:

由於是對系統的優化,那麼系統中已經具有很多資料且並未進入快取,因此還需要將快取伺服器中的資料進行初始化。有兩種方式來進行,一種方式是直接將資料庫中的資料一次性載入到快取伺服器,另外一種方式是在修改Load資料的方式,先從快取伺服器獲取,如果沒有,則從資料庫獲取,然後同步到快取伺服器上。對於優化專案,建議使用第二種方式。第二種方式一個額外的好處就是當快取伺服器全部不可用時,系統也能提供完整的服務。

  3 使用非同步日誌記錄

對於企業應用而言,對使用者的操作的記錄是很重要的,在系統出現某些問題的時候,可以通過日誌進行資料恢復。一般系統要麼沒有進行記錄,要麼使用資料庫進行同步記錄。這部分資料會比較龐大,少則百萬級,多則數億,並且隨著使用量的增加而逐漸增加。這些表屬於使用率最高的表之一,在這些表上進行經常性資料插入,有可能會變成系統的噩夢。

為了解決這個問題,引入非同步日誌記錄,是較為理想的選擇。通過在web容器中增加過濾器,攔截使用者的請求,然後將使用者的請求和表單資料封裝為JSON格式的資料,採用非同步方式傳送到NoSQL資料庫,需要恢復的時候,通過對JSON資料進行還原。這種方式有如下好處:

1)不需要改動現有程式碼而進行了使用者操作記錄;

2)由於採用非同步模式,幾乎不會增加使用者操作的時間;

3)採用NoSQL+JSON儲存,不用為每一類操作特別設定特定的表結構,修改簡單。

目前的NoSQL資料庫也逐漸顯露頭角,根據DB Engines在今年10月釋出的資料庫排名中,MongoDB的NoSQL伺服器已經躍居第七位,因此NoSQL伺服器目前推薦使用MongoDB。