3.3、scp文件分发

2018年10月29日 08:48 | 48次浏览 作者原创 版权保护

在 PHP 程序中通过 SCP 来进行文件分发并不困难,按照函数手册的指引,不需要几行代码就可以完成服务器之间的文件复制。

这里有一点需要注意,在 SSH 服务器端,也就是分发文件的目标服务器上,我们需要对 SSH 的服务器端配置选项进行一些修改,通常配置文件为/etc/ssh/sshd_config,我们修改以下内容:

UseDNS no
PasswordAuthentication yes

这样一来可以减少 SSH 服务器进行 DNS 解析的时间,并且允许我们在 Web 应用程序中通过密码验证的方式来登录 SSH 服务器。

一个用 PHP 编写的用于分发文件的例子如下所示:

<?php
$conn = ssh2_connect("10.0.1.201", 22);
ssh2_auth_password($conn, "user", "pwd");
ssh2_scp_send($conn, "/home/user/list.htm", "/home/user/list.htm", 0644);
?>

的确非常容易,那么,再次回到 I/O 延迟的问题上来,通过基于 SSH 通道的 SCP 进行文件分发,它的 I/O 延迟与前面的 NFS相比,结果如何呢?

我们同样对 22KB 和 23MB 的两个文件进行了分发测试,结果如表 3-1 所示。

表 3-1 远程 SCP、本地 SCP 和本地磁盘写操作测试结果


与前面 NFS 的测试结果相比,我们不难看出,对于 22KB 的文件,SCP 花费了较多的时间,这或许归咎于额外的身份验证机制。对于 23MB 的大文件,远程 SCP 传输的时间和 NFS 的测试结果不相上下,这时候身份验证的开销已经成为次要因素,而在本地 SCP 传输中,身份验证的开销再次成为不可忽略的一部分。

显然,在绝对速度的对比中,SCP 并没有什么明显的优势,但我们要知道,关键的问题是,在我们试图通过文件复制来创建更多副本的那一刻起,绝对速度已经不是那么重要了,相比之下,如何将文件复制到更多的服务器上成为延续生命力的关键所在。所以,这又回到应该选择共享文件系统还是文件复制的问题上,对此,我们的目的已经完全不同。

在共享文件系统中,文件都存储在 NFS 服务器上,即便网络带宽可以充分满足需要,但总有一天 NFS 服务器的磁盘会成为性能的杀手,从而制约更大规模的共享访问。而在文件分发机制中,文件被复制到多台服务器上,这本身便分散了磁盘 I/O,相比于 NFS 的集中式访问,这相当于是针对磁盘 I/O 的负载均衡


此文章本站原创,地址 https://www.vxzsk.com/1916.html   转载请注明出处!谢谢!

感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程


上一篇:3.2、SSH 下一篇:3.4、sftp和多级分发
^