什么是高並發,如何避免高並發


之前我將高並發的解決方法誤認為是線程或者是隊列可以解決,因為高並發的時候是有很多用戶在訪問,導致出現系統數據不正確、丟失數據現象,所以想到 的是用隊列解決,其實隊列解決的方式也可以處理,比如我們在競拍商品、轉發評論微博或者是秒殺商品等,同一時間訪問量特別大,隊列在此起到特別的作用,將 所有請求放入隊列,以毫秒計時單位,有序的進行,從而不會出現數據丟失系統數據不正確的情況。

今天我經過查資料,高並發的解決方法有倆種,一種是使用緩存、另一種是使用生成靜態頁面;還有就是從最基礎的地方優化我們寫代碼減少不必要的資源浪費:(

1.不要頻繁的new對象,對於在整個應用中只需要存在一個實例的類使用單例模式.對於String的連接操作,使用StringBuffer或者StringBuilder.對於utility類型的類通過靜態方法來訪問。

2. 避免使用錯誤的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof做條件判斷,盡量使用比的條件判斷方式.使用JAVA中效率高的類,比如ArrayList比Vector性能好。)

首先緩存技術我一直沒有使用過,我覺得應該是在用戶請求時將數據保存在緩存中,下次請求時會檢測緩存中是否有數據存在,防止多次請求服務器,導致服務器性能降低,嚴重導致服務器崩潰,這只是我自己的理解,詳細的資料還是需要在網上收集;

使用生成靜態頁面我想大家應該不模式,我們見過很多網站當在請求的時候頁面的后最已經變了,如“http://developer.51cto.com/art/201207/348766.htm”該頁面其實是一個服務器請求地址,在轉換成htm后,訪問速度將提升,因為靜態頁面不帶有服務器組件;在這里我就多多介紹一下:

一、什么是頁面靜態化:

簡 單的說,我們如果訪問一個鏈接 ,服務器對應的模塊會處理這個請求,轉到對應的jsp界面,最后生成我們想要看到的數據。這其中的缺點是顯而易見的:因為每次請求服務器都會進行處理,如 果有太多的高並發請求,那么就會加重應用服務器的壓力,弄不好就把服務器 搞down 掉了。那么如何去避免呢?如果我們把對 test.do 請求后的結果保存成一個 html 文件,然后每次用戶都去訪問 ,這樣應用服務器的壓力不就減少了?

那么靜態頁面從哪里來呢?總不能讓我們每個頁面都手動處理吧?這里就牽涉到我們要講解的內容了,靜態頁面生成方案… 我們需要的是自動的生成靜態頁面,當用戶訪問 ,會自動生成 test.html ,然后顯示給用戶。

二、下面我們在簡單介紹一下要想掌握頁面靜態化方案應該掌握的知識點:

1、 基礎- URL Rewrite

什么是 URL Rewrite 呢 ? URL 重寫。用一個簡單的例子來說明問題:輸入網址 ,但是實際上訪問的卻是 abc.com/test.action,那我們就可以說 URL 被重寫了。這項技術應用廣泛,有許多開源的工具可以實現這個功能。

2、 基礎- Servlet web.xml

如果你還不知道 web.xml 中一個請求和一個 servlet 是如何匹配到一起的,那么請搜索一下 servlet 的文檔。這可不是亂說呀,有很多人就認為 /xyz/*.do 這樣的匹配方式能有效。

如果你還不知道怎么編寫一個 servlet ,那么請搜索一下如何編寫 servlet.這可不是說笑呀,在各種集成工具漫天飛舞的今天,很多人都不會去從零編寫一個 servlet了。

三、基本的方案介紹

 

其中,對於 URL Rewriter的部分,可以使用收費或者開源的工具來實現,如果 url不是特別的復雜,可以考慮在 servlet 中實現,那么就是下面這個樣子:

 

總 結:其實我們在開發中都很少考慮這種問題,直接都是先將功能實現,當一個程序員在干到1到2年,就會感覺光實現功能不是最主要的,安全性能、質量等等才是 一個開發人員最該關心的。今天我所說的是高並發,我的解決思路是,1、采用分布式應用設計2、分布式緩存數據庫3、代碼優化


免責聲明!

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



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