系統性能優化常用手段

1. 儘量減少 HTTP 請求
常用方法:
a)將多個js(多個css)文件合成一個
b)將多個圖片合成一張,利用css的偏移來控制顯示
2. 減少文件大小
精簡js和css的文件大小,比如去除空格、換行符、註釋,將長變量名、函數名用短字符替換等等。提高網絡帶寬利用率。
推薦兩個在線精簡工具
js:http://shrinksafe.dojotoolkit.org/
css:http://www.cssdrive.com/index.php/main/csscompressor
3. web組件化
爲js、css、image等配置獨立子域名,頁面模板只負責整體框架,當瀏覽器在渲染頁面時,利用多線程原理,批量並行下載文件。
4. 瀏覽器緩存
style和image等文件一般很少變化,服務器通常會爲這些文件打上標記(最後修改時間或Etag),下次向服務器請求該文件時,通過標記判斷,如果本地版本是最新的,返回304,此時瀏覽器會使用本地緩存文件,避免重新下載。
5. 應用拆分
1688是2009年纔開始做在線交易的,開始時,下單、付款、發貨、確認收貨、退款等業務都是在一個應用。隨着業務不斷擴展,應用開始迅速膨脹,開發和維護效率都很差。在10年時候,開始將下單部分拆分出來,形成一個訂購中心,目前已經支持七八種下單業務,極大的提升了系統的可擴展性、靈活性,後期也可以很方便地根據下單業務特色重構系統。
6. 業務流程優化
這個需要結合具體業務來看,以下單爲例。下單包含流程很多,比如生成訂單數據、更新庫存、更新收貨地址、生成快照,發郵件旺旺消息,超時記錄。將其中一些不是特別重要的業務抽取出來,藉助消息機制異步處理。有效地縮短了主流程響應時間,提升用戶體驗
7. 數據庫優化
a)建立正確的主鍵、外鍵、索引
b)讀寫分離。業務數據分離,比如訂單、商品、評價、成交記錄等都是存於不同數據庫中,分開管理
c)分庫、分表。要選擇合適的分表id
d)儘量單表查詢,避免多表組合查詢。否則日後分庫分表會帶來很多麻煩
e)表字段設計合理,最好冗餘一個attribute_cc字段,更新時數值自增,防止併發帶來髒數據
f)保證事務簡短以及減少不必要的鎖機制
8.多線程技術
充分發揮多核CPU的硬件資源優勢,多線程運行任務。熟悉java.util.concurrent併發包的使用,如:Executor、ExecutorService、ThreadPoolExecutor、BlockingQueue、CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentHashMap、Callable、Future、CountDownLatch、CyclicBarrier、Semaphore、ReentrantLock、AtomicInteger
9. 數據緩存
緩存常用的,不易變化的數據。不過要考慮緩存的命中率、過期時間及合理的失效機制,合理的引入緩存可以極大提升系統的性能。
10. 考慮分佈式應用
對於高吞吐量的業務,可以考慮水平擴展,多臺服務器組成一個集羣,利用負載均衡分攤流量,削減對單臺服務器的集中訪問壓力。同時最好增加流控機制,對單臺服務器的QPS設置最高流量閥值,保護服務器不被擊垮。
11. 分離原則
評估業務消耗類型,如:耗內存、cpu、帶寬還是IO。比如做在線交易時,有塊訂單導出業務,就比較耗帶寬和io,嚴重影響同應用的其它業務的性能,最後選擇將這塊業務剝離出來,以任務形式單獨配置一臺服務器。
12. 建立服務化中心,提供RPC遠程調用服務,將業務收擾,便於維護。調用方只需要按照接口規範調用即可,不用關心具體的業務細節。
13. 異步加載
很多業務並不會要求一次性把所有的數據展示出來,這樣非常耗資源,體驗不好。可以考慮採用ajax異步形式。
14. CDN(Content Delivery Network, 內容分發網絡 )
用戶離服務器的遠近以及不同運營商之間的數據傳輸對響應時間也有很大影響。從用戶角度看,把內容部署到多個地理位置分散的服務器上將有效提高頁面加載速度。 
15. 引入nosql
關係型數據庫一直是數據持久化的唯一選擇,過去很長一段時間內,關係數據庫的健壯性已經在多數應用程序中得到證實。隨着應用程序規模的不斷變大,我們需要存儲更多的數據,然而傳統的關係型數據庫在集羣支持上不是特別友好,而且性價比也不是很高,於是適用於集羣的NoSql存儲應運而生,nosql弱結構化,不會嚴格限制數據結構的類型。
16. 頁面靜態化
比如淘寶的寶貝詳情頁面,雖然信息量很大,但大部分的內容都是不變的,除了少部分(運費、庫存、折扣、優惠、銷量、評價)是動態的,可以考慮將絕大部分不變的內容生成一個靜態的html,緩存靜態內容,其中動態內容採用異步加載的方式,動態更新。最終 90%靜態內容 + 10%動態內容 = 可用頁面
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章