将涡轮增压器添加到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个用户屏幕组成的更复杂的用例,其中用户将使用四个步骤来完成用例场景。 四个步骤是
- 用户通过登录页面登录
- 提交登录凭据后,向用户显示主页。
- 获取股票的报价,其符号由用户在主页屏幕上输入。
- 在每个符号下方提交要购买的数量后,购买股票。
所有请求都使用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
将涡轮增压器添加到JEE Apps相关推荐
- jee过滤器应用场景_将涡轮增压器添加到JEE Apps
jee过滤器应用场景 我扮演的关键角色之一是在本地社区中传播Akka. 作为讨论的一部分,人们通常会想到的问题/疑问是Akka如何针对编写良好的Java / JEE应用程序提供更好的可伸缩性和并发性. ...
- 全球上线!ABB中国涡轮增压器分拆 – 数据清理阶段完成
ABB是数字行业的技术前沿者,拥有四项主营业务:电气化,工业自动化,运动控制以及机器人和离散自动化.ABB总部位于瑞士苏黎世,业务遍及100多个国家,拥有约105,000名员工.2021年,该公司的收 ...
- 电池寿命增压器为android,一个涡轮增压器的寿命只有10年?
随着技术的不断的进步,欧洲严格的排放限制,涡轮增压车型逐渐成为市场上的主流.但问题是,很多人都有疑问,涡轮增压发动机,真的寿命短吗?维护费用真的很高的吗?今天就来说说. 涡轮增压器如何工作的? 涡轮增 ...
- 挖机的涡轮增压器为什么会窜(漏)机油呢?有什么后果?
烧机油,几乎是大多数司机的痛点,但凡是辆车都脱离不了机油消耗的命运,而"过量"的机油消耗却会带来发动机的严重性损伤.而涡轮增压器窜机油就是导致"过量"消耗机油的 ...
- 沃尔沃T5发动机涡轮增压器
电控废气涡轮增压系统的结构与工作原理_马明芳 https://wenku.baidu.com/view/a9700e5cda38376baf1faea4.html 废气涡轮增压控制系统的工作原理 ht ...
- 在stm32f103上运行nuttx,添加app和driver的流程
以stm32f103的led(PC13)为例子 heyi@ubuntu:~/nuttx/heyi_1_nuttx/nuttx/tools$ ./configure.sh stm32f103-minim ...
- 微软 appcenter_使用Visual Studio AppCenter使用Xcode和IPA托管构建自动化
微软 appcenter Using Xcode CLI to create build automation and upload scripts for your CI/CD or local m ...
- 尾气冒黑烟是什么问题_对机动车环保检测尾气排放的了解!
"史上最严排放标准"-- 国六已经实施. 这意味着: 国五车保值率将受到严重打击 国四车年审.上牌.限行等受限制 国三车更惨,难逃报废的命运··· 总结起来,一个字: 对于很多老车 ...
- 柴油发电机组常见故障及处理方法
A.机组无法启动 1.机组启动电瓶容量不足,应对电瓶进行维护(充电.补液)必要时更换此电瓶. 2.控制屏没有上电,应检查控制屏上熔断器是否熔断. 3.启动继电器故障,应更换此继电器 4.启动马达故障, ...
最新文章
- java 下一代,什么是"下一代插件"对Java
- ios键盘横屏_cocos2d 3.2版本IOS因键盘引起横竖屏问题
- Python如何读取文件
- PCGen的垃圾收集分析
- 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(2月6日-2月12日)
- pandas 画折线图_如何从Pandas数据帧绘制多个折线图
- opc client for php,使用vb/vba作为OPC client
- java环境变量配置失败_java环境变量配置失败是怎么回事?出错解决办法分享
- Citrix XenApp工作原理
- sparc架构代码分析-setup_arch函数分析
- window7磁盘分区
- java幸运抽奖项目
- noob学python #1
- python unpack_python struct中pack和unpack
- IDA及插件MIPSROP安装——《揭秘家用路由器0day漏洞挖掘技术》学习笔记
- windows系统背景淡绿护眼色设置
- Datawhale零基础入门数据挖掘-Task5模型融合
- Web全栈~04.css入门
- ADSL后台初始密码大全
- 费马小定理看了等于没看证明
热门文章
- kafka再均衡监听器测试
- Flex布局 让你的布局更完美
- 动态资源Servlet接口
- orm提取指定列_使用ORM提取数据很容易! 是吗?
- aws jenkins_Jenkins在AWS上(第1部分)
- 堆栈溢出 java_堆栈溢出回答了我们所不知道的Java首要问题
- aws fargate_借助Fargate和EKS,AWS甚至可以实现Cloud-ier和Kuberneties-ier
- 使用Spring Cloud Gateway保护反应式微服务
- 混合多云每个人都应避免的3个陷阱(第2部分)
- JPA persistence.xml SQL脚本定义