2010-01-27 85 views
3

我正在用Java编写一个需要处理大量请求/秒的Web服务。一般流程是:用于设计可伸缩的Web服务的模式

  • Web服务接收来自客户端的请求
  • 返回一个“保持轮询我”响应客户
  • 调用另一个Web服务(或 服务),并等待他们 响应(带超时)
  • 客户调查我们的Web服务,直到 收到了响应(用 超时)

研究在互联网上,我发现了两种常用的方法来编写Web服务:

  • 菌种为每个请求
  • 使用反应堆模式线程(中心调度线程响应IO事件)

你有建议,哪种方法通常更好,每种方法的优缺点是什么?我也很欣赏指向例子。

回答

2

不要以为多线程。异步考虑。我碰巧编写了一个异步处理程序,它在IIS中运行了10个线程,运行了2,000 RPS。不知道java是如何工作的,因为我是一个.net人,但我相信他们有类似的BeginXXX/EndXXX方法。如果你生成了一个线程,那么你并没有考虑你的代码可以阻塞的所有地方:数据库IO,文件I/O,Web服务等。这些是你的性能会导致你的网站变慢的地方。

异步,异步,异步。

咏唱并重复。

+0

哈利路亚,兄弟:)'异步',你的意思是非块异步IO(http://stackoverflow.com/questions/592303/asynchronous-io-in-java)?更详细的将非常感谢! – 2010-01-27 04:47:43

+0

这看起来像一个很好的Java平行于.net的开始*和结束*:http://www.javalobby.org/java/forums/t16252.html – 2010-01-27 05:04:58

0

除了“不退还没有退货”的回复,我会说是“异步思考”,因为您应该允许容器管理其具有的Web服务的多线程/可伸缩性和高可用性问题部署,这使您可以使用应用程序容器设置集群等等。

编辑:所以在最后,有没有这样的模式,也许你应该探索你的应用程序容器的可伸缩性/可用性功能...