2014-04-15 132 views
14

我注意到很多項目(DropWizard,Grails等)開始接受「胖」JAR(使用Jetty或Tomcat等嵌入式Web服務器)與傳統WAR部署的概念。這兩種方法都涉及單個JVM進程(即不管有多少WAR部署到Tomcat,它都是相同的JVM進程)。部署WAR或「胖」JAR?

在哪些情況下,哪種部署方法比其他方式更可取?

+0

對於內部應用程序(內部用戶/員工使用)而言,傳統的WARs-to-Tomcat是不錯的,它們並沒有真正的擴展/配置管理需求。第二個是你需要面向公衆的組件(Web應用或REST服務等),你需要按照自己的速度擴展這個組件,並且你需要(很好,*應該*)自動化節點的配置該組件依靠(見Ansible/Chef/Puppet/Salt /等)。縮放和CM自動化在包含WAR文件不同組合的異構節點上是不可能完成的...... – smeeb

+0

...例如:如果您有10個Tomcat節點和30個WAR文件(代表30個不同的組件),那麼要實現自動化CM,您需要定義節點的類型*(數據庫節點,應用程序節點,微服務節點,緩存節點等),並將30個組件的相同子集部署到每種節點類型。但是你會遇到擴展問題,因爲每個Tomcat實例上共享的組件都不可避免地會有不同的擴展需求。所以它歸結爲:你在部署什麼,它有什麼要求? – smeeb

+0

內部組件與WAR-to-Tomcat一樣好。網絡規模組件需要同質性,並且只能用這些所謂的胖JAR來完成。 – smeeb

回答

11

這裏有幾個原因:

贊成JAR的:

  1. 簡單構建和部署。
  2. 像Jetty這樣的嵌入式服務器很容易操作。
  3. 應用程序很容易讓用戶啓動,而且他們也可以在個人電腦上運行,因爲它們很輕便。
  4. 啓動和停止應用程序所需的知識要少於管理Web服務器的知識。

贊成WAR或EAR:

  1. 服務器將用於多個web應用同時提供類似的部署,重啓,安全功能等。
  2. 也許一個單獨的部署團隊可以處理應用程序的啓動和停止。
  3. 如果你的主管喜歡遵守規則,他們會很高興地發現你沒有打破他們。

話雖如此,你總是可以提供2個或3種類型的可執行文件,以滿足所有的需求。任何構建工具都可以輕鬆實現。

5

通過嵌入式網絡服務器分發應用程序允許獨立設置並通過調用java -jar application.jar來運行它。

但是,可能有用戶想要控制使用哪個Web服務器,或者想要將多個應用程序部署到單個Web服務器(例如爲了防止端口衝突,特別是端口80和8080)。在這種情況下,「胖」jar可能會導致問題或至少一些不需要的代碼,從而導致更大的內存佔用。對於那些想要在自己的容器中部署應用程序的人來說,對於這兩種情況,最好的方法是提供兩個工件:一個用於(更簡單)獨立設置的「胖」jar和一個僅應用程序的戰爭/耳朵。

3

我正在考慮用戶視角。你可以將換成這個單獨的包含jar文件的.exe或.dmg文件,只需要安裝它,而不需要額外的指導。此外,由於你只是做了部署特定的服務器,你可以採取的利用特定的服務器