jee过滤器应用场景_将涡轮增压器添加到JEE Apps

jee过滤器应用场景

我扮演的关键角色之一是在本地社区中传播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 Actors的每秒吞吐量比原始DayTrader应用程序(对于更大的actor池大小)要好,并且具有较少的内存使用(尤其是700和300个用户*每个请求2个)。
  • 原始应用程序需要额外的168 MB来处理1400个请求(700个用户,每个请求2个请求),而对于类型化参与者池大小为50个参与者的修改后的应用程序,用于服务相同类型请求量的额外内存被观察为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

jee过滤器应用场景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 列 随机数_mysql mmp 某字段插入随机数!(说不定那天就忘记了,存下来再说)...

UPDATE 表名 SET 字段名ceiling(rand()*500000500000) WHERE (条件);原文链接:http://blog.csdn.net/bobay/article/details/24797525MMP 上面的只能更新一条UPDATE 表名 SET 字段名cast(rand(checksum(newid()))*(24)1 as int) WHERE (条件);上面的就是每条都更新的…

适用于Java开发人员的Elasticsearch:Elasticsearch生态系统

本文是我们学院课程的一部分,该课程的标题为Java开发人员的Elasticsearch教程 。 在本课程中,我们提供了一系列教程,以便您可以开发自己的基于Elasticsearch的应用程序。 我们涵盖了从安装和操作到Java API集成和报告的广泛主题。 通过我们简…

matplotlib markers的类型

https://matplotlib.org/api/markers_api.html matplotlib markers 所有可能的markers定义如下: marker symbol description "." point "," pixel "o" circle "v" triangle_down "^" triangle_up &…

android实时声音信号波形_Android输出正弦波音频信号(左右声道对称)-阿里云开发者社区...

转载请说明出处!作者:kqw攻城狮出处:个人站 | CSDN需求:左右声道分别输出不同的音频数据,波形要是一个正弦波,左右声道还要对称!对硬件不是很了解,说是要通过音波避障。效果图之前已…

matplotlib color可选

matplotlib color matplotlib中color可用的颜色: cnames { aliceblue: #F0F8FF, antiquewhite: #FAEBD7, aqua: #00FFFF, aquamarine: #7FFFD4, azure: #F0FFFF, beige: #F5F5…

python之scrapy爬取jd和qq招聘信息

1、settings.py文件 # -*- coding: utf-8 -*-# Scrapy settings for jd project # # For simplicity, this file contains only settings considered important or # commonly used. You can find more settings consulting the documentation: # # https://doc.scrapy.org…

opencl 加速 c语言程序_Win10应用获得面向OpenCL和OpenGL的兼容层

今年早些时候,微软宣布正在努力在Windows 10的Direct3D 12(D3D12)中启用对OpenCL和OpenGL映射层的支持。为了启用映射层,解决设备上没有OpenCL和OpenGL硬件驱动时的兼容性问题,公司目前已经在微软商店中发布了兼容性包。该兼容性包的标题为 &…

matplotlib plt.subplot

matplotlib plt.subplot 用于在一个Figure对象里画多个子图(Axes)。 其调用格式:subplot(numRows, numCols, plotNum),即(行、列、序号)。 图表的整个绘图区域被分成numRows行和numCols列,plotNum参数指定创建的Axes…

javaee和javaee_JavaEE概念简介

javaee和javaee这篇文章旨在阐明J2EE范例中使用的首字母缩写词和概念。 J2EE代表Java to Platform,Entreprise Edition。 它使创建模块化Java应用程序得以部署在应用程序服务器上。 它依赖于Java SE,Java SE是一组Java库的核心,所有Java应用程…

卷boot仅剩余XX空间

参见: https://blog.csdn.net/hnzcdy/article/details/52381844 转载于:https://www.cnblogs.com/lxc1910/p/11102528.html

python多分支结构实例_JS优化多分支结构(经典)

多分支结构的优化有很多好处:既方便代码维护,又可以提升代码执行效率。例如,设计有多个条件,只有当多个条件都成立时,才允许执行特定任务。示例1遵循简单的设计思路,使用多重分支逐个检测这些条件。if (a) …

matplotlib plt.plot

实例1 import matplotlib.pyplot as plta [1, 2, 3, 4] # y 是 a的值,x是各个元素的索引 b [5, 6, 7, 8]plt.figure(demon plot) plt.plot(a, b, r--, label aa) plt.xlabel(this is x) plt.ylabel(this is y) plt.title(this is a demo) plt.legend(locupper l…

使用UAA OAuth2授权服务器–客户端和资源

在上一篇文章中,我介绍了如何使用Cloud Foundry UAA项目启动OAuth2授权服务器,以及如何使用OAuth2授权代码流程中涉及的一些参与者来填充它。 我已经在Digital Ocean网站上找到了这篇文章,在描述OAuth2授权代码流方面做得非常好,…

二分查找思想

二分查找 二分查找思想应用于对有序的数组进行查找操作。 时间复杂度 二分查找也称为折半查找,每次都能将查找区间减半,这种折半特性算法时间复杂度为O(logn)。 mid计算 有两种计算中值mid的方式: m(lh)/2ml(h-l)/2lh可能出现加法溢出&#x…

ad20如何导入库_脱水防锈油如何使用才正确?

导Lead语根据调查了解,很多厂家在使用脱水防锈油的办法不正确而导致防锈效果失效或不明显。那么脱水防锈油应该如何使用才正确呢?中阳润滑油为大家简单讲述如下。脱水防锈油脱水防锈油是由矿物油及脱水、防锈抗氧化等多种添加剂配制而成,既可…

matplotlib  plt.lengend

参考文档 https://www.cnblogs.com/lfri/p/12248629.html 官方文档 https://matplotlib.org/api/_as_gen/matplotlib.pyplot.legend.html matplotlib plt.lengend 作用:用于给图像加图例。 1、语法参数如下: matplotlib.pyplot.legend(*args, **kwargs) 2、…

Python进阶(上下文管理器与with语句)

/*上下文管理器必须有__enter__和__exit__方法*/ class MyResource:def __enter__(self):print(链接资源)return self/*__exit__返回True表示异常只会在__exit__中被捕获,不会继续传递到with语句的之外的except中,如果返回false,则会把异常也…

matplotlib  plt.scatter

https://www.cnblogs.com/lfri/p/12248629.html matplotlib plt.scatter 作用:画散点图 plt.scatter() 参数如下: x,y X和Y是长度相同的数组 s size,点的大小,标量或与数据长度相同的数组 c color,点的颜色,标量或与数据长…

Git 备忘录

整理了一下工作中常用的 Git 操作,持续更新中...merge单个文件例如 B分支想要合并A分支的某个文件首先,我们切换到B分支 git checkout branch B之后,我们checkout A 分支的a文件,git checkout --patch A a路径 最后&#xff0c…

spark任务shell运行_大数据系列:Spark的工作原理及架构

介绍本Apache Spark教程将说明Apache Spark的运行时架构以及主要的Spark术语,例如Apache SparkContext,Spark shell,Apache Spark应用程序,Spark中的任务(Task),作业(job)和阶段(stage)。此外,我们还将学习…