我是RESTful Webservices世界的新手,我对WS的运作方式有疑问。
上下文:
我正在开发一个具有高负载的RESTful WS;在一个给定的时间我可以让我们说多达10个客户端发送多个请求。所有请求都将发送到端口80。
我正在使用Jersey(Java)开发WS并在Tomcat Web服务器上部署。
问题:
假设我们有5个客户端同时发送请求;每个人向端口80发送2个请求;它们会按FIFO顺序处理吗?如果让我们说我们不关心订单,我们可以有某种多线程吗?
答案 0 :(得分:1)
要回答您的问题,每次发送请求时都会从线程池中获取一个线程到服务器。服务器不关心订单,首先请求服务。
有关服务器的更多信息: 我建议你使用Nginx或Apache作为反向服务器来启用高性能,一个线程将从线程池中获取服务器请求。要提高性能,可以增加线程池大小。但是,另一方面,由于从线程切换到线程的频率增加,太多线程会降低性能。你不希望有一个非常大的线程池。
如果您使用的是Apache + Tomcat,基本上就像使用Tomcat一样。但是apache比tomcat更适合作为Web服务器。在现实生活中,公司使用apache作为向tomcat发送请求的反向服务器。
Apache和Tomcat是基于多线程的服务器,当请求太多时,它们的性能会降低。如果你必须处理很多请求,你可以使用Nginx。
Nginx是一个基于偶数的服务器,它使用队列来存储请求并使用FIFO来分派它们。它可以用更少的线程处理大量请求。因此,即使请求量较大,其性能也会更稳定。但是,由于请求数量非常大,Nginx也会不堪重负,因为它的事件循环没有额外请求的空间。
公司通过使用分布式系统概念来应对这种情况。例如负载均衡器。但要回答你的问题,那就太多了。检查this article和this article以更好地了解nginx和apache。
答案 1 :(得分:0)
这完全取决于您使用的服务器及其配置方式。标准配置(你必须努力使它不标准)是有多个线程。换句话说 - 服务器通常会为每个新请求自动创建或使用另一个线程,并且几乎可以肯定它将被并行处理。
你可以使用java.lang.Thread.currentThread()实际在运行的代码中看到它 - 打印当前线程的名称和Rest请求,你会看到。