国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

關(guān)于J2EE中軟件基礎(chǔ)結(jié)構(gòu)的瓶頸

2019-11-18 12:24:09
字體:
供稿:網(wǎng)友

  可擴展性是系統(tǒng)中的一個非常重要的非功能性需求。但系統(tǒng)中可能有多個瓶頸會阻礙系統(tǒng)的擴展性。在這篇文章中,我們嘗試分析軟件基礎(chǔ)結(jié)構(gòu)成為瓶頸的案例,而不考慮硬件資源上的限制(如CPU、磁盤空間、網(wǎng)絡(luò)速度等)。下面我們將探討一下這個問題。
  
  下面是一些整篇文章中用到的一些術(shù)語:
  
  ·吞吐量:系統(tǒng)支持的每秒能夠處理的事務(wù)個數(shù)。
  ·服務(wù)請求:每個事務(wù)中特定硬件的使用率,等于硬件使用率除以吞吐量。
  ·硬件資源:指處理器、內(nèi)存、磁盤和網(wǎng)絡(luò)。
  ·軟件資源:指WEB線程、執(zhí)行線程、BEAN池及數(shù)據(jù)庫連接池等。
  ·預(yù)計時間:用戶預(yù)計兩次并發(fā)提交請求之間的時間。
  ·短時間法則:一個驗證測試及確信測試環(huán)境不是瓶頸的法則。
  ·響應(yīng)時間:用戶等待他提交的請求返回響應(yīng)的時間。
  
  理論基礎(chǔ)
  
  任何J2EE應(yīng)用通常都有下面幾個層次,如圖1:
  
  1、硬件基礎(chǔ)結(jié)構(gòu)資源(處理器、內(nèi)存、磁盤和網(wǎng)絡(luò))
  2、軟件基礎(chǔ)結(jié)構(gòu)資源(JVM,WEB服務(wù)器、應(yīng)用服務(wù)器、數(shù)據(jù)庫服務(wù)器)
  3、軟件應(yīng)用(J2EE應(yīng)用)
  
 關(guān)于J2EE中軟件基礎(chǔ)結(jié)構(gòu)的瓶頸(圖一)
  Figure 1. Snapshot of a J2EE system

  
  這兒有兩個可能性導(dǎo)致瓶頸:硬件成為主要瓶頸或者軟件成為主要瓶頸。在第一種情況,硬件資源不足夠而軟件資源很充分,如圖2。隨著負載的增加,硬件資源成為瓶頸,而軟件可以繼續(xù)擴展。減輕這個瓶頸的方案通常是擴大或者增加硬件。
  
 關(guān)于J2EE中軟件基礎(chǔ)結(jié)構(gòu)的瓶頸(圖二)
  Figure 2. The hardware pipe becomes a bottleneck

  
  在第二種情況,硬件資源是足夠的而軟件資源相對有限。隨著負載的增加,軟件資源成為瓶頸,如圖3。減輕這種瓶頸的方案通常是使用軟件群集或優(yōu)化軟件。
  
 關(guān)于J2EE中軟件基礎(chǔ)結(jié)構(gòu)的瓶頸(圖三)
  Figure 3. Software pipe becomes a bottleneck

  
  應(yīng)用服務(wù)器如何工作?
  
  來考慮一下應(yīng)用服務(wù)器的內(nèi)部機制。應(yīng)用服務(wù)器的基本功能包括事務(wù)治理、數(shù)據(jù)持久、對象池、SOCKET處理和請求處理。這些功能的流程如圖4。有各種組件來處理這些功能。這些組件需要同步應(yīng)用服務(wù)器中的線程來維護數(shù)據(jù)的一致性并操作數(shù)據(jù)。雖然這種同步對應(yīng)用服務(wù)器的功能正確性是必須而且有用的,但是也成為高負載的限制,即使有足夠的硬件資源。
  
 關(guān)于J2EE中軟件基礎(chǔ)結(jié)構(gòu)的瓶頸(圖四)
  Figure 4. Internals of an application server

  
  實驗
  
  為了理解瓶頸的狀況,我們在基于Windows/Intel平臺用流行的J2EE應(yīng)用服務(wù)器來測試一下java PETSTORE應(yīng)用。一些測試用例如PetStore應(yīng)用的瀏覽和購買周期來測試擴展性。我們確信整個測試環(huán)境(包括操作系統(tǒng)、JVM、應(yīng)用服務(wù)器和應(yīng)用自身)已經(jīng)盡可能優(yōu)化了,而且J2EE應(yīng)用沒有任何瓶頸或同步問題。我們使用了多用戶負載測試并觀察了響應(yīng)時間、吞吐量、資源利用率等指標。
  
  環(huán)境如下:
  
  1、J2EE PetStore應(yīng)用
  2、J2EE應(yīng)用服務(wù)器
  3、Sun JVM 1.3
  4、windows 2000高級服務(wù)器
  5、Intel Dell PowerEdge 8450 (8Intel至強800MHz處理器, 4GB RAM)
  6、100Mbps Cisco dedicated network
  7、負載測試工具WebLoad
  
 關(guān)于J2EE中軟件基礎(chǔ)結(jié)構(gòu)的瓶頸(圖五)
點擊查看大圖

  在這個測試中我們看到即使有足夠的硬件資源,應(yīng)用服務(wù)器的實例個數(shù)限制了擴展的能力。在這里軟件資源(如執(zhí)行線程、BEAN池大小、數(shù)據(jù)庫池和其他應(yīng)用服務(wù)器參數(shù))優(yōu)化后即使這些資源不足也不會影響系統(tǒng)的擴展。下面我們來研究一下減輕這種問題的方案。
  
  注:Sun J2EE PetStore可以被更多地優(yōu)化來改善性能和可擴展性。
  
  解決方案
  
  同一機器上的群集

  
  當(dāng)吞吐量滿載了應(yīng)用服務(wù)器的一個實例時,需要增加一個實例來減輕這種問題。這個方案如圖5。
  
 關(guān)于J2EE中軟件基礎(chǔ)結(jié)構(gòu)的瓶頸(圖六)
  Figure 5. Instance clusters on the same hardware box
  

  當(dāng)前機器的CPU使用率只有40%因而有足夠空間來增加一個實例。我們可以發(fā)現(xiàn)在增加了實例后,吞吐量也增加了50%,如表2
  
 關(guān)于J2EE中軟件基礎(chǔ)結(jié)構(gòu)的瓶頸(圖七)
點擊查看大圖

  在不同機器的群集
  
  當(dāng)吞吐量滿載了應(yīng)用服務(wù)器的一個實例時,機器的CPU使用率只有40%。因為8CPU的機器未完全利用,所以我們測試一下更低配置的機器。現(xiàn)在我們使用兩個4CPU的機器,如圖6。
  
 關(guān)于J2EE中軟件基礎(chǔ)結(jié)構(gòu)的瓶頸(圖八)
  Figure 6. Instance clusters on different hardware boxes
  

  我們發(fā)現(xiàn)4CPU機器的CPU使用率已達到80%,再增加實例也沒有什么用處了。因此我們又增加一臺4CPU的機器來運行應(yīng)用的實例。在增加機器后,吞吐量幾乎翻了一倍。在這里我們確信數(shù)據(jù)庫服務(wù)器不會成為瓶頸。
  
  注:在上面的兩臺機器的測試中,負載平衡是通過一種不增加應(yīng)用服務(wù)器實例功能負載的方式來處理的。但是在實際的生產(chǎn)環(huán)境中很難做到。
  
  因為我們觀察到8CPU的機器被沒有被完全利用,所以我們使用4CPU的機器重新測試了一遍。測試的結(jié)果可以在下表中看到,分別對應(yīng)配置1和2。4CPU的配置幾乎被完全利用了,這意味著使用4CPU的配置比8CPU的配置更實際,因為前者花費更少。
  
 關(guān)于J2EE中軟件基礎(chǔ)結(jié)構(gòu)的瓶頸(圖九)

  小結(jié)
  
  這些實驗指出了軟件基礎(chǔ)結(jié)構(gòu)如應(yīng)用服務(wù)器實例可能成為瓶頸,并給出了一些解決方案來減輕這種問題(包括在相同或不同機器上的群集)。這個問題需要在J2EE應(yīng)用的負載計劃或大小確定時優(yōu)先考慮,因為這直接影響到應(yīng)用的擴展性。這種想法很重要,下面我通過一個情景對話來表達。
  
  項目經(jīng)理:你的意思是應(yīng)用服務(wù)器(代表軟件基礎(chǔ)結(jié)構(gòu))會成為系統(tǒng)的瓶頸。
  性能架構(gòu)師:是的
  
  項目經(jīng)理:那為什么這種情況不是經(jīng)常發(fā)生。
  性能架構(gòu)師:是的,因為有時候瓶頸首先發(fā)生在硬件或應(yīng)用本身。這時候應(yīng)用服務(wù)器還沒有使用到所有的擴展性。
  
  項目經(jīng)理:這是事實。那么解決這種瓶頸的方法就是使用群集。假如有足夠的硬件資源就在同一臺機器上跑群集否則在多臺機器中配置。
  性能架構(gòu)師:是的。這也是在這篇文章中所得到的。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 沾益县| 雅江县| 宁波市| 油尖旺区| 永年县| 巫溪县| 南丹县| 大悟县| 马山县| 祥云县| 象山县| 怀集县| 仲巴县| 永济市| 永定县| 华坪县| 洛阳市| 抚宁县| 泾川县| 阳西县| 敖汉旗| 东方市| 乌什县| 吴桥县| 营口市| 全州县| 搜索| 宜兰市| 枞阳县| 若羌县| 虹口区| 井冈山市| 扶绥县| 垫江县| 新疆| 自贡市| 永善县| 凤城市| 巴南区| 阳信县| 景东|