我正在用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