我正在用Java编写一个需要处理大量请求/秒的Web服务。一般流程是:用于设计可伸缩的Web服务的模式
- Web服务接收来自客户端的请求
- 返回一个“保持轮询我”响应客户
- 调用另一个Web服务(或 服务),并等待他们 响应(带超时)
- 客户调查我们的Web服务,直到 收到了响应(用 超时)
研究在互联网上,我发现了两种常用的方法来编写Web服务:
- 菌种为每个请求
- 使用反应堆模式线程(中心调度线程响应IO事件)
你有建议,哪种方法通常更好,每种方法的优缺点是什么?我也很欣赏指向例子。
我正在用Java编写一个需要处理大量请求/秒的Web服务。一般流程是:用于设计可伸缩的Web服务的模式
研究在互联网上,我发现了两种常用的方法来编写Web服务:
你有建议,哪种方法通常更好,每种方法的优缺点是什么?我也很欣赏指向例子。
不要以为多线程。异步考虑。我碰巧编写了一个异步处理程序,它在IIS中运行了10个线程,运行了2,000 RPS。不知道java是如何工作的,因为我是一个.net人,但我相信他们有类似的BeginXXX/EndXXX方法。如果你生成了一个线程,那么你并没有考虑你的代码可以阻塞的所有地方:数据库IO,文件I/O,Web服务等。这些是你的性能会导致你的网站变慢的地方。
异步,异步,异步。
咏唱并重复。
除了“不退还没有退货”的回复,我会说是“异步思考”,因为您应该允许容器管理其具有的Web服务的多线程/可伸缩性和高可用性问题部署,这使您可以使用应用程序容器设置集群等等。
编辑:所以在最后,有没有这样的模式,也许你应该探索你的应用程序容器的可伸缩性/可用性功能...
异步确实是正确的做法,但不管理您自己可以使用支持异步Web服务调用的东西,如JAX-WS 2.0(它使用Future
接口和/或框架,来自java.util.concurrent
)。请参阅Asynchronous Web Service Invocation with JAX-WS 2.0。
哈利路亚,兄弟:)'异步',你的意思是非块异步IO(http://stackoverflow.com/questions/592303/asynchronous-io-in-java)?更详细的将非常感谢! – 2010-01-27 04:47:43
这看起来像一个很好的Java平行于.net的开始*和结束*:http://www.javalobby.org/java/forums/t16252.html – 2010-01-27 05:04:58