谈谈FTP

一、关于FTP 1.FTP是什么?

FTP,全称”文件传输协议”。属于TCP/IP四层模型中的应用层。

2.TCP/IP五层模型有哪些?

如图所示:

图一

用文字叙述(从高层到底层):

(1)应用层;

(2)传输层;

(3)网络层;

(4)数据链路层;

(5)物理层。

其中如FTP、HTTP、SNMP等就属于应用层。

3.为什么要使用FTP

从我个人职业经历来谈,使用FTP的应用场景如下:

(1)数据备份;

(2)公司内部文件管理;

(3)业务层应用;

(1)数据备份

关于数据备份,结合我之前做运维的一段经历,主要手段如下:
编写shell脚本(基于scp命令),配置crontab,进行定时文件传输备份(通常传输到另外一台备份服务器上)。

除了基于scp之外,还可以有sftp、sz/rz、rsync和本文提到的ftp等。

备份的内容通常如下:
数据库脚本、应用软件日志(tomcat等)、常用脚本备份、重要配置文件和软件备份等。

(2)公司内部文件管理

关于公司内部文件管理,有的公司会搭建一个内部的FTP,主要用于管理公司重要文件(如公司规章制度文档、业务文档、技术文档、开发环境软件、重要第三方账号管理等)。

FTP有严格的权限控制,可以控制谁能访问某个目录下的文件和下载文件的权限。

(3)业务层应用

业务层应用的话,我之前用FTP作为我的博客系统文件管理工具,主要用于保存用户的头像和上传的如MP3、MP4、Pdf、Word等文件。

因为如果将其以二进制(其实将文件流转化为二进制)的形式存储,会影响数据库的性能。

问:为什么将文件(这里指图片和其它文件格式的文件)以二进制的形式存储会影响数据库的性能?
因为存储图片或其它文件的二进制需要非常长的字段(如text或longtext等),对于数据库查找数据的时候,会增加处理时间(处理时间长),在高并发的应用场景下,很多用户访问,这会加重数据库的负担,从而导致处理时间长(速度慢),导致C端用户可能看到的景象是,点击某个功能加载很慢(如电商相关的,商品列表展示非常多的图片等)。

问:为什么对于非常长的字段会增加数据库的查询时间呢?
因为更长的列会消耗更多的内存,因为MySQL通常会分配固定大小的内存块来保存内部值。

以我之前写的博客系统,我会图片上传至FTP,然后通过Nginx做代理映射到FTP上传图片的目录,实际上保存在数据表里面的图片,仅仅是一个URL。而且nginx对于处理静态资源(如图片、css、html、js等)性能非常好。

问:目前公司项目用FTP多吗?
我的回答是分情况看,比方说对于中小公司或者创业公司来说,一般不会使用FTP,通常会用阿里云或者腾讯云、七牛云的存储服务。因为性能更好,不需要任何成本。因为自建,不管是FTP或者是分布式FastDFS都需要对其非常熟悉,不然的话,很容易遇到一些奇怪问题。
对于一些传统公司来说,用FTP的还是比较多(这里就不列举了)。

4.FTP的优缺点 (1)FTP有哪些优点?

a.完善的权限管理;

b.基于网络,操作灵活;

c.安全性高,数据传输可通过SSL、SSH2进行安全加密;

d.使用TCP/IP协议,保证数据准确到达;

e.传输速度快,FTP的传输效率比HTTP更快;

(2)FTP有哪些缺点?

a.FTP没有内置加速技术,传输巨型文件和海量文件需要很长时间,过程存在无故中断、传输文件内容不一致、传输文件丢失等(最近就特别感受到了,传输近二十个G文件,一旦中断,又得重新进行);

b.FTP传输过程没有可视化的显示记录(使用winscp或xftp才能看到传输过程,代码层面上根本看不到);

5.FTP的替代方案有哪些?

就FTP方面,有如下方案:

a.FTPS;

b.SFTP;

但除此之外,还有很多第三方的文件存储方案如前面提到腾讯云对象存储、阿里云对象存储、七牛云对象存储等。

当然了,一切根据公司业务情况和公司背景情况而定,很多公司之所以不使用主入腾讯云、阿里云、七牛云的存储方案,因为存储的东西非常重要,放在第三方不安全,害怕对方可能窃取其中的重要信息。

这也是为什么微信会有企业微信、阿里会有钉钉、美团会有大象的重要原因。

6.关于FTP的安装 (1)CentOS7安装FTP

参考如下流程,一步步执行即可:

#安装FTP yum -y install vsftpd #修改配置文件 vim /etc/vsftpd/vsftpd.conf 修改第12行为: anonymous_enable=NO 禁止匿名登录 取消第102行chroot_list_enable=YES,104行chroot_list_file=http://www.likecs.com/etc/vsftpd/chroot_list的注释 在最后一行新增 allow_writeable_chroot=YES #新建用户 useradd test passwd test #防火墙放行 firewall-cmd --permanent --zone=public --add-service=ftp firewall-cmd --reload #ftp命令 #设置开机启动 systemctl enable vsftpd.service #启动 systemctl start vsftpd.service #停止 systemctl stop vsftpd.service #查看状态 systemctl status vsftpd.service #重启ftp服务器 systemctl restart vsftpd.service

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxxzx.html