对于文件管理我们已经非常熟悉,但是云同步应用的文件管理不同于本地文件管理,云同步的数据存储方式区分于本地文件存储方式。文件存储系统在设计初期会确定存储系统的需求,如果文件存储系统设计为能够直接容纳存储所有文件的文件系统,那么文件系统的文件存取能力会很低。一般情况下,文件存储系统都会有针对性的确定系统存储的文件小大范围,也就是文件存储系统的需求,然后再根据系统需求做优化设计,提高文件存储系统的文件吞吐量以及存取效率。为了减低云端文件存储系统的压力,一般使用文件分割的管理技术,将需要存储的文件分割为多个小文件,然后再保存到文件存储系统中。
文件分割管理的技术难点主要有以下几点:
1. 文件分割的加密压缩:如果直接对文件进行加密压缩,每个加密文件只对应一个密钥对。而采用文件分割技术之后,每个文件包含多个文件块,每个文件 块对应一个密钥对,也就是说一个文件对应多个密钥对,无法直观的对应起来,对系统的管理会造成混乱。
2. 文件块的同步和校验:文件分割成多个文件块之后,可以使用多线程进行同步,但是多线程会大量的占用内存和处理器的资源,多线程的各个任务也要轮 流等待系统或者外部的共享资源。如果线程都在等候使用共享资源,会使得运行速度变慢。多个线程会造成对 CPU 的额外开销,给系统带来更多上下文切换的负担。另外,使用多线程容易出现死锁,死锁会导致应用失效而且死锁很难定位问题,会增大开发的难度。文件块还需要单独保存文件的校验信息,大量的文件块同步也需要大量的文件块校验操作,需要占用一定的系统资源。
3. 文件块的下载合并:文件分割之后以文件块的形式存储,使得文件的下载过程也需要经过多个步骤。应用需要先获取文件的文件块信息,然后下载所有文 件块。虽然可以使用多线程下载文件块,但是文件块是有序的,文件必须等待所有文件块下载成功之后在能够按顺序写入,因此,在文件下载没有全部完成的情况下文件是不可用的,也就是说即使文件已经下载 99.9%,临时文件也还是一堆乱码而无法使用。
1. 网络宽带成本以及网络不稳定性;
2. 一个文件分割存储,使得文件的存取步骤更加的复杂繁琐,在分割成小文件之后进行的绑定管理,以及文件的归属问题.
1. 更多的数据量。随着网络的升级和互联网的发展,数据终端的规模越来越大,数量也越来越多,用户数据呈现了指数级的增长。云同步数据管理面临着比传统的数据管理更庞大的数据量,同时数据的增长量很很大
2. 更多的数据类型。云同步应用应对着各个不同的行业、不同的终端、不同的形式的数据内容,应用需要处理更多类型的数据形态和数据结构。针对不同类型的数据内容,应用需要兼容尽可能多的数据模式
3. 更多的数据冗余。云同步中的数据在不稳定的网络环境中传输,增加了数据的不确定性和冗余性,需要花费更多的精力来处理数据冗余的问题对于文件分割来说,文件分块数据越多,文件块越小,文件同步成功的概率越大.但是另一方面,文件块的数目越多,对数据库和存储系统的负载压力就越大.
存储系统:在文件存储方面有很多优秀的开源的系统,例如HDFS、GFS、Ceph,适用于小文件的fastDFS
数据库系统:文件分割存储的模式需要花费更多的资源对文件和文件块进行存储管理,需要维护文件和文件块之间的映射关系。数据库设计需要包含文件表,文件块表、文件块映射表。
数据加密是为了限制数据的访问权限,只有能够解密的用户才能够访问此数据,文件加密压缩技术可以保证文件的安全性,文件压缩可以提高文件传输的效率.网络中的文件压缩之后还是很大.所以文件分割之后才进行加密压缩处理,当文件块传输结束后,需要对数据进行校验.
1. 加密算法:使用加密算法将原始的数据流跟数据加密密钥进行加密运算,产生不可逆的加密运算
2. 密钥加密技术分为对称加密技术和非对称加密技术两种,这里使用非对称加密技术对文件数据流进行加密,RSA 非对称文件加密算法分为公钥和私钥,允许在不安全的网络通讯上实现安全的数据传输,数据来源使用公钥对数据流进行加密运算,通过公钥加密的数据只有通过对应的私钥才能够解密,密钥对由数据接收方生成,只有公钥才会进行传输。
就是使用更小的数据量表示同样信息量的过程,庞大的数据量加大了数据存取和数据传输的压力,数据压缩是为了更加的节省空间,并能够有更好的传输效能.数据压缩的过程就是在不丢失数据情况进行数据处理的过程,这个过程也叫作冗余压缩.数据的冗余压缩是一个可你的过程,可以通过解压缩技术还原原始的数据.
1. 读取原始文件信息,想数据库添加文件信息
2. 根据指定文件大小对原始文件进行分割,使用文件块的方式管理文件
3. 上传各个文件块,向数据库添加文件块信息
4. 确认所有文件块同步结束
5. 访问数据库,保存文件和文件块的映射关系
6. 文件上传同步
1. 获取文件块列表:由于用户文件并不是直接存储到远程文件存储系统的,所以应用不能直接用过文件的 fileId 来下载文件。只有通过文件 ID 获取文件对应的文件块列表, 根据文件块的 ID 获取详细的文件块信息,下载文件块来间接完成文件下载功能。
2. 文件块下载:使用文件块的 ID,应用到指定的存储服务器同步文件块,将列表中的文件块下载到本地的过程。文件块的下载情况主要看当时的网络情况以及远程文件存储系统的响应速度。
3. 文件块校验:文件块下载完成之后,通过文件块大小以及 hash 值来校验文件块是否成功下载。如果文件块校验失败,则此文件块无效,需要重新下载或者采用人工策略处理此问题。
4. 文件块解压:采用文件块压缩时相对应的文件块解压缩算法,对文件块解压缩。
5. 文件块解密:从服务器端获取文件块解密的私钥,采用文件块加密对应的解密算法对文件块进行解密。
6. 文件块合并:文件块分别下载校验解压解密之后,应用需要将分离的文件块重新合并,恢复用户的原始文件。只有所有的文件块都下载成功而且有效的时候才能够对文件块进行合并,文件对应的文件块列表是顺序的,应用根据文件块列表的顺序对文件块进行合并操作。