2010-01-27 87 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服務的多線程/可伸縮性和高可用性問題部署,這使您可以使用應用程序容器設置集羣等等。

編輯:所以在最後,有沒有這樣的模式,也許你應該探索你的應用程序容器的可伸縮性/可用性功能...