簡體   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