2016-08-05 64 views
0

目前我正在將我們的Web應用程序從傳統的Spring MVC Web應用程序升級到具有REST端點的單頁應用程序。我們當前的前端MVC應用程序不使用REST調用來與後端進行通信,而是通過直接調用必要的外觀與後端(用JAVA編寫)進行通信。 JAR文件和WAR文件都打包在一個ear文件中,並部署在我們的生產服務器上(目前使用JBoss EAP 6)。單頁應用程序(SPA)與完整堆棧應用程序。限制和優勢。

由於我們現在正在轉向單頁應用程序,並且使用一組新的API升級我們的系統,所以我質疑,單頁應用程序以及用JAVA編寫的後端的其餘部分應該託管在相同的服務器(JBoss EAP 6)?還是應該將它們拆分到不同的服務器上,一個用於提供SPA內容,另一個用於運行後端?在後一種情況下,哪個生產服務器最適合託管單頁面應用程序(JS,HTML和CSS)的內容? (我們的後端將仍然在JBoss EAP 6上託管)

在不同服務器上分離前端和後端的優點是什麼?

我試圖搜索使用JAVA REST端點部署單頁應用程序的最佳實踐,但是我還沒有找到適用於我們需求的有用文章。

非常感謝! :)

回答

1

要回答你的第一個查詢:

  • 是的,你完全可以把它們分開,最好你應該這樣你就可以不用部署基於Web服務的後端依賴前端。

  • 您可以將SPA靜態文件與Apache,Nginx等任何流行的Web服務器一起部署,或者甚至可以在雲託管(如S3(位於雲前端CDN後面))上部署。

  • 假設您的REST端點仍將使用Java,那些需要駐留在Java應用程序服務器(如jBOSS,tomcat或glass fish)中。

約束/陷阱:

  1. 跨域:

    • 你可以把你的JBOSS背後運行的靜態文件的同一個Apache/Nginx的反向代理。

    • 或者,如果您的域名是獨立的,您可以在Web服務上啓用CORS。

    • 最後,如果您的Web服務是JSON,jsonp總是一個選項。

  2. 身份驗證和安全:

    • 一般來說,當你像春天有個完整的堆棧Web框架去你得到了很多安全和認證的箱子外面。您可以使用會話和CSRF等來保護您的網站。但是,對於REST,您通常必須使用基於令牌的身份驗證來爲您的前端使用REST服務。這並不一定困難,而是一種不同的方法,因此在約束條件下列出。

優點:

  1. 更容易單獨縮放後端和前端,與像亞馬遜S3和CloudFront的CDN您服務靜態SPA可以無限縮放對部分。

  2. 由於您的服務是REST,現在可以輕鬆地將後端Web服務置於負載均衡器羣集模型之後。

  3. 由於關注點分離,現在更容易處理部署。

  4. 僅推送前端更改時的較小回歸問題。您不必再更換整個WAR文件。

不同的服務器或不

要看是什麼樣的流量你的應用程序,預計處理。讓我放下三個場景。

  1. 低流量:你可以把它放在一個服務器背後的Web服務器的反向代理的Java應用服務器。 Web服務器也將提供SPA的某個目錄。

  2. 中等流量:您應該將一個Web服務器上的前端和Web服務器分開,並將REST服務託管在單獨的機器上。從技術上講,這個設置與選項1沒有多大區別,但是您的App Server不會與Web服務器競爭CPU週期來響應請求。

  3. 高流量:同選項2,但現在你可以有多個應用程序服務器和SPA Web服務器,並有一個阿帕奇/ Nginx的對頂部負載平衡。

  4. 廣泛的地理區域的瘋狂交通:在這種情況下,你不想託管這些SAP你自己。在CloudFront CDN背後使用像Amazon S3這樣的服務會更好,因此您的靜態內容將在全球範圍內進行復制以實現最佳響應時間。這也可以減少服務器的負載。現在介紹用於託管REST端點的App服務器。您可以使用您自己的雲服務器託管羣集,也可以使用Heroku或Amazon等PAAS來託管WAR文件並按需擴展。

注:這些縮放方案不考慮數據庫,你需要你的數據庫,以弄清楚如何擴展它在上述方案的詳細信息。

希望有幫助,請讓我知道,如果你需要更多的細節上提到的任何事情。

+0

非常感謝您的回覆! –

+0

不客氣。並歡迎堆棧溢出。請標記答案標記,如果它是你在找什麼。 – Shaunak

0

這是一個品味問題。

我自己更喜歡使用發電機像Yeoman,然後用兩種春IO自己設定的Web服務(例如這裏:spring webservice example)創建服務創建SPA或澤西here

說到部署,有多個設置。

Apache | Nginx | S3。以下是部署AngularJS應用程序的好文章:deploying angular app

當涉及到Java部分時,您可能仍然需要使用Tomcat,Glashfish或JBOSS等。

這不是一個答案只有我的選擇

0

的味道現在像AWS雲,天,前端主要是託管在單獨的服務器和後端服務,在您的情況,您可以使用FireBase對於前端(Html,CSS,JS,Angular),並且確保您可以使用單獨的服務器來進行後端服務,使用Spring MVC作爲您當前的框架並將其作爲一項安寧的服務也是可行的。

看一看這個demo