java高并發(fā)的解決方案_第1頁
java高并發(fā)的解決方案_第2頁
java高并發(fā)的解決方案_第3頁
java高并發(fā)的解決方案_第4頁
java高并發(fā)的解決方案_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、java 高并發(fā)的解決方案對于我們開發(fā)的網(wǎng)站,如果網(wǎng)站的訪問量非常大的話,那么我們就需要考慮相關(guān)的并發(fā)訪問問題了。而并發(fā)問題是絕大部分的程序員頭疼的問題! 下面是小編分享的,歡迎大家閱讀 !【java 高并發(fā)的解決方案】一般來說 MySQL是最常用的,可能最初是一個mysql 主機,當(dāng)數(shù)據(jù)增加到100萬以上,那么,MySQL的效能急劇下降。常用的優(yōu)化措施是M-S(主- 從 ) 方式進行同步復(fù)制,將查詢和操作和分別在不同的服務(wù)器上進行操作。我推薦的是M-M-Slaves方式,2個主Mysql ,多個Slaves,需要注意的是,雖然有2 個Master ,但是同時只有1 個是 Active ,我們

2、可以在一定時候切換。之所以用2 個 M,是保證 M不會又成為系統(tǒng)的SPOF。Slaves 可以進一步負載均衡,可以結(jié)合 LVS,從而將 select 操作適當(dāng)?shù)钠胶獾讲煌?slaves 上。以上架構(gòu)可以抗衡到一定量的負載,但是隨著用戶進一步增加,你的用戶表數(shù)據(jù)超過1 千萬,這時那個M變成了 SPOF。你不能任意擴充 Slaves ,否則復(fù)制同步的開銷將直線上升,怎么辦 ?我的方法是表分區(qū),從業(yè)務(wù)層面上進行分區(qū)。最簡單的,以用戶數(shù)據(jù)為例。根據(jù)一定的切分方式,比如 id ,切分到不同的數(shù)據(jù)庫集群去。全局?jǐn)?shù)據(jù)庫用于 meta 數(shù)據(jù)的查詢。缺點是每次查詢,會增加一次,比如你要查一個用戶 nights

3、ailer, 你首先要到全局?jǐn)?shù)據(jù)庫群找到 nightsailer 對應(yīng)的 cluster id ,然后再到指定的 cluster 找到 nightsailer 的實際數(shù)據(jù)。每個 cluster 可以用 m-m方式,或者 m-m-slaves 方式。這是一個可以擴展的結(jié)構(gòu),隨著負載的增加,你可以簡單的增加新的 mysql cluster 進去。網(wǎng)站 HTML靜態(tài)化解決方案當(dāng)一個 Servlet 資源請求到達 WEB服務(wù)器之后我們會填充指定的 JSP頁面來響應(yīng)請求 :HTTP請求 -Web 服務(wù)器 -Servlet-業(yè)務(wù)邏輯處理 -訪問數(shù)據(jù) - 填充 JSP- 響應(yīng)請求HTML靜態(tài)化之后:HTTP

4、請求 -Web服務(wù)器-Servlet-HTML-響應(yīng)請求緩存、負載均衡、存儲、隊列1. 緩存是另一個大問題,我一般用memcached來做緩存集群,一般來說部署10 臺左右就差不多(10g 內(nèi)存池 ) 。需要注意一點,千萬不能用使用swap,最好關(guān)閉linux的 swap。2. 負載均衡 / 加速??赡苌厦嬲f緩存的時候,有人第一想的是頁面靜態(tài)化,所謂的靜態(tài)html ,我認為這是常識,不屬于要點了。頁面的靜態(tài)化隨之帶來的是靜態(tài)服務(wù)的負載均衡和加速。我認為Lighttped+Squid是最好的方式了。LVS lighttped=squid(s)=lighttpd上面是我經(jīng)常用的。注意,我沒有用 a

5、pache,除非特定的需求,否則我不部署 apache,因為我一般用 php-fastcgi 配合 lighttpd, 性能比 apache+mod_php要強很多。squid 的使用可以解決文件的同步等等問題,但是需要注意,你要很好的監(jiān)控緩存的命中率,盡可能的提高的90%以上。squid 和 lighttped也有很多的話題要討論,這里不贅述。3. 存儲。也是一個大問題,一種是小文件的存儲,比如圖片這類。另一種是大文件的存儲,比如搜索引擎的索引,一般單文件都超過 2g 以上。小文件的存儲最簡單的方法是結(jié)合lighttpd 來進行分布?;蛘吒纱嗍褂肦edhat 的 GFS,優(yōu)點是應(yīng)用透明,缺點

6、是費用較高。我是指你購買盤陣的問題。我的項目中,存儲量是2-10Tb ,我采用了分布式存儲。這里要解決文件的復(fù)制和冗余。這樣每個文件有不同的冗余,這方面可以參考google的 gfs 的論文。大文件的存儲,可以參考nutch 的方案,現(xiàn)在已經(jīng)獨立為 hadoop 子項目。 ( 你可以 googleit)4. 隊列。將并發(fā)線程轉(zhuǎn)換為單線程,如果用java 的concurrentCollection類去做,原理就是啟動一個線程,跑一個 Queue,并發(fā)的時候,任務(wù)壓入Queue,線程輪訓(xùn)讀取這個 Queue,然后一個個順序執(zhí)行。一旦并發(fā)轉(zhuǎn)成單線程,那么其中一個線程一旦出現(xiàn)性能問題,必然整個處理都會

7、放慢。所以在單線程中的任何操作絕對不能涉及到IO 處理。那數(shù)據(jù)庫操作怎么辦?增加緩存。這個思路很簡單,直接從內(nèi)存讀取,必然會快。至于寫、更新操作,采用類似的思路,把操作提交給一個Queue,然后單獨跑一個Thread去一個個獲取插庫。這樣保證了“大循環(huán)”中不涉及到IO操作。大家知道,對于Web服務(wù)器來說,不管是Apache、 IIS 還是其他容器,圖片是最消耗資源的,于是我們有必要將圖片與頁面進行分離,這是基本上大型網(wǎng)站都會采用的策略,他們都有獨立的圖片服務(wù)器,甚至很多臺圖片服務(wù)器。這樣的架構(gòu)可以降低提供頁面訪問請求的服務(wù)器系統(tǒng)壓力,并且可以保證系統(tǒng)不會因為圖片問題而崩潰,在應(yīng)用服務(wù)器和圖片服

8、務(wù)器上,可以進行不同的配置優(yōu)化,比如apache 在配置 ContentType 的時候可以盡量少支持,盡可能少的LoadModule,保證更高的系統(tǒng)消耗和執(zhí)行效率。數(shù)據(jù)庫集群及庫表散列在數(shù)據(jù)庫集群方面,很多數(shù)據(jù)庫都有自己的解決方案,Oracle、 Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是類似的方案,您使用了什么樣的DB,就參考相應(yīng)的解決方案來實施即可。上面提到的數(shù)據(jù)庫集群由于在架構(gòu)、成本、擴張性方面都會受到所采用DB類型的限制,于是我們需要從應(yīng)用程序的角度來考慮改善系統(tǒng)架構(gòu),庫表散列是常用并且最有效的解決方案。我們在應(yīng)用程序中安裝業(yè)務(wù)和應(yīng)用或者功能模塊

9、將數(shù)據(jù)庫進行分離,不同的模塊對應(yīng)不同的數(shù)據(jù)庫或者表,再按照一定的策略對某個頁面或者功能進行更小的數(shù)據(jù)庫散列,比如用戶表,按照用戶ID 進行表散列,這樣就能夠低成本的提升系統(tǒng)的性能并且有很好的擴展性。sohu 的論壇就是采用了這樣的架構(gòu),將論壇的用戶、設(shè)置、帖子等信息進行數(shù)據(jù)庫分離,然后對帖子、用戶按照板塊和 ID 進行散列數(shù)據(jù)庫和表,最終可以在配置文件中進行簡單的配置便能讓系 統(tǒng)隨時增加一臺低成本的數(shù)據(jù)庫進來補充系統(tǒng)性能。集群軟件的分類:一般來講,集群軟件根據(jù)側(cè)重的方向和試圖解決的問題,分為三大類:高性能集群(Highperformancecluster, HPC)、負載均衡集群(Loadba

10、lancecluster,LBC),高可用性集群(Highavailabilitycluster, HAC)。高性能集群 (High performance cluster , HPC),它是利用一個集群中的多臺機器共同完成同一件任務(wù),使得完成任務(wù)的速度和可靠性都遠遠高于單機運行的效果。彌補了單機性能上的不足。該集群在天氣預(yù)報、環(huán)境監(jiān)控等數(shù)據(jù)量大,計算復(fù)雜的環(huán)境中應(yīng)用比較多 ;負載均衡集群 (Loadbalancecluster,LBC),它是利用一個集群中的多臺單機,完成許多并行的小的工作。一般情況下,如果一個應(yīng)用使用的人多了,那么用戶請求的響應(yīng)時間就會增大,機器的性能也會受到影響,如果使用

11、負載均衡集群,那么集群中任意一臺機器都能響應(yīng)用戶的請求,這樣集群就會在用戶發(fā)出服務(wù)請求之后,選擇當(dāng)時負載最小,能夠提供最好的服務(wù)的這臺機器來接受請求并相應(yīng),這樣就可用用集群來增加系統(tǒng)的可用性和穩(wěn)定性。這類集群在網(wǎng)站中使用較多 ;高可用性集群 (Highavailabilitycluster,HAC),它是利用集群中系統(tǒng)的冗余,當(dāng)系統(tǒng)中某臺機器發(fā)生損壞的時候,其他后備的機器可以迅速的接替它來啟動服務(wù),等待故障機的維修和返回。最大限度的保證集群中服務(wù)的可用性。這類系統(tǒng)一般在銀行,電信服務(wù)這類對系統(tǒng)可靠性有高的要求的領(lǐng)域有著廣泛的應(yīng)用。2 數(shù)據(jù)庫集群的現(xiàn)狀數(shù)據(jù)庫集群是將計算機集群技術(shù)引入到數(shù)據(jù)庫中來

12、實現(xiàn)的,盡管各廠商宣稱自己的架構(gòu)如何的完美,但是始終不能改變 Oracle 當(dāng)先,大家追逐的事實,在集群的解決方案上 OracleRAC還是領(lǐng)先于包括微軟在內(nèi)的其它數(shù)據(jù)庫廠商,它能滿足客戶高可用性、高性能、數(shù)據(jù)庫負載均衡和方便擴展的需求。Oracle s Real ApplicationCluster(RAC)MicrosoftSQL ClusterServer(MSCS)IBMs DB2 UDB High AvailabilityCluster(UDB)Sybase ASE High AvailabilityCluster(ASE)MySQLHigh AvailabilityCluster(

13、MySQL CS)基于IO的第三方HA(高可用性)集群當(dāng)前主要的數(shù)據(jù)庫集群技術(shù)有以上六大類,有數(shù)據(jù)庫廠商自己開發(fā)的; 也有第三方的集群公司開發(fā)的; 還有數(shù)據(jù)庫廠商與第三方集群公司合作開發(fā)的,各類集群實現(xiàn)的功能及架構(gòu)也不盡相同。RAC(RealApplicationCluster ,真正應(yīng)用集群) 是Oracle9i數(shù)據(jù)庫中采用的一項新技術(shù),也是Oracle 數(shù)據(jù)庫支持網(wǎng)格計算環(huán)境的核心技術(shù)。它的出現(xiàn)解決了傳統(tǒng)數(shù)據(jù)庫應(yīng)用中面臨的一個重要問題:高性能、高可伸縮性與低價格之間的矛盾。在很長一段時間里,甲骨文都以其實時應(yīng)用集群技術(shù) (RealApplicationCluster , RAC)統(tǒng)治著集群

14、數(shù)據(jù)庫市場緩存一詞搞技術(shù)的都接觸過,很多地方用到緩存。網(wǎng)站架構(gòu)和網(wǎng)站開發(fā)中的緩存也是非常重要。這里先講述最基本的兩種緩存。高級和分布式的緩存在后面講述。架構(gòu)方面的緩存,對Apache 比較熟悉的人都能知道Apache 提供了自己的緩存模塊,也可以使用外加的Squid模塊進行緩存,這兩種方式均可以有效的提高Apache 的訪問響應(yīng)能力。網(wǎng)站程序開發(fā)方面的緩存,Linux 上提供的MemoryCache 是常用的緩存接口,可以在web 開發(fā)中使用,比如用Java 開發(fā)的時候就可以調(diào)用MemoryCache對一些數(shù)據(jù)進行緩存和通訊共享,一些大型社區(qū)使用了這樣的架構(gòu)。另外,在使用 web 語言開發(fā)的時

15、候,各種語言基本都有自己的緩存模塊和方法,PHP有 Pear 的 Cache 模塊, Java 就更多了, .net不是很熟悉,相信也肯定有。JBossCache/TreeCacheJBossCache 是一個復(fù)制的事務(wù)處理緩存,它允許你緩存企業(yè)級應(yīng)用數(shù)據(jù)來更好的改善性能。緩存數(shù)據(jù)被自動復(fù)制,讓你輕松進行Jboss 服務(wù)器之間的集群工作。JBossCache 能夠通過 Jboss 應(yīng)用服務(wù)或其他 J2EE 容器來運行一個Mbean服務(wù),當(dāng)然,它也能獨立運行。JBossCache 包括兩個模塊:TreeCache 和TreeCacheAOP。 TreeCache - 是一個樹形結(jié)構(gòu)復(fù)制的事務(wù)處理

16、緩存。 TreeCacheAOP - 是一個“面向?qū)ο蟆本彺?,它使?AOP來動態(tài)管理 POJOOSCacheOSCache標(biāo)記庫由 OpenSymphony設(shè)計,它是一種開創(chuàng)性的JSP定制標(biāo)記應(yīng)用,提供了在現(xiàn)有JSP 頁面之內(nèi)實現(xiàn)快速內(nèi)存緩沖的功能。OSCache是個一個廣泛采用的高性能的J2EE緩存框架, OSCache能用于任何Java 應(yīng)用程序的普通的緩存解決方案。OSCache有以下特點:緩存任何對象,你可以不受限制的緩存部分jsp頁面或HTTP請求,任何java對象都可以緩存。擁有全面的API-OSCacheAPI給你全面的程序來控制所有的OSCache特性。永久緩存- 緩存能隨意

17、的寫入硬盤,因此允許昂貴的創(chuàng)建(expensive-to-create)數(shù)據(jù)來保持緩存,甚至能讓應(yīng)用重啟。支持集群 - 集群緩存數(shù)據(jù)能被單個的進行參數(shù)配置,不需要修改代碼。緩存記錄的過期- 你可以有最大限度的控制緩存對象的過期,包括可插入式的刷新策略( 如果默認性能不需要時 ) 。JCACHEJCACHE是一種即將公布的標(biāo)準(zhǔn)規(guī)范(JSR 107) ,說明了一種對Java 對象臨時在內(nèi)存中進行緩存的方法,包括對象的創(chuàng)建、共享訪問、假脫機(spooling)、失效、各JVM的一致性等。它可被用于緩存JSP 內(nèi)最經(jīng)常讀取的數(shù)據(jù),如產(chǎn)品目錄和價格列表。利用JCACHE,多數(shù)查詢的反應(yīng)時間會因為有緩存的

18、數(shù)據(jù)而加快( 內(nèi)部測試表明反應(yīng)時間大約快 15倍)。EhcacheEhcache 出自 Hibernate ,在 Hibernate中使用它作為數(shù)據(jù)緩存的解決方案。Java CachingSystem JCS是 Jakarta的項目 Turbine的子項目。它是一個復(fù)合式的緩沖工具。可以將對象緩沖到內(nèi)存、硬盤。具有緩沖對象時間過期設(shè)定。還可以通過JCS構(gòu)建具有緩沖的分布式構(gòu)架,以實現(xiàn)高性能的應(yīng)用。對于一些需要頻繁訪問而每訪問一次都非常消耗資源的對象,可以臨時存放在緩沖區(qū)中,這樣可以提高服務(wù)的性能。而 JCS正是一個很好的緩沖工具。緩沖工具對于讀操作遠遠多于寫操作的應(yīng)用性能提高非常顯著。Swar

19、mCache SwarmCache是一個簡單而功能強大的分布式緩存機制。它使用 IP 組播來有效地在緩存的實例之間進行通信。它是快速提高集群式 Web應(yīng)用程序的性能的理想選擇。ShiftOneShiftOneObjectCache 這個 Java 庫提供了基本的對象緩存能力。實現(xiàn)的策略有先進先出(FIFO) ,最近使用 (LRU) ,最不常使用 (LFU) 。所有的策略可以最大化元素的大小,最大化其生存時間。WhirlyCacheWhirlycache是一個快速的、可配置的、存在于內(nèi)存中的對象的緩存。它能夠通過緩存對象來加快網(wǎng)站或應(yīng)用程序的速度,否則就必須通過查詢數(shù)據(jù)庫或其他代價較高的處理程序

20、來建立。JoftiJofti可對在緩存層中( 支持EHCache, JBossCache 和 OSCache)的對象或在支持Map接口的存儲結(jié)構(gòu)中的對象進行索引與搜索。這個框架還為對象在索引中的增刪改提供透明的功能同樣也為搜索提供易于使用的查詢功能。cache4jcache4j 是一個有簡單API 與實現(xiàn)快速的Java 對象緩存。它的特性包括:在內(nèi)存中進行緩存,設(shè)計用于多線程環(huán)境,兩種實現(xiàn):同步與阻塞,多種緩存清除策略: LFU,LRU, FIFO,可使用強引用(strongreference)與軟引用 (softreference)存儲對象。Open Terracotta一個JVM級的開源群

21、集框架,提供:HTTP Session復(fù)制,分布式緩存,POJO群集,跨越群集的JVM來實現(xiàn)分布式應(yīng)用程序協(xié)調(diào)( 采用代碼注入的方式,所以你不需要修改任何)。sccache使用的對象緩存系統(tǒng)。sccache是一個in-processcache 和二級、共享緩存。它將緩存對象存儲到磁盤上。支持關(guān)聯(lián)Key,任意大小的Key 和任意大小的數(shù)據(jù)。能夠自動進行垃圾收集。ShoalShoal 是一個基于Java 可擴展的動態(tài)集群框架,能夠為構(gòu)建容錯、可靠和可用的Java 應(yīng)用程序提供了基礎(chǔ)架構(gòu)支持。這個框架還可以集成到不希望綁定到特定通信協(xié)議,但需要集群和分布式系統(tǒng)支持的任何Java 產(chǎn)品中。Shoal 是 GlassFish和 JonAS應(yīng)用服務(wù)器的集群引擎。Simple-Sp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論