什么是高并发,如何避免高并发
之前我將高并發(fā)的解決方法誤認(rèn)為是線程或者是隊列可以解決,因為高并發(fā)的時候是有很多用戶在訪問,導(dǎo)致出現(xiàn)系統(tǒng)數(shù)據(jù)不正確、丟失數(shù)據(jù)現(xiàn)象,所以想到 的是用隊列解決,其實隊列解決的方式也可以處理,比如我們在競拍商品、轉(zhuǎn)發(fā)評論微博或者是秒殺商品等,同一時間訪問量特別大,隊列在此起到特別的作用,將 所有請求放入隊列,以毫秒計時單位,有序的進(jìn)行,從而不會出現(xiàn)數(shù)據(jù)丟失系統(tǒng)數(shù)據(jù)不正確的情況。
今天我經(jīng)過查資料,高并發(fā)的解決方法有倆種,一種是使用緩存、另一種是使用生成靜態(tài)頁面;還有就是從最基礎(chǔ)的地方優(yōu)化我們寫代碼減少不必要的資源浪費:(
1.不要頻繁的new對象,對于在整個應(yīng)用中只需要存在一個實例的類使用單例模式.對于String的連接操作,使用StringBuffer或者StringBuilder.對于utility類型的類通過靜態(tài)方法來訪問。
首先緩存技術(shù)我一直沒有使用過,我覺得應(yīng)該是在用戶請求時將數(shù)據(jù)保存在緩存中,下次請求時會檢測緩存中是否有數(shù)據(jù)存在,防止多次請求服務(wù)器,導(dǎo)致服務(wù)器性能降低,嚴(yán)重導(dǎo)致服務(wù)器崩潰,這只是我自己的理解,詳細(xì)的資料還是需要在網(wǎng)上收集;
使用生成靜態(tài)頁面我想大家應(yīng)該不模式,我們見過很多網(wǎng)站當(dāng)在請求的時候頁面的后最已經(jīng)變了,如“http://developer.51cto.com/art/201207/348766.htm”該頁面其實是一個服務(wù)器請求地址,在轉(zhuǎn)換成htm后,訪問速度將提升,因為靜態(tài)頁面不帶有服務(wù)器組件;在這里我就多多介紹一下:
一、什么是頁面靜態(tài)化:
簡 單的說,我們?nèi)绻L問一個鏈接 ,服務(wù)器對應(yīng)的模塊會處理這個請求,轉(zhuǎn)到對應(yīng)的jsp界面,最后生成我們想要看到的數(shù)據(jù)。這其中的缺點是顯而易見的:因為每次請求服務(wù)器都會進(jìn)行處理,如 果有太多的高并發(fā)請求,那么就會加重應(yīng)用服務(wù)器的壓力,弄不好就把服務(wù)器 搞down 掉了。那么如何去避免呢?如果我們把對 test.do 請求后的結(jié)果保存成一個 html 文件,然后每次用戶都去訪問 ,這樣應(yīng)用服務(wù)器的壓力不就減少了?
那么靜態(tài)頁面從哪里來呢?總不能讓我們每個頁面都手動處理吧?這里就牽涉到我們要講解的內(nèi)容了,靜態(tài)頁面生成方案… 我們需要的是自動的生成靜態(tài)頁面,當(dāng)用戶訪問 ,會自動生成 test.html ,然后顯示給用戶。
二、下面我們在簡單介紹一下要想掌握頁面靜態(tài)化方案應(yīng)該掌握的知識點:
1、 基礎(chǔ)- URL Rewrite
什么是 URL Rewrite 呢 ? URL 重寫。用一個簡單的例子來說明問題:輸入網(wǎng)址 ,但是實際上訪問的卻是 abc.com/test.action,那我們就可以說 URL 被重寫了。這項技術(shù)應(yīng)用廣泛,有許多開源的工具可以實現(xiàn)這個功能。
2、 基礎(chǔ)- Servlet web.xml
如果你還不知道 web.xml 中一個請求和一個 servlet 是如何匹配到一起的,那么請搜索一下 servlet 的文檔。這可不是亂說呀,有很多人就認(rèn)為 /xyz/*.do 這樣的匹配方式能有效。
如果你還不知道怎么編寫一個 servlet ,那么請搜索一下如何編寫 servlet.這可不是說笑呀,在各種集成工具漫天飛舞的今天,很多人都不會去從零編寫一個 servlet了。
三、基本的方案介紹
其中,對于 URL Rewriter的部分,可以使用收費或者開源的工具來實現(xiàn),如果 url不是特別的復(fù)雜,可以考慮在 servlet 中實現(xiàn),那么就是下面這個樣子:
總 結(jié):其實我們在開發(fā)中都很少考慮這種問題,直接都是先將功能實現(xiàn),當(dāng)一個程序員在干到1到2年,就會感覺光實現(xiàn)功能不是最主要的,安全性能、質(zhì)量等等才是 一個開發(fā)人員最該關(guān)心的。今天我所說的是高并發(fā),我的解決思路是,1、采用分布式應(yīng)用設(shè)計2、分布式緩存數(shù)據(jù)庫3、代碼優(yōu)化
總結(jié)
以上是生活随笔為你收集整理的什么是高并发,如何避免高并发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java高并发高性能分布式框架从无到有微
- 下一篇: java分布式学习路线