java 文件存储

1、小应用存储方案linux

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

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

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

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

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

2、云存储方案windows

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

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

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

基于大存储优点,您能够搭建出各类多媒体分享网站、网盘、我的和企业数据备份等基于大规模数据的服务。网络

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

优势: 开发成本低,能够配置cdn加速网络...

3、分布式文件系统方案

常见的分布式文件系统有,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不会对文件进行分快(切分)存储。

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

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

部分信息来自网络。

相关文章
相关标签/搜索