1. 程式人生 > >高效能,高併發

高效能,高併發

1.負載均衡,加伺服器分流 
    1)nginx做負載伺服器,分發處理請求,ip_hash依據ip定位伺服器,防止session不共享處理。 
2.程式碼儘量優化 
    1)包括常用寫法,for迴圈變數等等,網上很多資料。 
    2)消耗資源和佔用記憶體多的,都必須處理分批處理,比如批量處理txt文件,如果txt文件大於1w個,Apache ftp如果一次載入完,必然記憶體溢位,必須分批次處理,一次載入1000或者5000依據情況而定,最好使用多執行緒處理,比如讀txt和處理txt,讀執行緒池解決,CountDownLatch類處理執行緒池做任務的先後順序。 
    3)用完資源及時關閉,對讀取檔案和連線還有socket等等 

    4)對httpclient請求,請求時間等待時間等等處理。 
3.減少對資料庫訪問,最好批量插入。 
    1)系統啟動時候啟動執行緒處理佇列,如果需要插入sql,把sql放入佇列,執行緒定時處理這些sql。 
4.快取,增加快取,增加訪問速度。 
    1)memcached支援的語言最多,只支援key-value 
    2)redis對java支援最好,用的最多支援型別比memcached多。 
5.快取叢集解決規模大的訪問請求,主從複製一般小中型專案可以解決了。 
    1)無論memcached和redis都可以叢集處理大型系統專案 
    2)我只用過redis主從複製,這個一般就可以解決大部分問題,只需寫一個redis伺服器,其他伺服器自動複製,這樣就可以訪問這些伺服器快取資料。 

6.限流,隨機一些訪問跳到宣傳頁面。 
1)限流,沒有辦法的辦法,對訪問限制很好解決併發數多的請求。 
7.對資料庫訪問高效率 
    1)jndi和druid,bencop選擇合適的連線池,依據經驗處理吧。 
8.使用佇列,一些操作可以使用多執行緒解決 
    1)activemq可以非同步處理訊息,也可以自己用jdk5執行緒池處理。 
    2)dubbox不知道對非同步處理怎麼樣,需要我寫demo,目前沒測試。 
9.分層,分隔,分佈 
    1)我做過三種這種型別的專案開發,一種是建很多java工程,編譯到web工程下面,沒增加一個模組建一個工程,劣勢要是使用某個模組很麻煩。 
10.非同步,使用佇列,請求無需等到迴應可以返回,佇列處理這些請求! 

11.高效能,程式設計師從加快取,負載均衡,佇列處理訊息等處理。 
12.高併發,web端頁面樣式圖片存放伺服器,最好放在負載均衡那臺伺服器,減少網路傳輸影響 
    1)web端的css,js,圖片等等放到nginx,減少網路傳輸開銷,最好處理方式 

    2)減少http請求,每個請求都需要耗費效能,不需要的請求可以減少,最好把資料準備好,一次請求搞定