用GridFTP传送文件
来源:IMB 发布时间:2007-10-29 13:44:00
计算网格为那些强大的新型探索工具提供了基础设施,这些基础设施包括桌面计算、智能设备、协作和分布式计算。Globus 项目(Globus Project)目前致力于定义和开发具有下列能力的持续数据网格:
安全健壮的高性能数据传输机制。
用于创建和操作大型数据集副本的工具集。
维护数据集副本目录的机制。
GridFTP 协议及其系列工具源自于意识到这样一个问题,即网格环境需要一种快捷、安全、有效而且可靠的传输机制。计算网格是如此的庞大和分散,以致于需要一种健壮的传输机制。GridFTP 因其支持下列功能而满足了这些需求:
并行数据传输:使用多个 TCP 流比使用单个 TCP 流提高了带宽。并行数据传输由 FTP 命令扩展和数据通道扩展提供支持。
网格安全性基础设施(Grid Security Infrastructure, GSI)和 Kerberos 认证支持:由用户控制各种数据完整性和机密性级别的设置。这种功能为传送文件提供了健壮且灵活的认证、完整性和机密性机制。
数据传输的第三方控制:支持为大型分布式社区管理大型数据集。它使第三方能够对存储服务器之间的传送进行控制。
分块数据传输:能够将数据分割放置在多个服务器上,从而提高聚集带宽。GridFTP 是通过定义在网格论坛(Grid Forum)草案中的扩展来支持分块数据传输的。
部分文件传送:与标准 FTP 要求应用程序传送整个文件不同,新型 FTP 命令支持传送文件的某些区域。
可靠的数据传输:故障恢复方法可以处理瞬态网络故障和服务器故障,同时可以重新启动失败的传送。
手工控制 TCP 缓冲区大小:支持获取最大 TCP/IP 带宽。
集成检测(instrumentation):支持返回重新启动和性能标记。
连接到 GridFTP 服务器
清单 1中的 Java 类实现了一个到本地文件系统的基本 GridFTP 传送。
Globus Toolkit 使用标准 log4j 包( http://jakarta.apache.org/log4j/docs/)通过定义一个静态记录器来显示日志消息:
private static Logger logger = Logger.getLogger(MyGridFTP.class.getName());
类构造函数获取主机名和端口作为参数,并使用网格安全性基础设施(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.security org.ietf.jgss
org.globus.io.ftp org.globus.ftp
org.globus.mds.MDS 使用 JNDI(和 LDAP 提供程序)或直接使用 Netscape 目录 SDK(Netscape Directory SDK)来访问 MDS。
org.globus.gsi.GlobusCredential 类基本上已经取代了 org.globus.security.GlobusProxy 类的功能。然而,Globus 还是建议(如果可能的话) 不要使用 org.globus.gsi.GlobusCredential 类,因为它代表特定于某个安全性协议的公钥基础设施(Public Key Infrastructures, PKI)凭证。相反,Globus 建议尽可能多地使用一般安全 * (Generic Security Service, GSS)抽象。要了解更多信息,请通过http://www-unix.globus.org/cog/distribution/1.1/compatibility.html访问 Java 分发下的 compatibility.html 文件。
将旧代理转换成 GSSCredential
为了通过 GridFTP 服务器的认证,必须将旧代理 GSI_2_PROXY 转换成 GSSCredential。 清单 2中的代码片段显示了该如何进行这一转换。
传送数据
要开始从远程主机传送文件,您可以使用 清单 3 中的代码。
接口 DataSink 对于写进入的数据非常有用。请实现该接口以提供自己的数据存储方式。
注:代码必须是线程安全的。使用并行传送方式时,几个流可能会试图写到该接口。
传送多个文件
传送多个文件要求客户机将传送方式设置为:对于侦听方,设置为被动方式;对于发送方,设置为主动方式。使用多个 get 调用还不够,因为数据通道在每次传送后都自动关闭。对于每个 get 调用,都由客户端接收数据(被动),而由远程主机发送数据(主动)。
在每次调用 get 之前,请发出下面这行代码:
client.setLocalPassive();client.setActive();
在进行每次 put 操作之前,都需要逆转主被动方式。请发出下面这行代码:
client.setLocalActive();client.setPassive();。
要了解更多信息,请通过 http://www-unix.globus.org/cog/jftp/guide.html 阅读 GridFTP 客户机程序员指南(GridFTP client programmer guide)。
并行传送
乍一看,GridFTP 给您的感觉可能是:您可以让 FTP 客户机以 Kazza/Morpheus 样式从多个服务器传送多个文件。实际上,并行在 GridFTP 中仅仅是指将打开多个流从同一个服务器传送某个文件。
对于涉及双方的传送,除非您有多处理器机器,否则 GridFTP 只会增加开销。下面这段内容引自 GridFTP 客户机 — 程序员指南(GridFTP client - programmer guide):
对于涉及双方的传送而言,选择并行性时应该谨慎。使用多个流的优点很大程度上与低级 TCP 过程有关,同时也与 TCP 窗口大小有关。使用双倍的并行流并不一定会使性能提高一倍。实际上,从某种角度来看,性能反而会下降。ftp 包的当前实现在单独的线程中处理每条数据路径,因此,除非您的机器有多个 CPU,否则增加并行性只会增加计算开销( http://www-unix.globus.org/cog/jftp/guide.html)。
并行传送需要使用扩展方式。而且,传送类型必须为映像,而数据 * /源必须支持随机数据访问且必须是线程安全的。多个线程可能会向其中写入数据。 清单 4 显示了实现并行 get 调用的方法。
测试传送
要测试远程文件传送,请使用 清单 5中的代码。
log4j 工具对于调试和监控 FTP 传送都非常有用:
要获取基本消息,请使用 Logger.getRoot().setLevel(Level.INFO);
要获取扩展的信息,请使用 Logger.getRoot().setLevel(Level.DEBUG);
以 INFO 级别执行该类将得到 清单 6 中的样本输出。
在上面的样本输出中,有用的信息包括 GridFTP 服务器的版本。在该特例中,那些有用信息是 dhcp126.adtech.internet.ibm.com GridFTP Server 1.5 GSSAPI type Globus/GSI wu-2.6.2 (gcc32dbg, 1032298778-28) ready 。
故障诊断技巧
编写这些代码过程中所碰到的大多数问题都与处理旧代理及将它们转换成 GSSCredential 有关。仔细检查该类的构造函数,确保理解了该转换过程。还要确保运行了 Globus Toolkit 和 GridFTP 服务器的正确版本。较旧的版本不支持 GSSAPI。
结束语
GridFTP 是一种安全可靠的高性能数据传输协议,针对高带宽广域网对其进行了优化。GridFTP 协议基于 FTP 这一流行的因特网文件传送协议。这个 Java 类可以帮助您理解:GridFTP 是如何从远程服务器进行基本传送的,还向您显示了 Globus Toolkit 2.2 的安全性功能。


猜你喜欢
- 从2010年1月16日向新网代理商索要域名转移密码,到2010年1月27日13:55分Whois信息中的域名注册商变更为Godaddy,历时
- 每家公司都有各自不同的需求,我需要的是什么?眼花缭乱的统计系统,该如何取舍?流量概况今天的流量是增了?是减了?幅度是多少?现在所调用的统计系
- 常用字符集编码的概要特性(一)搞清常用编码特性是解决字符集编码问题的基础。字符集编码的识别与转换、分析各种乱码产生的原因、编程操作各种编码字
- 对于提高自己站点的访问量,最有效的办法是,在做好站点的同时,不放过每一次的宣传机会,永远记住,即使是滴水也能装满瓶子,而当我们容易看到某些经
- 在学生时代,我是一个性格直爽,说话很直的人,说话不怕得罪人,曾经被我顶嘴的下不来台的校长都有好几个。当然,对待身边的朋友,我说话也很直,最初
- 系统启动时需要加载的配置文件/etc/profile、/root/.bash_profile/etc/bashrc、/root/.bashr
- 下载 CentOS7我下载的镜像是 CentOS-7-x86_64-DVD-1908.iso ,你也可以自由选择,下面是下载链接。CentO
- 版主是论坛的一笔财富,没有出色的版主就没有优质的论坛。掌握了一定的论坛资源的版主,首先应该是一个管理者,其次是一个服务者,还应该是一个引导者
- 本文主要是记录一下在apache二级目录上面部署react和vue项目。根目录下面部署很简单,但是在二级目录下就需要在webpack的配置或
- 在asp编程中表单提交的数据如果不做任何处理,将存在安全隐患,很容易被人入侵注入。表单提交数据的安全处理除了要过滤必要的SQL注入字符外,最
- FAT32 标称为65534,实际到2万+时已不稳定。NTFS 似乎没有明确限制单目录文件数量,但有人反应在生成10万+ 文件的目录时遇到报
- 网上的一些防范asp木马的教程都基于提前防范的基础之上,例如:禁止FSO,利用NTFS限制用户目录等等。这些方法虽然有效,但是都是基于提前防
- DNS(Domain Name System)即域名系统是历史悠久的方法,它可以为具有IP地址的计算机分配域名,使计算机拥有字符型名称,如如
- 本文介绍了如何使用Windows NT系列的服务器操作系统中的安全配置功能,网友可以对操作系统的帐户管理,服务管理和审核方法有一定的了解。帐
- 做站也有一段时间了,总的来说,从开始建站到现在,一路的辛酸与快乐只有自己心里清楚,但是,走过来的站长之路也只是重复其它的站长的脚步而已,最近
- 微软全球技术支持中心亚太区总经理柯文达在今天IT市场两会上接受网易科技专访时表示“Windows激活技术”对正版用户来说是一种保护,“对那些
- 互联网违法和不良信息举报中心根据公众举报核查,下列网站存在大量违背社会公德、损害青少年身心健康的低俗内容,有的具有 * 性质,在全国整治互联网
- Immunet Project,赛门铁克公司响应中心前任总监奥利弗。弗雷德里希(Oliver Friedrichs)开发了一款基于云的免费杀
- UDP协议的特点UDP 不提供可靠性的传输,它只是把应用程序传给 IP 层的数据报发送出去,但是并不能保证它们能到达目的地。由于 UDP 在
- 前置条件:nginx 需要有 ngx_http_limit_conn_module 和 ngx_http_limit_req_module