Tomcat 7 vs Spray上的servlet

有没有人在以下两种组合中对他/她的应用程序的性能进行了基准测试?

  • 使用spray-servlet构建,并部署在JVM 7上的Tomcat 7上
  • 使用喷雾罐构建并在JVM 7上作为jar部署
  • 我猜想2)在大多数情况下执行得比1更好),即使1)使用servlet 3.0功能。

    我问的原因是我的团队需要权衡性能和应用程序部署/管理(自动扩展,监控等)的简易性,因为AWS Elastic Beanstalk的默认java webapp配置是运行Tomcat的Linux。

    任何对此的意见将不胜感激。 干杯


    你应该看看这里:http://spray.io/blog/2013-05-24-benchmarking-spray/

    几天前,techempower的人们发布了他们广受欢迎的当前一系列网络框架基准测试的第5部分,这是喷雾器参与其中的第一个。 Techempower基准测试包含许多不同的测试场景,这些测试场景运行着Web框架/堆栈的各个部分,其中只有一个我们为“JSON序列化”测试提供了基于喷雾的实现。 这个基准测试目标框架层的其他部分(如数据库访问),其喷射故意不提供。

    以下是在第五轮JSON测试中公布的结果(但显示的是完全相同的数据):

    在这里输入图像描述

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

    分析

    在上面的图表中,我们比较了专用硬件上的性能结果和EC2机器上的性能结果。 我们预计两者之间会有很强的相关性,大多数数据点都集中在趋势线上。 距离趋势线很远的“bechmarkees”或者不能放大或缩小以及“包装”,或者在其“弱”一侧遭遇某些配置问题(例如,i7上的cpoll_cppsp和洋葱或双子/小服务程序和火花在EC2上)。 无论如何,可能会建议对问题的原因进行一些调查。

    除了绘制在30秒运行结束时由wrk报告的平均请求/秒数之外,我们还包括基于wrk报告的平均请求延迟的请求计数的替代预测(例如,64位平均延迟为1毫秒的平均延迟连接应该导致大约64K的平均请求/秒)。 理想情况下,这些预测结果应该与实际报告的结果大致相符(禁止任何舍入问题)。

    然而,正如你在图表中看到的那样,两个结果在一些BenchMark中差别很大。 对我们来说,这是一个迹象表明,在各自的测试运行中,某些事情并不完全正确。 也许运行wrk的客户端遇到了一些其他负载,这会影响其生成请求或正确测量延迟的能力。 或者我们看到wrk的某些“非正统”请求延迟采样实现的结果。 无论哪种方式,我们对平均的有效性的信心。 如果两个结果更接近对齐,请求计数和延迟数据会更高。

    外卖

    这个基准的特殊价值来源于Techempower团队设法包含的大量不同框架/库/工具集。 第5轮为使用17种不同语言编写的近70个(!)Benchmarke非常不同的组提供结果。 因此,它可以很好地说明不同解决方案可以预期的粗略性能特征。 例如,您是否预计Ruby on Rails应用程序的运行速度比基于JVM的良好选择慢10-20倍? 大多数人会假设性能上的差异,但其实际数量可能会令人惊讶,并且当然有趣,不仅对于目前正在面临技术决策的人而言。

    对于我们作为HTTP堆栈的作者,我们从稍微不同的角度来看这样的基准。 我们面临的主要问题是:与同一平台上的替代方案相比,我们的解决方案的性能如何? 我们可以从他们身上学到什么? 我们在哪里仍然有优势的潜力,我们似乎留在桌面上? 在写一个类似喷雾的图书馆时,各种架构决策对于性能有什么影响?

    从上面的图表可以看出,我们可以非常满意喷雾在这个特定基准中的表现。 它优于EC2上的所有其他基于JVM的HTTP堆栈,甚至可以在专用硬件上查看延迟数据的吞吐量。

    这向我们表明,我们关于优化喷雾的HTTP实施的工作正在取得成效。 此基准测试中使用的版本是最近一次1.1版本的喷涂,其中包括为即将发布的1.0 / 1.1 / 1.2三合一版本计划的大部分(但不是全部)性能优化(Akka 2.0为1.0,Akka 2.1为1.1,Akka 2.2为1.2 )。

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

    不幸的是,它没有。 这个测试可以使各种HTTP实现的所有逻辑的百分比小一些,以便能够对它们进行正确的排名。 它给出了一个指示,但几乎没有。

    少了什么东西?

    基准愿望清单

    让我们仔细查看Techempower基准测试的“JSON序列化测试”实际执行的内容。 客户端为服务器创建8到256个长期并发的TCP连接,并通过这些连接触发尽可能多的测试请求。 每个请求都会冲击服务器的NIC,通过Linux内核的网络堆栈冒出来,由benchmarkees IO抽象获取,并在实际由“应用程序逻辑处理”之前传递到HTTP层(它被解析并可能被路由) ”。 在这个基准测试的情况下,应用程序仅创建一个小的JSON对象,将其放入HTTP响应中,然后将其发送回堆栈,然后再次沿相反方向通过所有层。

    由于这样的基准测试Benchmark基准测试的效果如何:

  • 与“拉出”到达套接字的原始数据有关的内核进行交互
  • 管理其内层之间的内部通信(例如IO - HTTP应用程序)
  • 分析HTTP请求并呈现HTTP响应
  • 序列化小型JSON对象
  • 它通过少量的长期连接使用带有固定HTTP头的小请求来完成所有这些。 而且,它不会给我们一个线索,而是让我们知道堆栈各个部分的潜在优势和弱点。

    如果我们想更深入地了解喷雾的性能与其基于JVM的竞争对手相比如何,以及它的优势和劣势在哪里,我们需要设置一系列的基准来衡量:

  • 原始IO性能:1表示50K长期并发连接,最小请求和响应大小
  • 连接设置开销:每个请求连接的数量不同,最小的请求和响应大小
  • HTTP请求解析器性能:请求标头和标头值大小的变化数量,变化的实体大小
  • HTTP响应呈现器性能:响应标头和标头值大小的变化,变化的实体大小
  • HTTP分块性能:分块请求和不同数量和大小消息块的响应
  • HTTP流水线性能:不同数量的请求批处理大小
  • SSL性能:1表示50K长期连接,最小请求和响应大小
  • Websocket性能
  • 系统和JVM级指标(CPU利用率,GC活动等)
  • 如果我们有一个基准测试套件来产生这样的数字,我们会感到更舒适的是建立一个适当的基于性能的喷雾排名和其替代方案。 如果有像“持续基准测试”基础架构那样的东西,那么这会不会很棒?它会在简单的git推入其存储库时自动生成这些基准测试结果?

    哦,好吧......我想我们不断增长的待办事项列表刚刚收到一个标记为重要的项目...... :)

    链接地址: http://www.djcxy.com/p/74887.html

    上一篇: servlet on Tomcat 7 vs Spray

    下一篇: Auto layout visual programming language for an array of views