Performance Tomcat7上的Spray servlet与JVM上的Spray can jar

Performance Tomcat7上的Spray servlet与JVM上的Spray can jar,performance,tomcat,deployment,amazon-web-services,spray,Performance,Tomcat,Deployment,Amazon Web Services,Spray,是否有人在以下两种组合中对其应用程序的性能进行基准测试 使用spray servlet构建并部署在JVM 7上的Tomcat 7上 使用spray can构建并作为jar部署在JVM 7上 我想在大多数情况下,2)的性能比1)要好,即使1)使用servlet 3.0特性 我提出这个问题的原因是,我的团队需要权衡性能和应用程序部署/管理的易用性(自动伸缩、监控等),因为AWS Elastic Beanstalk的默认java webapp配置是运行Tomcat的Linux 如果您对此有任何意见,我

是否有人在以下两种组合中对其应用程序的性能进行基准测试

  • 使用spray servlet构建并部署在JVM 7上的Tomcat 7上
  • 使用spray can构建并作为jar部署在JVM 7上
  • 我想在大多数情况下,2)的性能比1)要好,即使1)使用servlet 3.0特性

    我提出这个问题的原因是,我的团队需要权衡性能和应用程序部署/管理的易用性(自动伸缩、监控等),因为AWS Elastic Beanstalk的默认java webapp配置是运行Tomcat的Linux


    如果您对此有任何意见,我们将不胜感激。干杯

    你应该看看这里:

    几天前,techempower的工作人员发布了他们广受欢迎的当前一系列web框架基准测试的第5轮,这是spray参与的第一个测试。techempower基准测试由许多不同的测试场景组成,它们执行web框架/堆栈的各个部分,其中只有一个我们提供了基于spray的实现:“JSON序列化”测试。该基准测试的其他部分以框架层为目标(如数据库访问),spray故意不提供这些层

    以下是第5轮JSON测试的公布结果,以另一种可视化方式呈现(但显示的数据完全相同):

    测试在两台通过GB以太网链路连接的相同机器之间运行,一台客户端机器生成HTTP请求,wrk作为负载生成器,另一台服务器机器运行各自的“基准测试”。为了提供性能随底层硬件平台变化的指示,所有测试运行两次,一次在两个EC2“m1.large”实例之间,一次在两个专用i7-2600K工作站之间

    分析

    在上图中,我们比较了专用硬件和EC2机器上的性能结果。我们预计两者之间会有很强的相关性,大多数数据点都集中在趋势线周围。远离趋势线的“bechmarkees”要么不能像“pack”那样向上或向下扩展,要么在其“薄弱”方面存在一些配置问题(例如i7上的cpoll_cppsp和onion,或者EC2上的gemini/servlet和spark)。无论哪种方式,都可能建议对问题的原因进行一些调查

    除了绘制wrk在30秒运行结束时报告的平均请求数/秒外,我们还根据wrk报告的平均请求延迟(例如,64个连接的平均延迟为1ms,平均请求数应为64K/s)。理想情况下,这些预测结果应大致与实际报告的结果相匹配(不包括任何舍入问题)

    然而,正如您在图表中看到的,对于一些基准测试,这两个结果有很大的不同。对我们来说,这表明在各自的测试运行期间有些事情不太正确。可能运行wrk的客户机遇到了一些其他负载,影响了其生成请求或正确测量延迟的能力。或者我们看到了wrk的某种“非正统”请求延迟采样实现的结果。无论哪种方式,如果两个结果更加一致,我们对平均请求计数和延迟数据的有效性的信心都会更高

    外卖

    这个基准的特殊价值源于techempower团队设法包含的各种框架/库/工具集的数量。第5轮提供了用17种不同语言编写的将近70个(!)基准测试的结果。因此,它很好地说明了不同解决方案的大致性能特征。例如,您是否希望RubyonRails应用程序的运行速度比基于JVM的好应用程序慢10-20倍?大多数人都会假设性能差异,但其实际大小可能会令人惊讶,而且肯定很有趣,不仅是对于目前面临技术决策的人来说

    作为HTTP协议栈的作者,我们从稍微不同的角度看待这些基准测试。我们面临的主要问题是:与同一平台上的备选方案相比,我们的解决方案的性能如何?我们能从他们身上学到什么?我们在哪些方面仍然有潜力进行优化,而我们似乎还没有进行优化?编写spray这样的库时,各种架构决策对性能有什么影响

    从上图中可以看出,我们对spray在这个特定基准中的性能非常满意。它在EC2上的性能优于所有其他基于JVM的HTTP堆栈,而且从延迟数据预测的吞吐量来看,甚至在专用硬件上也是如此

    这向我们表明,我们在优化spray的HTTP实现方面的工作正在取得成效。此基准测试中使用的版本是最近的spray 1.1夜间版本,其中包括为即将到来的1.0/1.1/1.2三重版本(1.0用于Akka 2.0,1.1用于Akka 2.1,1.2用于Akka 2.2)计划的大部分(但不是全部)性能优化

    但是,这个基准测试是否证明spray是JVM上最快的HTTP堆栈

    不幸的是,事实并非如此。这一测试将各种HTTP实现的所有逻辑的一小部分进行测试,以便能够正确地对它们进行排序。它给出了一个指示,但仅此而已

    少了什么

    基准测试愿望列表

    让我们更仔细地看看techempower基准测试的“JSON序列化测试”实际执行的是什么。客户端创建到服务器的8到256个长期并发TCP连接,并在这些连接上激发尽可能多的测试请求。每个请求