簡體   English   中英

如何構建分布式Java應用程序?

[英]How to build a distributed java application?

首先,我有一個概念性的問題,“分布式”這個詞是否只意味着應用程序在多台機器上運行? 或者還有其他方法可以將應用程序視為分布式(例如,如果有許多獨立的模塊在同一台機器上進行交互,這是分布式的嗎?)。

其次,我想建立一個執行四種類型任務的系統,會有多個客戶,每個客戶都會定期運行每種類型的許多任務。 例如:customer1今天將有task_type1,兩天后會有task_type2,依此類推,可能會有customer2同時執行task_type1,如customer1的task_type1。 即需要並發。 執行任務的配置將存儲在DB中,這些任務的結果也將存儲在DB中。 客戶將使用Web瀏覽器(html頁面)中的系統與系統交互(基本上,配置任務並查看結果)。 我想過使用一個休息webservice(使用JAX-RS),其中html頁面將與后端通信並在后端使用線程進行並發執行。 問題:

  1. 這聽起來很簡單,但我是朝着正確的方向前進嗎? 或者我應該使用其他技術或概念,例如Java Beans?

2.如果我的方法很好,我是否需要使用像JSP這樣的腳本語言,或者我可以直接將html表單提交給其他URL並獲得結果(例如使用JSON)?

  1. 如果我想分發應用程序,我的想法是否可行? 如果不是我需要使用什么?

很抱歉有很多問題,但我對此感到很困惑。

我只想在已發布的答案中添加一點。 請大家指點我的評論,因為我構建的所有Web應用程序都只在一台服務器上運行(除了部署到Heroku的應用程序,可能會為您“分發”您的應用程序)。

如果您認為可能需要分發應用程序以實現可伸縮性,那么您首先要考慮的不是 Web服務,多線程和消息隊列以及Enterprise JavaBeans和...

首先要考慮的是您的應用程序域本身以及應用程序將要執行的操作。 CPU密集型部件在哪里? 這些部分之間有什么依賴關系? 系統的各個部分是否會自然地分解為並行進程? 如果沒有,你能重新設計系統嗎? 重要提示:線程/進程之間需要共享哪些數據(無論它們是在相同還是不同的計算機上運行)?

理想的情況是每個並行線程/進程/服務器可以獲得自己的數據塊並在其上工作而無需共享。 更好的是,如果系統的某些部分可以變為無狀態 - 無狀態代碼可以無限可並行化(輕松自然)。 並行進程之間更頻繁和細粒度的數據共享,應用程序的可伸縮性越低。 在極端情況下,您可能甚至無法通過分發應用程序來提高性能。 (你可以用多線程代碼看到這一點 - 如果你的線程經常爭用相同的鎖,你的程序甚至可能比多線程+ CPU更慢,而不是一個線程+ CPU。)

要完成的工作的概念性細分比實際用於分發應用程序的工具或技術更重要。 如果您的概念分解是好的,那么如果您只使用一台服務器,那么稍后分發應用程序將會容易得多。

術語“分布式應用程序”意味着應用程序系統的各部分將在不同的計算節點上執行(這些計算節點可以是不同機器上或同一機器上的多個CPU /核心之間的不同CPU /核心)。

關於如何構建系統的問題有許多不同的技術解決方案。 因為您詢問Java技術,所以您可以使用Google的Web Toolkit構建Web應用程序,這將為您提供豐富的基於瀏覽器的客戶端用戶體驗。 對於系統的服務器部署部分,您可以使用在諸如Tomcat之類的servlet容器中運行的簡單servlet開始。 將使用基於HTTP的遠程過程調用從瀏覽器調用您的servlet。

稍后,如果遇到可伸縮性問題,您可以開始將業務邏輯的一部分遷移到EJB3組件,這些組件本身最終可以部署在應用程序服務器的上下文中的許多計算節點上,例如Glassfish。 我認為你不需要解決這個問題,直到你運行它。 很難說您是否會更多地了解客戶將要執行的任務的性質。

要回答您的第一個問題 - 您可以將表單直接提交給其他網址。 顯然,這完全取決於您的要求。

正如@AlexD在上面的評論中提到的,你並不總是需要分發一個應用程序,但是如果你想這樣做,你應該考慮查看JMS ,這是一個消息傳遞API,它可以讓你運行幾乎任何工作者應用程序計算機的數量,從消息隊列中准備消息並處理它們。

如果您想生成動態分布式應用程序,運行多個資源不足的虛擬機(例如Amazon EC2 Micro實例)或物理硬件,可以隨意添加和刪除以滿足需求,那么您可能希望考慮將它與Project Shoal集成,后者是一個Java框架,允許集群應用程序節點,並讓它們隨時出現/消失。 Project Shoal使用JXTA和JGroups作為底層通信協議。

另一種方法可能是使用在應用程序服務器上運行的EJB來分發應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM