有更新的Web容器有Servlet 3可以扩展BlazeDS max同时用户吗?

时间:2012-02-02 23:00:34

标签: blazeds graniteds

BlazeDS作为servlet实现,因此仅限于大约数百个并发用户。

我想知道支持Servlet 3的更新的Web容器(Tomcat 7,GlassFish / Grizzly,Jetty等)是否可用于创建NIO端点以将同时用户数增加到数千个?

这是一个有效而实用的解决方案吗?有人在制作中这样做吗?

类似于此的成熟版本:http://flex.sys-con.com/node/720304 如果这在当时非常重要,为什么现在(当Servlet 3广泛可用时)没有努力尝试实现NIO端点? (注意,我在这里是个新手,所以如果我错过了什么,请随意说清楚)

NIO的好处:http://www.javalobby.org/java/forums/t92965.html

如果没有,是一个负载均衡器和多个应用服务器,每个都有一个BlazeDS实例,推荐的解决方案(除了LCDS之外等)?

1 个答案:

答案 0 :(得分:3)

GraniteDS&异步Servlet

据我所知,GraniteDS是实现实时消息传递的异步servlet的唯一解决方案,即。数据推送。此功能不仅适用于Servlet 3容器(Tomcat 7,JBoss 7,Jetty 8,GlassFish 3等),也适用于具有特定异步支持的旧容器或其他容器(例如Tomcat 6 / CometProcessor,WebLogic 9 + / AbstractAsyncServlet)等等。)

其他解决方案没有此功能(BlazeDS)或使用RTMP(LCDS,WebORB和Clear Toolkit的最新版本)。我不能说RTMP实现,但BlazeDS显然缺少可扩展的实时消息传递实现,因为它只使用同步servlet模型。

如果您需要处理数千个并发用户,您甚至可以创建一个GraniteDS服务器集群,以进一步提高可扩展性和健壮性(例如,请参阅this video)。

异步Servlet性能

异步servlet与经典servlet的可扩展性已经过多次基准测试,并给出了令人印象深刻的结果。例如,请参阅Jetty博客上的this post

  
    

使用非NIO或非基于Continuation的服务器,这个     需要大约11,000个线程才能同时处理10,000个线程     用户。 Jetty只处理250个连接数     线程

  

经典同步模型:

  • 10,000个并发用户 - > 11,000个服务器线程。
  • 1.1比率。

Comet异步模型:

  • 10,000个并发用户 - > 250个服务器线程。
  • 0.025比率。

这种比率可以从其他异步实现(不是Jetty)大致预期,并且使用Flex / AMF3而不是纯文本HTTP请求不应该改变大部分结果。

为什么是异步Servlet?

当立即处理每个请求时,经典(同步)servlet模型是可接受的:

    request -> immediate processing -> response

数据推送的问题在于,没有使用HTTP协议的真正“数据推送”:服务器无法发起对客户端发送数据的调用,它必须回答请求< / em>的。这就是Comet实现依赖于不同模型的原因:

    request -> wait for available data -> response

使用同步servlet处理,每个请求由一个专用服务器线程处理。但是,在数据推送处理的上下文中,此线程大多数时间只是等待可用数据,并且在消耗大量服务器资源时不执行任何操作。

异步处理的所有目的是让servlet容器使用这些(通常)空闲线程来处理其他传入请求,这就是为什么当应用程序需要实时消息传递功能时,可以期望在可伸缩性方面有显着改进的原因

你可以在网上找到解释这种机制的许多其他资源,只需google Comet。