java 文件存储

1

一、小应用存储方案

在开发中上传文件存储是个问题,而一般小应用开发会选择服务器本地目录做为存储地址,通过保存文件的相对路径来获取文件,在应用不要求高可用的情况下这是一种普遍的方案。

问题: 在每次更新Java版本时,都需要将文件目录做一次备份,不然直接将打包好的war包替换原来的版本时可能会丢失文件(有时可能会直接删除原来的版本目录然后在将新版本放到tomcat的webapps目录)。

解决方案: 使用 linux (windows的快捷方式) 的软连接方式将文件目录存储在tomcat webapps文件目录之外,这样应用程序只需要读取软连接的目录即可上传文件到真正的文件目录地址,而读取文件还是从软连接的目录读取,这样整个应用目录被删除文件也不会丢失。这里需要提一下在tomcat中读取软连接文件需要在context.xml文件配置一个allowLinking属性(只要添加属性即可,不要删除其他配置)。

<!--tomcat 5 6 7-->    
<Context allowLinking="true"/> 

<!--tomcat 8-->    
<Context>  
  <Resources allowLinking="true"/> 
</Context>

二、云存储方案

随着文件系统规模越来越大,以及对应用的高可用与高并发需求。特别在应用需要快速迭代时可以选择比较成熟云存储解决方案。

云存储是在云计算(cloud computing)概念上延伸和发展出来的一个新的概念,是指通过集群应用、网格技术或分布式文件系统等功能,应用存储虚拟化技术将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统。所以云存储可以认为是配置了大容量存储设备的一个云计算系统。

现国内较成熟的云存储有阿里云的Oss,腾讯的Cos (本人并没有使用过) 即其他云服务提供商,云计算的基本特点是对外提供的海量、安全、低成本、高可靠的云存储服务。您可以通过本文档提供的简单的REST接口,在任何时间、任何地点、任何互联网设备上进行上传和下载数据。

基于大存储优势,您可以搭建出各种多媒体分享网站、网盘、个人和企业数据备份等基于大规模数据的服务。

缺点: 运营会产生额外的费用。

优点: 开发成本低,可以配置cdn加速网络...

三、分布式文件系统方案

常见的分布式文件系统有,GFS、HDFS、FastDFS等。各自适用于不同的领域。它们都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。

1.GFS(Google File System)

Google公司为了满足本公司需求而开发的基于Linux的专有分布式文件系统,尽管Google公布了该系统的一些技术细节,但Google并没有将该系统的软件部分作为开源软件发布。

2.HDFS

Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。

3.FastDFS

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用
FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。

FastDFS原理

FastDFS通过客户端连接tracker集群,tracker返回一个集群中可用的storage节点给客户端,客户端直接与storage连接传输文件,当storage文件保存成功并将信息同步到tracker时,storage将返回一个fileId给客户端(fileId 字段中的 group可以计算出对应服务器IP,M00是软连接文件存储的目录),客户端可以通过这个fileId直接访问到文件,也可以通过fileId下载图片。

FastDFS集群线性扩容

由于FastDFS通过tracker来管理存储节点,要实现线性扩容只要添加storage然后配置新的group即可,这里可以只要使用默认的负载方案(根据存储节点大小决定)将文件存储在高容量节点,注意两相同group中采取最小的节点为准。

FastDFS冗余备份

FastDFS文件备份根据相同的group个数来决定备份的个数,当有两个group相同,上传文件时将在另外一台机器上进行同步操作,以此类推。如果另一台机器宕机了,那将在恢复工作后继续同步。如果在新增的节点上配置已有的group,并且group已经有文件,那么新的节点也将同步已有的文件。

FastDFS架构图
图片来自网络

FastDFS安装

FastDFS具体安装请参照 https://github.com/happyfish1... 注意:在配置tracker_server时配置多个就是多节点。

案例地址: https://github.com/tzling/fas...

FastDFS与HDFS的区别

定位和应用场合不一样,Hadoop的文件系统HDFS主要解决并行计算中分布式存储数据的问题,其单个数据文件通常很大,采用了分块(切分)存储的方式。

FastDFS主要用于大中网站,为文件上传和下载提供在线服务,在负载均衡、动态扩容等方面都支持得比较好,FastDFS不会对文件进行分快(切分)存储。

优点:高容错性能,高扩张性。

缺点:开发成功高,配置难度较复杂。

部分信息来自网络。

你可能感兴趣的

载入中...