【问题标题】:How do I get quasar fibers working optimally with JSF?如何让类星体纤维与 JSF 以最佳方式工作?
【发布时间】:2016-02-04 03:15:08
【问题描述】:
如何让 quasar 与 JSF 以最佳方式工作?我根据 FiberHttpServlet 创建了一个与 Comsat Quasar 集成的 JSF 项目,但在数量上没有看到任何改进。
我的项目在这里:https://github.com/sanketsw/Quasar_JSF_Demo
不幸的是,在从 JMeter 测试时,未发现 Fiber 对任何后向影响(服务器上限为 50 个线程,而 JMeter 测试运行 3000 个用户)。响应与 javax.faces.webapp.FacesServlet 完全相同,最多 500 个用户。对于 3000 个用户,请求失败的错误率更高,响应时间也明显高于正常的 FacesServlet 成功请求。
如果您碰巧在此线程上进一步工作并获得更好的结果,请告诉我。或者请看我是否在配置中犯了任何错误。
【问题讨论】:
标签:
multithreading
jsf
jsf-2.2
fiber
quasar
【解决方案1】:
使用纤程而不是线程来处理 HTTP 请求的好处是,与资源少得多的线程相比,您可以拥有更多的活动纤程,因此您可能会看到提高并发性而不是平均响应时间低并发。如果您只运行 50 个并发请求(这是我从您的描述中了解到的,在 GitHub 项目中找不到基准脚本),您可以使用线程池大小 > 50 的常规基于线程的 servlet,您甚至可能会使用获得更好的延迟(因为您没有推迟请求完成,也没有使用跟踪 servlet 容器内所需的所有机器,也没有使用缓存影响的潜在线程切换等)。
纤程的好处(与异步 servlet 或其他异步框架一样,尽管编程起来更麻烦)是您能够支持更多的并发请求,而不是您的机器可以支持的线程(比如说超过 15k),这通常意味着您的请求率非常高和/或您的请求需要大量的处理时间。另请注意,通常如此高的速率需要调整操作系统网络堆栈以允许更多打开的文件描述符、更快的连接周转等。
另外请注意,最近发布的 Comsat 0.6.0 提高了 servlet 和 Web Actor 的性能。无论如何,Comsat servlet 依赖于您运行它们的 servlet 容器的 servlet 异步功能,因此,如果该实现有错误或效率不高,这也会延续到 Comsat servlet。我使用 Undertow 得到了很好的结果(只需等待第一个请求完成,然后再使服务可用,否则您会收到错误)。
注意:我是平行宇宙团队的一员。