一、关于FTP 1.FTP是什么?
FTP,全称”文件传输协议”。属于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等)、常用脚本备份、重要配置文件和软件备份等。
关于公司内部文件管理,有的公司会搭建一个内部的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的还是比较多(这里就不列举了)。
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