這篇文章主要介紹java解決高并發(fā)的問題,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯是一家專業(yè)從事成都網站設計、網站制作的網絡公司。作為專業(yè)的建站公司,創(chuàng)新互聯依托的技術實力、以及多年的網站運營經驗,為您提供專業(yè)的成都網站建設、全網整合營銷推廣及網站設計開發(fā)服務!1 、從最基礎的地方做起,優(yōu)化我們寫的代碼,減少不必要的資源浪費。
a、避免頻繁的使用new對象,對于整個應用只需要存在一個實例的類,我們可以使用單例模式。對于String連接操作,使用StringBuffer或StringBuilder,對于工具類可以通過靜態(tài)方法來訪問。
b、避免使用錯誤的方式,盡量不用instanceof做條件判斷。使用java中效率高的類,比如ArrayList比Vector性能好。
2、html靜態(tài)化
我們通過一個鏈接地址訪問,通過這個鏈接地址,服務器對應的模塊處理這個請求,轉到對應的jsp頁面,最后生成我們要的數據。但是,如果上千萬個請求的話,有太多的高并發(fā)請求,那么就會加重服務器的壓力,最壞的情況是把服務器down掉。那么如何避免這種情況的出現呢?如果我們把最初對test.do的請求結果保存成一個html文件,然后每次用戶都去訪問這個html文件,這樣就不用再去訪問服務器了,服務器的壓力不就減少了?
那如何自動的生成靜態(tài)頁面,當用戶去訪問,會自動的生成test.html ,然后再顯示給用戶。
3、圖片服務器分離
對于web服務器來說,圖片是最消耗資源的,于是我們有必要把圖片與頁面進行分離,我們把圖片放到獨立的圖片服務器。這樣的架構可以降低提供頁面訪問請求的服務器系統(tǒng)壓力,并且可以保證系統(tǒng)不會因為圖片的問題而崩潰。在圖片服務器上,我們可以對不同的配置進行優(yōu)化。
4、緩存
具體接觸過的緩存機制是hibernate的緩存機制。為了避免每次都向數據庫中取得數據,我們把用戶常常訪問到的數據放到內存中,甚至緩存十分大的時候我們可以把內存中的緩存放到硬盤中。還有高級的分布式緩存數據庫使用,都可以增加系統(tǒng)的抗壓力。
5、分批傳送
在做某項目的時候,一次傳遞的參數太多,而且數據庫規(guī)定一次最多傳遞的參數最多是三萬條,當時有五萬條記錄,那怎么傳送呢?最終是分批傳送,電梯里一次乘不下那么多的人,會報超重的bug,那就分批把人送上去。
還有一次在考試系統(tǒng)中,如果那么多的考試人員同時提交到數據庫中,數據庫的壓力增大,有時會被down掉,當時采用的方法是使用ajax異步傳輸,沒有等待考生點擊提交按鈕的時候,就把考生的答案自動提交,這樣也避免了突然斷電考生前面做過的題出現丟失的現象。
6、數據庫集群
當面對復雜的應用,用戶大量訪問的時候,一臺數據很快無法滿足需求,于是我們需要使用數據庫集群或者庫表散列。
我們在應用程序中安裝業(yè)務和應用或者功能模塊將數據進行分離,不同的模塊對應不同的數據庫或表,再按照一定的策略對某個頁面或者功能進行更小的數據庫散列。
7、DB優(yōu)化
a、在數據庫設計的時候就要考慮到后期的維護,數據庫三范式是我們設計數據庫索要遵循的原則。
b、索引的建立:建立索引要適當,如果一個表經常用來被查詢,對于增加和修改很少被用到,我們就可以為這個表建立索引,因為對于增加和修改和刪除操作時,我們對索引的維護要大大超過索引給我們帶來的效率。
c、表字段的類型選擇要恰當包括字段的長度、類型等,要根據實際存儲的數據進行選擇,長度不要過長,否則會影響效率。
d、外鍵要慎用,因為主鍵代表這一張表,而外鍵代表一群表,對表之間進行了關聯,在刪除修改等需要我們關聯。
e、在數據庫操作上
盡量使用prepareStatement,少用Statement,因為PrepareStatement是進行預編譯的。
connection設置為readOnly,Connection是對書庫連接,屬于重量級,我們使用即可。
連接池的使用,我們可以修改數據庫默認的連接數。
8、負載均衡
負載均衡將是大型網站解決高負荷訪問和大量并發(fā)請求采用的高端解決辦法。
負載均衡技術發(fā)展了多年,有很多專業(yè)的服務提供商和產品可以選擇,我個人接觸過一些解決方法,其中有兩個架構可以給大家做參考。
(1)、硬件四層交換
第四層交換使用第三層和第四層信息包的報頭信息,根據應用區(qū)間識別業(yè)務流,將整個區(qū)間段的業(yè)務流分配到合適的應用服務器進行處理。
第四層交換功能就像是虛IP,指向物理服務器。它傳輸的業(yè)務服從的協議多種多樣,有HTTP、FTP、NFS、Telnet或其他協議。這些業(yè)務在物理服務器基礎上,需要復雜的載量平衡算法。在IP世界,業(yè)務類型由終端TCP或UDP端口地址來決定,在第四層交換中的應用區(qū)間則由源端和終端IP地址、TCP和UDP端口共同決定。
在硬件四層交換產品領域,有一些知名的產品可以選擇,比如Alteon、F5等,這些產品很昂貴,但是物有所值,能夠提供非常優(yōu)秀的性能和很靈活的管理能力?!癥ahoo中國”當初接近2000臺服務器,只使用了三、四臺Alteon就搞定了。
(2)、軟件四層交換
大家知道了硬件四層交換機的原理后,基于OSI模型來實現的軟件四層交換也就應運而生,這樣的解決方案實現的原理一致,不過性能稍差。但是滿足一定量的壓力還是游刃有余的,有人說軟件實現方式其實更靈活,處理能力完全看你配置的熟悉能力。
軟件四層交換我們可以使用Linux上常用的LVS來解決,LVS就是Linux Virtual Server,他提供了基于心跳線heartbeat的實時災難應對解決方案,提高系統(tǒng)的強壯性,同時可供了靈活的虛擬VIP配置和管理功能,可以同時滿足多種應用需求,這對于分布式的系統(tǒng)來說必不可少。
一個典型的使用負載均衡的策略就是,在軟件或者硬件四層交換的基礎上搭建squid集群,這種思路在很多大型網站包括搜索引擎上被采用,這樣的架構低成本、高性能還有很強的擴張性,隨時往架構里面增減節(jié)點都非常容易。
對于大型網站來說,前面提到的每個方法可能都會被同時使用到,這里介紹得比較淺顯,具體實現過程中很多細節(jié)還需要大家慢慢熟悉和體會。有時一個很小的squid參數或者apache參數設置,對于系統(tǒng)性能的影響就會很大。
9、鏡像
鏡像是大型網站常采用的提高性能和數據安全性的方式,鏡像的技術可以解決不同網絡接入商和地域帶來的用戶訪問速度差異,比如ChinaNet和EduNet之間的差異就促使了很多網站在教育網內搭建鏡像站點,數據進行定時更新或者實時更新。在鏡像的細節(jié)技術方面,這里不闡述太深,有很多專業(yè)的現成的解決架構和產品可選。也有廉價的通過軟件實現的思路,比如linux上的rsync等工具。
10、最新:CDN加速技術
什么是CDN?
CDN的全稱是內容分發(fā)網絡。其目的是通過在現有的Internet中增加一層新的網絡架構,將網站的內容發(fā)布到最接近用戶的網絡“邊緣”,使用戶可以就近取得所需的內容,提高用戶訪問網站的響應速度。
CDN有別于鏡像,因為它比鏡像更智能,或者可以做這樣一個比喻:CDN=更智能的鏡像+緩存+流量導流。因而,CDN可以明顯提高Internet網絡中信息流動的效率。從技術上全面解決由于網絡帶寬小、用戶訪問量大、網點分布不均等問題,提高用戶訪問網站的響應速度。
CDN的類型特點:
CDN的實現分為三類:鏡像、高速緩存、專線。
鏡像站點(Mirror Site),是最常見的,它讓內容直接發(fā)布,適用于靜態(tài)和準動態(tài)的數據同步。但是購買和維護新服務器的費用較高,還必須在各個地區(qū)設置鏡像服務器,配備專業(yè)技術人員進行管理與維護。對于大型網站來說,更新所用的帶寬成本也大大提高了。
高速緩存,成本較低,適用于靜態(tài)內容。Internet的統(tǒng)計表明,超過80%的用戶經常訪問的是20%的網站的內容,在這個規(guī)律下,緩存服務器可以處理大部分客戶的靜態(tài)請求,而原始的服務器只需處理約20%左右的非緩存請求和動態(tài)請求,于是大大加快了客戶請求的響應時間,并降低了原始服務器的負載。
CDN服務一般會在全國范圍內的關鍵節(jié)點上放置緩存服務器。
專線,讓用戶直接訪問數據源,可以實現數據的動態(tài)同步。
以上是java解決高并發(fā)的問題的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道!
網頁名稱:java解決高并發(fā)的問題-創(chuàng)新互聯
鏈接地址:http://www.rwnh.cn/article20/igeco.html
成都網站建設公司_創(chuàng)新互聯,為您提供品牌網站制作、網站排名、云服務器、外貿建站、用戶體驗、網站策劃
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯