繁体   English   中英

用于设计可伸缩Web服务的模式

[英]Pattern for designing a scalable web service

我正在用Java编写一个Web服务,它需要处理大量的请求/秒。 一般流程将是:

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

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

  • 为每个请求生成一个线程
  • 使用Reactor模式(中央调度程序线程响应IO事件)

您是否建议哪种方法通常更好,每种方法的优缺点是什么? 我也很感激指向示例的指针。

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

异步,异步,异步。

吟唱并重复。

除了“No Refunds No Returns”响应之外,我会说“异步思考”,因为您应该允许容器管理它已部署的Web服务的多线程/可伸缩性和高可用性问题,这允许您可以使用应用程序容器设置聚类等内容。

编辑:总而言之,没有这样的模式,也许您应该探索应用程序容器的可伸缩性/可用性功能...

异步确实是正确的方法,但不要自己管理,使用支持异步Web服务调用的东西,如JAX-WS 2.0(它使用Future接口和/或java.util.concurrentExecutor框架)。 请参阅使用JAX-WS 2.0进行异步Web服务调用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM