用GridFTP傳送文件 |
發(fā)布時間: 2012/8/14 11:06:11 |
計算網(wǎng)格為那些強大的新型探索工具提供了基礎(chǔ)設(shè)施,這些基礎(chǔ)設(shè)施包括桌面計算、智能設(shè)備、協(xié)作和分布式計算。Globus 項目(Globus Project)目前致力于定義和開發(fā)具有下列能力的持續(xù)數(shù)據(jù)網(wǎng)格:
安全健壯的高性能數(shù)據(jù)傳輸機制。 用于創(chuàng)建和操作大型數(shù)據(jù)集副本的工具集。 維護數(shù)據(jù)集副本目錄的機制。 GridFTP 協(xié)議及其系列工具源自于意識到這樣一個問題,即網(wǎng)格環(huán)境需要一種快捷、安全、有效而且可靠的傳輸機制。計算網(wǎng)格是如此的龐大和分散,以致于需要一種健壯的傳輸機制。GridFTP 因其支持下列功能而滿足了這些需求: 并行數(shù)據(jù)傳輸:使用多個 TCP 流比使用單個 TCP 流提高了帶寬。并行數(shù)據(jù)傳輸由 FTP 命令擴展和數(shù)據(jù)通道擴展提供支持。 網(wǎng)格安全性基礎(chǔ)設(shè)施(Grid Security Infrastructure, GSI)和 Kerberos 認證支持:由用戶控制各種數(shù)據(jù)完整性和機密性級別的設(shè)置。這種功能為傳送文件提供了健壯且靈活的認證、完整性和機密性機制。 數(shù)據(jù)傳輸?shù)牡谌娇刂疲褐С譃榇笮头植际缴鐓^(qū)管理大型數(shù)據(jù)集。它使第三方能夠?qū)Υ鎯Ψ⻊掌髦g的傳送進行控制。 分塊數(shù)據(jù)傳輸:能夠?qū)?shù)據(jù)分割放置在多個服務器上,從而提高聚集帶寬。GridFTP 是通過定義在網(wǎng)格論壇(Grid Forum)草案中的擴展來支持分塊數(shù)據(jù)傳輸?shù)摹?/p> 部分文件傳送:與標準 FTP 要求應用程序傳送整個文件不同,新型 FTP 命令支持傳送文件的某些區(qū)域。 可靠的數(shù)據(jù)傳輸:故障恢復方法可以處理瞬態(tài)網(wǎng)絡故障和服務器故障,同時可以重新啟動失敗的傳送。 手工控制 TCP 緩沖區(qū)大。褐С肢@取最大 TCP/IP 帶寬。 集成檢測(instrumentation):支持返回重新啟動和性能標記。 連接到 GridFTP 服務器 清單 1中的 Java 類實現(xiàn)了一個到本地文件系統(tǒng)的基本 GridFTP 傳送。 Globus Toolkit 使用標準 log4j 包( http://jakarta.apache.org/log4j/docs/)通過定義一個靜態(tài)記錄器來顯示日志消息: private static Logger logger = Logger.getLogger(MyGridFTP.class.getName()); 類構(gòu)造函數(shù)獲取主機名和端口作為參數(shù),并使用網(wǎng)格安全性基礎(chǔ)設(shè)施(GSI)憑證對服務器進行認證。 注:該類只能與 Globus Toolkit 2.2 一起使用,而不能與 2.0 一起使用。Globus Toolkit 版本 2.0 和 2.2 之間的 GSI 有重大的變化。 確保使用了正確的 Java CoG Kit 版本 下面對 Java CoG Kit 0.9.13 到當前版本 Java CoG Kit 1.1a 之間的主要 GSI 變化進行了匯總: 不贊成使用的包 取而代之的包或方法 org.globus.gsi.GlobusCredential 類基本上已經(jīng)取代了 org.globus.security.GlobusProxy 類的功能。然而,Globus 還是建議(如果可能的話) 不要使用 org.globus.gsi.GlobusCredential 類,因為它代表特定于某個安全性協(xié)議的公鑰基礎(chǔ)設(shè)施(Public Key Infrastructures, PKI)憑證。相反,Globus 建議盡可能多地使用一般安全性服務(Generic Security Service, GSS)抽象。要了解更多信息,請通過http://www-unix.globus.org/cog/distribution/1.1/compatibility.html訪問 Java 分發(fā)下的 compatibility.html 文件。 將舊代理轉(zhuǎn)換成 GSSCredential 為了通過 GridFTP 服務器的認證,必須將舊代理 GSI_2_PROXY 轉(zhuǎn)換成 GSSCredential。 清單 2中的代碼片段顯示了該如何進行這一轉(zhuǎn)換。 傳送數(shù)據(jù) 要開始從遠程主機傳送文件,您可以使用 清單 3 中的代碼。 接口 DataSink 對于寫進入的數(shù)據(jù)非常有用。請實現(xiàn)該接口以提供自己的數(shù)據(jù)存儲方式。 注:代碼必須是線程安全的。使用并行傳送方式時,幾個流可能會試圖寫到該接口。 傳送多個文件 傳送多個文件要求客戶機將傳送方式設(shè)置為:對于偵聽方,設(shè)置為被動方式;對于發(fā)送方,設(shè)置為主動方式。使用多個 get 調(diào)用還不夠,因為數(shù)據(jù)通道在每次傳送后都自動關(guān)閉。對于每個 get 調(diào)用,都由客戶端接收數(shù)據(jù)(被動),而由遠程主機發(fā)送數(shù)據(jù)(主動)。 在每次調(diào)用 get 之前,請發(fā)出下面這行代碼: client.setLocalPassive();client.setActive(); 在進行每次 put 操作之前,都需要逆轉(zhuǎn)主被動方式。請發(fā)出下面這行代碼: client.setLocalActive();client.setPassive();。 要了解更多信息,請通過 http://www-unix.globus.org/cog/jftp/guide.html 閱讀 GridFTP 客戶機程序員指南(GridFTP client programmer guide)。 并行傳送 乍一看,GridFTP 給您的感覺可能是:您可以讓 FTP 客戶機以 Kazza/Morpheus 樣式從多個服務器傳送多個文件。實際上,并行在 GridFTP 中僅僅是指將打開多個流從同一個服務器傳送某個文件。 對于涉及雙方的傳送,除非您有多處理器機器,否則 GridFTP 只會增加開銷。下面這段內(nèi)容引自 GridFTP 客戶機 — 程序員指南(GridFTP client - programmer guide): 對于涉及雙方的傳送而言,選擇并行性時應該謹慎。使用多個流的優(yōu)點很大程度上與低級 TCP 過程有關(guān),同時也與 TCP 窗口大小有關(guān)。使用雙倍的并行流并不一定會使性能提高一倍。實際上,從某種角度來看,性能反而會下降。ftp 包的當前實現(xiàn)在單獨的線程中處理每條數(shù)據(jù)路徑,因此,除非您的機器有多個 CPU,否則增加并行性只會增加計算開銷( http://www-unix.globus.org/cog/jftp/guide.html)。 并行傳送需要使用擴展方式。而且,傳送類型必須為映像,而數(shù)據(jù)接收器/源必須支持隨機數(shù)據(jù)訪問且必須是線程安全的。多個線程可能會向其中寫入數(shù)據(jù)。 清單 4 顯示了實現(xiàn)并行 get 調(diào)用的方法。 測試傳送 要測試遠程文件傳送,請使用 清單 5中的代碼。 log4j 工具對于調(diào)試和監(jiān)控 FTP 傳送都非常有用: 要獲取基本消息,請使用 Logger.getRoot().setLevel(Level.INFO); 要獲取擴展的信息,請使用 Logger.getRoot().setLevel(Level.DEBUG); 以 INFO 級別執(zhí)行該類將得到 清單 6 中的樣本輸出。 在上面的樣本輸出中,有用的信息包括 GridFTP 服務器的版本。在該特例中,那些有用信息是 dhcp126.adtech.internet.ibm.com GridFTP Server 1.5 GSSAPI type Globus/GSI wu-2.6.2 (gcc32dbg, 1032298778-28) ready 。 故障診斷技巧 編寫這些代碼過程中所碰到的大多數(shù)問題都與處理舊代理及將它們轉(zhuǎn)換成 GSSCredential 有關(guān)。仔細檢查該類的構(gòu)造函數(shù),確保理解了該轉(zhuǎn)換過程。還要確保運行了 Globus Toolkit 和 GridFTP 服務器的正確版本。較舊的版本不支持 GSSAPI。 結(jié)束語 GridFTP 是一種安全可靠的高性能數(shù)據(jù)傳輸協(xié)議,針對高帶寬廣域網(wǎng)對其進行了優(yōu)化。GridFTP 協(xié)議基于 FTP 這一流行的因特網(wǎng)文件傳送協(xié)議。這個 Java 類可以幫助您理解:GridFTP 是如何從遠程服務器進行基本傳送的,還向您顯示了 Globus Toolkit 2.2 的安全性功能。 本文出自:億恩科技【www.cmtents.com】 |