工作经历:
本人华为工作6年,做过开发、维护、一线支撑等大量技术工作。
本文主要涉及几个方面:1、拷贝文件的几种方法;2、拷贝文件成功率;3、行为可追溯;
本文知识点非常分散,总目标是高效、可靠的文件传输。
0、概述
拷贝文件,或者说信息复制,作为系统最常见的操作,有两个最总要的指标。
【成功率】应该无限接近100%,完全的100%是基本达不到的,具体拷贝失败的可能性接下来讨论。拷贝文件作为系统基础功能,成功率下降一点点对整个稳定性影响巨大。
【传输速度】当传输大量文件或者过大文件时,传输速度是必须考虑的因素,各种不同的拷贝方式,传输的速度差异非常大,甚至达到上千倍的差异。
【copy】最简单的拷贝,Windows的copy、xcopy、Linux的cp,一般用在单机从不同的分散目录拷贝到工作目录,除了本地拷贝,不推荐使用。
【link】创建链接,Windows使用mklink、Linux使用ln。创建链接后不生成新的文件,但是操作链接和操作目标文件是一致的,所以准确的说,建立链接并不是拷贝。创建链接推荐使用在源文件比较稳定的情况,这里的稳定是指链接的源路径下的文件,在拷贝过程中不会被修改,并且只能拷贝出来,不能修改链接源路径下的文件。
【robocopy、rsync】分别是Windows和Linux下自带的共享拷贝工具,除了基本拷贝外还提供了带宽监控、文件校验等功能。以robocopy举例(在shell中敲一下robocopy,观察使用方法)
简单用法:: ROBOCOPY source destination /MIR
推荐网络传输时使用这种方式,同时每次拷贝将返回的带宽记录到日志,便于分析传输情况调整传输策略。
注意robocopy和rsync类似于FTP服务器,需要简单配置,小心权限问题。
【FTP】比robocopy和rsync稍微复杂一点点,比系统自带的提供的配置、可监控项更多,稳定性更好。推荐网络传输使用,必须注意权限。
【鉴权】涉及到网络操作,服务器一般需要配置目标路径、登陆用户名、密码等信息。如果使用用户自身服务器直接记录,很大风险是泄密。这时,登陆用户名密码由服务端发送到鉴权服务器,鉴权给出临时身份证是一个比较好的方案。用户权限由鉴权中心统一管理,某个用户行为异常,直接在鉴权服务器修改权限即可。
【git、svn】使用git、svn等版本控制系统,同步文件的稳定性、可靠性上升了一个层次。实际应用上,要尽可能的使用版本控制系统拷贝文件。还有,版本控制系统还增加了行为可追溯性,具体的文件修改等操作都可以通过系统记录查询到。
【socket】socket类似流设备一般传输字符串,传输文件时,可以把文件拆分成一行一行传输,注意校验。
【数据库】数据库有很好的ACID特性,在多个系统交互的时候,用数据库保存申请、响应等数据,比传统的文件保存效果更好。
【考虑并发】多个实例操作同一个文件,可能出现交替写入读出的情况,导致数据不一致,解决办法是加锁,获得锁的实例才获得执行。
【考虑带宽】闲时和忙时对同一服务器的访问可以获得的带宽差异非常大,可以考虑将比较稳定的例如库文件在闲时同步,每次同步的数据量尽量小。
【大文件】某些日志文件,长期积累可能达到上G大小,此类文本文件打开都非常困难,查找、保存等操作都会大量延迟。可以考虑此类文件设置一个上限,例如每记录10万条保存一个文件。
【磁盘监控】随着临时文件和日志的不断增大,软件分支增加,即使上T的硬盘也会被越来越快的撑爆了。此时可以考虑将大系统拆分成对应不同分支的小系统。另外,磁盘剩余空间的持续监控并通知相关责任人成为必备机制。
本人QQ 280775561,微信JohnLee790608,有同路人可以一起探讨。