將渦輪增壓器添加到JEE Apps

我扮演的關鍵角色之一是在本地社區中傳播Akka。 作為討論的一部分,人們通常會想到的問題/疑問是Akka如何針對編寫良好的Java / JEE應用程序提供更好的可伸縮性和并發性。

由于底層硬件/ JVM保持不變,因此參與者模型如何比傳統的JEE應用程序發揮更多的功能? 為了展示懷疑者,我們決定在現有的JEE Web應用程序中進行小型測試,對業務邏輯進行重新建模以利用參與者模型,并對該模型進行測試。

日交易者應用

DayTrader是圍繞在線股票交易系統范例構建的基準應用程序。 該應用程序允許用戶登錄,查看其投資組合,查找股票報價以及買賣股票。 DayTrader不僅是功能測試的出色應用程序,而且還提供了一組標準的工作負載,用于表征和衡量應用程序服務器和組件級別的性能。
DayTrader建立在一套核心的Java EE技術上,該技術包括用于表示層和Java數據庫連接(JDBC)的Java Servlet和JavaServer Page(JSP),Java消息服務(JMS),企業JavaBeans(EJB)和消息驅動Bean (MDB)用于后端業務邏輯和持久層。 有關DayTrader的更多信息,請點擊這里 。 DayTrader似乎是測試我們理論的應用的合適之選。 我們決定使用JSP-> JDBC模型來使事情保持簡單和可比性。 我們采用了2個用例,并對業務邏輯進行了重新建模以使用TypedActors。

場景1 –報價/交易屏幕–獲取報價

在DayTrader應用程序的“報價/交易者”屏幕中,有一個工具,可通過單擊“報價”按鈕來選擇報價列表的詳細信息。 該股票的報價將被檢索并顯示給用戶。

在標準流程中,獲取報價請求由專用的TradeAction處理,該TradeAction在內部調用TradeDirectJEEE對象的getQuote()接口。 對于每個請求,都會創建一個TradeAction對象。

在更新的流程中,創建了一組工作人員角色,它們偵聽來自各個模塊的請求以獲取報價詳細信息。 TradeActionManager將在開始時創建Typed actor池,并且還將執行將傳入請求路由到Typed actor的操作,Typeed actor包含TradeAction對象以調用getQuote函數。 由于使用了類型化角色,因此相同的TradeActionManager可以在現有應用程序中進行最小的更改的情況下滿足其他TradeAction調用。

原始和修改后的DayTrader應用程序都由20個,50個,75個和100個Typed actor以及許多Trade Action對象執行。

該圖顯示了每種測試方案的相對吞吐量,深紅色的長條表示原始應用程序的吞吐量值,其他長條表示不同角色池大小的Akka應用程序的吞吐量。

  • Akka Typed Actor的每秒吞吐量比原始DayTrader應用程序(對于較大的actor池大小)要好,并且具有較少的內存使用(尤其是700和300個用戶*每個請求2個)。
  • 原始應用程序需要額外的168 MB來處理1400個請求(700個用戶,每個請求2個請求),而對于Typed Actor池大小為50個actor的修改后的應用程序,用于服務相同類型請求量的額外內存被觀察為104 MB, 提高了38% 。 對于75和100個類型的actor,觀察到額外的內存使用量在126MB-136MB之間。

該圖顯示了每種測試方案的相對吞吐量,深紅色的條表示原始應用程序的吞吐量值,其他條表示不同的參與者池大小使用Akka的應用程序的吞吐量。

使用Jmeter對獲取報價的呼叫模擬是在相同的高負載條件下,分別針對300個用戶,分別針對100個和200個演員的不同系統和Akka設置進行的,大約需要45分鐘。

  • 已觀察到,在相同條件下,相對于原始應用程序,將Typed Actor的數量從100增加到200相對可以將吞吐量提高約15%和18%。
  • 還可以觀察到,將堆大小增加到1024 MB,并將垃圾回收方法更改為并發標記清除,有助于提高高負載條件下的吞吐量。

方案2 – 4個屏幕–登錄,主頁,獲取報價,購買

嘗試了一個由4個用戶屏幕組成的更復雜的用例,其中用戶將使用四個步驟來完成用例場景。 四個步驟是

  1. 用戶通過登錄頁面登錄
  2. 提交登錄憑據后,向用戶顯示主頁。
  3. 獲取股票的報價,其符號由用戶在主頁屏幕上輸入。
  4. 在每個符號下方提交要購買的數量后,購買股票。

所有請求都使用TradeAction對象為請求提供服務。 TradeAction對象實現TradeService接口。 因此,在這種情況下,也應用了為報價/交易屏幕實現的相同TypedActor模型–在上一種情況下確定的“獲取報價”業務情景,而且在TradeAction模塊中幾乎沒有或沒有任何更改。

使用Jmeter對包含四個屏幕的用例進行了模擬,為300個具有不同Typed Actor池大小的用戶創建了用例。 用戶數量設置為在60秒內增加到最多300個用戶,并且測試運行了15分鐘。

可以觀察到,將actor的數量從0增加到300可將吞吐量提高大約8%。

超過300個Typed actor的任何增加都顯示出較小的改進。

與原始應用程序的內存使用量相比,使用相同類型的actor的應用程序的峰值內存使用率在相同吞吐量(100個類型化的actor)的情況下提高了約30-40%。

結論

即使進行了簡單的更改,運行在標準筆記本電腦上的應用程序仍能夠提供更好的吞吐量( + 8% ),并且整體內存使用率下降了38% ,這表明actor模型的效率以及Akka對內存和線程的處理。

測試環境詳情

  • 處理器– Intel Core i5-2410M CPU @ 2.30 GHz
  • 內存– 4 GB
  • 操作系統– Windows 7 Enterprise
  • 應用程序服務器– Apache Geronimo v2.2.1
  • 編譯器和構建工具– Apache Maven v2.2.1
  • Java版本– 1.7.0_03
  • Akka版本– Akka 2.0.2
  • 數據庫– Apache Derby

我們可以做的其他優化:

  • 基于請求模式進行分組的Akka未類型化參與者池。 說一個小池僅滿足不那么頻繁使用的請求,而一個大池(或多個池)滿足更頻繁使用的請求(例如獲取報價或獲取帳戶)。 可以基于請求模式更改池大小的比率,以獲得更好的吞吐量。
  • 使用actor的PreStart和PostStart函數為數據庫添加初始化任務,例如獲得連接和關閉連接或任何其他初始化任務。
  • Akka無類型演員,用于并發處理持股,同一帳戶和會話的多個報價。
  • 使用Akka actor層次結構,以便有多個級別的actor,而更高級別的supervisor actor將一個任務劃分為較小的子任務,并委派給下一級別的子actor。
  • 優化actor系統的Akka調度程序線程池大小。

我想對我的同事Chintu Vijay表示感謝,他進行并運行了測試。

參考: Akka Essentials博客上的JCG合作伙伴 Munish K Gupta 向JEE Apps添加了渦輪增壓器 。

翻譯自: https://www.javacodegeeks.com/2013/01/adding-turbochargers-to-jee-apps.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370773.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370773.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370773.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python package_python之package定義

一.簡單說明 python是通過module組織代碼的,每一個module就是一個python文件,但是modules是通過package來組織的。我們平時在簡單測試的時候 一般就是幾個Python文件存放在同級的目錄下,但是當我們開始嘗試開發更為復雜的項目時,p…

html 手機端無法拖動地圖,關于騰訊地圖api的禁止地圖拖動問題

禁用滾動和拖動*{margin:0px;padding:0px;}body, button, input, select, textarea {font: 12px/16px Verdana, Helvetica, Arial, sans-serif;}p{width:603px;padding-top:3px;overflow:hidden;}.btn{width:142px;}#container{min-width:600px;min-height:767px;}//初始化函數…

《一起》個人進展——Day07

昨天做了些什么:實現登錄界面的美化 今天的計劃:還是準備進行與其他界面的融合 遇到的困難:代碼了解不夠,融合起來會出現bug轉載于:https://www.cnblogs.com/gxt-/p/6828131.html

epoll nio區別_【總結】兩種 NIO 實現:Selector 與 Epoll

我想用這個話題小結下最近這一階段的各種測試和開發。其實文章的內容主要還是想總結一下NIO Socket,以及兩種不同操作系統實現NIO的方式,selector和epoll。問題應該從服務器端開始說起。我們都寫過net包下的socket,用socket的accept方法來等待…

MapReduce的工作原理

一、MapReduce模型框架 MapReduce是一個用于大規模數據處理的分布式計算模型,最初由Google工程師設計并實現的,Google已經將完整的MapReduce論文公開發布了。其中的定義是,MapReduce是一個編程模型,是一個用于處理和生成大規模數據…

react實現多行文本超出加省略號

http://www.css88.com/archives/5206 overflow : hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; 根據該文章方法,放在react項目中發現并不能實現,仔細觀察發現原來react解析出來的css樣…

Google Guava MultiMaps

番石榴 這是系列文章中的第一篇,我將嘗試解釋和探索Google很棒的Guava java庫 。 我在搜索Apache Commons Collections的通用版本時遇到了番石榴(Guava)–我需要一個Bimap并且厭倦了必須使用強制類型轉換來填充我的代碼–但是我發現要好得多…

qq群 html,我的群組-普通群組.html

我的群組-普通群組$axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; };$axure.utils.getOtherPath function() { return resources/Other.html; };$axure.utils.getReloadPath function() { return resou…

查看PLC IP 端口_西門子828D數控系統X130接口通訊怪異現象(X130手動設置的 IP)...

西門子828D數控系統,調試PLC過程中遇到網絡通信怪異問題(不能直連非要加個路由器),筆記本電腦的以太網網絡直接連接顯示網絡電纜被拔出,如下圖所示:奇怪,怎么出現這種情況了呢,因為我用這臺電腦調試過別的P…

基于嵌入式系統的gnash最小庫依賴關系

已經對gnash的依賴庫作了詳細的分析,下邊是必須依賴的庫:GIF Required libungif-devlibxml2 Required libxml2-devPNG Requir…

git 創建webpack項目_一次create-react-app創建項目升級webpack的流水賬

不再贅述為什么要升級webpack4,有興趣的小伙伴可以看一下 知乎:如何評價webpack4下面擼起袖子開干:克隆項目,新建分支git checkout -b feature_webpack_upgrade# 相當于以下兩句的簡寫git branch feature_webpack_upgradegit chec…

bzoj1263

貪心 n%31 分出一個4&#xff0c;其余用3&#xff0c;n%32&#xff0c;分出一個2&#xff0c;其余用3&#xff0c;然后高精度就行了 #include<bits/stdc.h> using namespace std; const int N 5005; struct BigInt {int len;int a[N];BigInt() { memset(a, 0, sizeof(a)…

c語言volatile_[技術]為什么單片機C語言編程時某一變量有時亂碼

最近一個項目里面&#xff0c;在KEIL中用C語言在單片機里面定義了一個狀態機全局變量&#xff0c;這個變量隨時會改變&#xff0c;用于切換觸摸屏的界面&#xff0c;可是程序運行中出現了一個問題&#xff0c;這個狀態機號總是出現了被莫名奇妙改變的問題&#xff0c;導致觸屏不…

沙箱Java代碼

在上一篇文章中&#xff0c;我們研究了如何保護移動Java代碼 。 這樣做的一種選擇是在籠子或沙箱中運行代碼。 這篇文章探討了如何為Java應用程序設置這樣的沙箱。 安全經理 Java中支持沙箱的安全性設施是java.lang.SecurityManager 。 默認情況下&#xff0c;Java在沒有Se…

微型計算機2017年9月上,2017年9月計算機一級考試WPS Office沖刺題

2017年9月計算機一級考試WPS Office沖刺題2017年下半年計算機一級考試將在9月份進行&#xff0c;為了方便考生備考計算機一級考試。下面是小編為大家帶來的計算機一級考試WPS Office沖刺題&#xff0c;歡迎閱讀。沖刺題一&#xff1a;1、PowerPoint 演示文稿和模板的擴展名是【…

七. 多線程編程5.創建多線程

到目前為止&#xff0c;我們僅用到兩個線程&#xff1a;主線程和一個子線程。然而&#xff0c;你的程序可以創建所需的更多線程。例如&#xff0c;下面的程序創建了三個子線程&#xff1a;// Create multiple threads.class NewThread implements Runnable { String name; /…

11尺寸長寬 iphone_弱電工程LED顯示屏尺寸規格及計算方法

前言&#xff1a;led屏幕在生活中&#xff0c;隨處可見&#xff0c;顯示屏、廣播屏等等&#xff0c;但是led尺寸怎么計算的&#xff0c;你知道嗎&#xff1f;今天我們一起了解一下led屏幕尺寸的計算方法。正文&#xff1a;一、點間距的計算1、各單元板常見型號及尺寸LED屏普遍是…

marquee標簽的使用

<!DOCTYPE html> <html> <head><meta charset"utf-8" /><title>演示marquee</title><style type"text/css">*{padding: 0px;margin: 0px;}marquee{border: 1px solid purple;}img{width: 360px;height: auto;}&…

32位數據源中沒有mysql_[SpringBoot實戰]快速配置多數據源(整合MyBatis)

前言由于業務需求&#xff0c;需要同時在SpringBoot中配置兩套數據源&#xff08;連接兩個數據庫&#xff09;&#xff0c;要求能做到service層在調用各數據庫表的mapper時能夠自動切換數據源&#xff0c;也就是mapper自動訪問正確的數據庫。本文內容&#xff1a;在SpringbootM…

考研計算機冷門學校,考研5個冷門的985院校 別隨大流,這些幾所也是很不錯的...

導語&#xff1a;想必大家考研的目的有很多&#xff0c;最主要的就是想去更好的學校提升自己&#xff0c;大部分會肯定是會更傾向于985這類的院校&#xff0c;每年其實除了那些被“擠破頭”的985院校&#xff0c;其實還有不少“低調”的985院校是非常值得報考的&#xff0c;下面…