網站首頁 語言 會計 互聯網計算機 醫學 學歷 職場 文藝體育 範文
當前位置:學識谷 > 職業師 > 系統架構師

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

欄目: 系統架構師 / 發佈於: / 人氣:6.57K

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

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

  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。