2011-07-25 55 views
1

我需要使用java將一些文件從一臺服務器轉移到另一臺服務器,而我的性能是我的首要任務,這三個選項中的哪一個應該是我的正確選擇。Java文件傳輸,EJB,SOAP或REST,性能比較

+0

你的檔案有多大?什麼是Java文件傳輸? – home

+0

你只需要傳輸文件,或者是否有任何額外的信息需要發送? – powerMicha

+0

文件大小可以高達10mb,並且請求將包含參數,但是響應只具有文件數據。 – Ali

回答

3

我的2美分:

  1. EJB;假設您不打算通過Web Service來封裝您的EJB,這將最終發生在RMI調用中,這意味着您的客戶端必須瞭解RMI。這可能會成爲一個問題,如果你在公共互聯網上,因爲協議和端口可能被某些中間件(防火牆等)阻止。您可能遇到可伸縮性問題。如果涉及SOAP或REST等Web協議,則負載均衡器和Web服務器會理解這些協議,所以向外擴展(集羣)要容易得多。
  2. SOAP;明確的選項,因爲文件大小可以高達10MB,你應該考慮MTOM傳輸文件本身。將文件嵌入SOAP消息中可能需要基於64位編碼,這取決於文件內容本身(例如二進制文件)。平均基數爲64的enc導致係數爲1.3的開銷(10mb> 13.33mb)。
  3. 對於REST,您最終會遇到與SOAP有關的文件編碼相同的問題。

總結:這取決於,我先看看SOAP + MTOM並做一些測試。您也可以考慮FTP,SFTP,FTPS等「不太流行」的協議。如果你需要保證交付,你可能想看看託管文件傳輸(MFT)的概念:http://en.wikipedia.org/wiki/Managed_file_transfer

0

當你談論EJB時,我假設你實際上指的是RMI(遠程方法調用)。它使用對象序列化。如果它是您的應用程序的選項,這是最好的方法。

使用SOAP,您有XML創建/解析(計算方面)的開銷。您也有頭痛的XML轉換/從您​​的對象。

在REST中,它最終成爲與SOAP相同的問題。然而,這似乎是大家公開API的方向。

2

我認爲,使用SOAP將涉及base64編碼數據,這將大大增加它的33%!

我不認爲RMI base64編碼,所以和一個二進制體的REST傳輸將大致相同的效率。

REST使用HTTP,這是一種協議,它的實現經過了嚴格的調整,並且經過了大量文件傳輸的測試。 JRMP和IIOP,用於RMI的協議通常用於較小的請求,因此沒有進行調整。因此,我傾向於使用HTTP而不是JRMP或IIOP來實現這一點,因此朝向使用REST PUT而不是RMI。

但我猜測RMI和HTTP之間的差異很小。

然而,最重要的是,沒有什麼能夠勝出一個基準。我敦促你做一個快速的測試,用三種選項傳輸一個大文件,並測量速度。