淺談服務器壓力解決方案


優化服務器性能,從后往前說歸根結底不外乎以前幾種情況:

  1. 優化數據庫
  2. 優化代碼
  3. 使用靜態數據

下面就分別做下介紹。

一、數據庫優化

  1. 盡可能的使用SP,而不是讓sql語句裸奔;
  2. 表結構設計要合理,起碼要遵守三范式;
    數據庫設計三范式:
    第一范式:原子性。表中不能套表
    第二范式:有主鍵
    第三范式:引用通過主鍵.
  3. 合理地設計索引,正確地使用索引;
  4. 對於超極大表(千萬級別)最好采用分區表的方式存放,Oralce、SqlServer和Mysql都支持。

二、業務代碼優化

  1. 減少數據庫往返,
    數據庫連接是很重要且寶貴的資源,盡量避免沒調用一次方法就讀取一次數據庫的情況,別小看這一條,我在項目就看到有同事在一個for循環中都次讀取數據庫。
    尤其避免綁定的時候都次執行存儲過程;
  2. 合理正確的使用緩存,通過全局變量來保存一些設定,或是頁面級緩存、站點級別緩存來減少服務器壓力;
    如果是大內存服務器,我見過最大96G內存的服務器,可以把一些重要數據放在內存中,利用Nosql做成內存緩存,當然這是另一個話題了;
  3. 多用Ajax和客戶端js、html代碼,少用服務器控件,減少刷新和生成冗余的viewstate;
  4. 采用好的數據結構和算法;
    哈系類性能最好,查找的復雜度是O(1),例如Dictionary<K,V>
    二叉樹查找復雜度O(logn),排序O(n*logn),List和ArrayList自帶的排序速度接近O(n*logn),
    數組類的線性查找O(n),如果你用冒泡排序O(n*n),那么你不是優秀的程序員。
    StringBuilder 性能好於 string+=,不過提升的有限,不是本質的數量級別的提升。 
  5. 及時關閉非托管資源;
    除了上面提到的數據庫connection,文件IO等也要注意。

三、使用靜態數據

  1. 使用靜態數據也很重要,可以提升速度2個數量級(百倍),例如門戶網站、大型網站的首頁,引用由特定服務生成的靜態數據(js、txt、html等)速度會很快;
  2. 圖片、文件、數據服務器分流,可以提升1個數量級(十倍)
    web服務器1台或多台;
    圖片服務器1台或多台;
    文件服務器1台或多台;
    數據庫服務器1台或多台;
  3. CDN


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM