2013-07-14 77 views
6

我在Zookeeper的基礎上構建了一個服務發現層,用於在分佈式環境中查找Thrift服務。我正在尋找現在在生產環境中運行這些服務的最佳方式。部署並提供節儉服務

目前,它是通過打包部署到Tomcat的戰爭來完成的。在servlet實例化過程中,Spring ApplicationContext被創建,它在Tomcat內創建一個TThreadPoolServer

我不喜歡這樣的一對夫婦的原因:

  • 它使Tomcat的那種沒用了,感覺就像一個黑客以方便易於部署
  • 它避免了Tomcat的線程池,所有已進入找出最好的方式來分發請求

在試圖找到處理這個是最好的策略過程中的邏輯,我想出了幾個選擇:

  • 啓動節儉服務作爲一個獨立的JAR(我不喜歡這一點,主要是因爲我現在需要徹底改造該應用程序容器開發商已經花了很多時間制定
  • 通過HTTP主機節儉的邏輯,從而利用Tomcat的線程池和邏輯服務請求(玄乎這一個因 - 儘管未成年人 - 性能命中,這將招致)
  • 使用不同類型的應用程序容器用於承載這些服務的

沒有人有以前他們如何處理託管分佈式服務器的建議。我最好在Tomcat內部使用HTTP嗎?

+1

這個問題不是題外話:它不是關於現有服務器的部署方案,而是關於新開發的服務的架構,涉及編程。 – Wildfire

回答

6

我試過使用Tomcat作爲Thrift服務器的主機,發現它沒有帶來任何附加值:在這種情況下,servlet容器的所有功能(請求路由等)都不是必需的。另一方面,Tomcat增加了複雜性和移動部分(即,它很難解決PermGen問題)。

通過HTTP使用Thrift會造成顯着的性能影響,特別是在有大量客戶端連接的高負載情況下。

所以我結束了在Supervisor Daemon(http://supervisord.org/)下運行的獨立Thrift服務。它使分佈式部署的管理非常方便。當需要通過HTTP公開Thrift API時(例如,針對JS客戶端),我們使用在vert.x中實現的瘦異步代理(http://vertx.io/)。

+0

你把你的依賴關係包裝在你的jar中嗎?你如何處理實際的部署?現在我正在使用Tomcat web API上傳非常方便的WAR –

+0

@ColinMorelli:我們不在一個jar包中打包依賴關係。相反,我們創建了一個包含應用程序jar和一系列依賴關係的發行版。我們使用通過rsync將發行版部署到服務器的結構腳本。在20臺主機上部署大約500MB的應用程序jar和50mb的不常更改的庫時,它確實節省了時間。 WAR部署對於小型部署很方便,但不能擴展到大型部署。 – Wildfire

+0

太棒了,聽起來不錯。目前,我的依賴列表相對較小。我可能會最終構建一個打包的JAR來簡化它,直到它變得太大。除此之外,我會繼續與Supervisord一起運行。謝謝! –