2012-06-15 42 views
1

這裏的路由是我想什麼來實現:上下文路徑在Tomcat中(服務交換)

我有我希望能夠與A型的其他Web服務部署並排的Web服務的 - 不同的版本。現在我假設兩個並排的實例。我需要它,因爲服務有一個熱身階段,這需要一些時間來建立從DB的東西,只有在它準備好後,它可以開始提供服務請求...

我想部署到Tomcat6上下文路徑:「/ServiceA-1.0」「/ServiceA-2.0」 ,然後有像「/ ServiceA」一個「虛擬」的上下文,其將指向所期望的物理服務例如「/ServiceA-1.0」。因此,外部世界將知道ServiceA,但在內部,我的ServiceA相關堆棧將知道版本化ServiceA url(涉及更多組件,但只有ServiceA服務於外部世界)。當新服務準備就緒時,我只需重新配置「虛擬」環境即可指向新服務。

到目前爲止,我還沒有能夠找到如何與Tomcat做到這一點,並開始扭轉這是不可能的。我發現了將Apache服務器置於Tomcat前面的建議,並在那裏進行路由,但除非必要,否則我不想註冊另一個軟件。

我的問題是:
- 這種「虛擬」上下文和路由可能與Tomcat6有關嗎?
- 任何其他選擇,智慧和經驗教訓如何實現這種服務交換場景?

最佳,
約瑟夫

回答

2

既然你提到我認爲你需要更多或更少的不間斷服務,當您切換實現的預熱期。這在前面的Apache中很容易處理。

我通常喜歡從這個額外層獲得的靈活性。 Apache在你的系統上不是太侵入。另外 - 如果你在Unix上運行 - 這是微不足道的(讀取:默認)讓Apache監聽端口80,而你必須花費更多的時間讓tomcat監聽80端口,而不是以根用戶運行。

如果您從未碰過Apache,請放心,它很容易在短時間內學習。特別是當你不需要它帶來的全部能量時。配置反向代理(或mod_jk)到處都有記錄。您提到的功能是反向代理和負載均衡器的混合 - 即使您只有一臺服務器來平衡「之間」的負載,您將擁有兩種不同的上下文/版本。

不要害怕了Apache,你是在正確的道路:)

+0

是的,阿帕奇確實對這項任務感覺良好,我根本不害怕它。但我將不得不說服管理員將其註冊到集羣,我很可能應該努力嘗試......我只想掃描其他選項 – jojovilco

0

我不記得的副手,如果Tomcat有做這個天賦的能力,但你應該能夠做到你是什麼用簡單的Web應用程序servlet輕鬆尋找。基本上創建一個servlet來監聽「/ ServiceA」並將所有內容重定向到你需要的URL。您可以創建一個簡單的管理頁面(使用閥門來控制對其的訪問?)或JMX服務來控制您要重定向的端點。

不如使用像在前面Apache HTTPDLighttpd一樣簡單,但很可能同樣有效,並且可以讓你把一切都在Tomcat中,如果這真的是你想要的。

Pound也是一個非常快速/輕量級的負載平衡器,您可以在服務器前運行,但是如果內存滿足要求,它不能即時更改配置;它必須停止並重新啓動。但是,停止和啓動或發送SIGHUP是閃電般的,所以它不應該太痛苦。當然,這確實意味着一個單獨的二進制文件,除了Tomcat之外,您還必須運行/配置/支持。

我只是重讀你的原始問題,並意識到沒有人回答你關於交換服務警告的問題。您不會指出您的服務是否是無狀態的,但您需要擔心/考慮在兩個服務之間切換時丟失會話/狀態的影響。除此之外,我希望這種影響很小。

+0

通過重定向您的意思返回到客戶端重定向?這對我來說會是性能損失。不過,我正在嘗試從一個webapp調度到另一個webapp(轉發,包含),但通過重新執行過濾器+ jsp頁面服務 – jojovilco

+0

來實現一些障礙。其實,我正在考慮更多地遵循RequestDispatcher(即:更多的服務器側重定向)。使用客戶端重定向會有點失敗的目的,因爲你會暴露你的「私人」網址,它肯定會在你的機器上的性能和負載點擊。當然,你基本上會構建一個反向代理的微縮版本。我正在編輯我的答案,以包含另一個非常輕量級的負載平衡器,您也可以使用它。 –

0

Tomcat 7支持開箱即用的版本控制。您只需部署服務## 1.war,服務## 2.war等,它們都顯示爲/服務,並且最新的存在是默認的,或者您可以與特定版本交談。使用運行mod_proxy的Apache HTTPD來完成前端工作,你就完成了。我會推薦mod_proxy_ajp而不是mod_proxy_jk,因爲它配置起來更容易,而且似乎沒有缺乏任何功能。

+0

嗯......上下文版本化,確實很有趣。可能是一個解決方案,但我不得不使用Tomcat 6(已編輯問題) – jojovilco

相關問題