图片服务器搭建方案

  1. FTP

    • 优点: 
      可以使用任意服务器或云服务作为FTP服务端。 
      FTP服务端没有操作系统限制。 
      代码完成后形成模块,任意程序都可使用。 
      读取图片时不占用应用服务器资源。
    • 缺点:
      需要编写的代码较多。 
      前端显示图片会暴露FTP服务器的地址。 
      FTP服务器需要做端口映射。 
      传输速度一般。 
      同步上传思路需要修改的方法较多。
    • 使用技术:
      FTP服务端,JDK1.6中rt.jar包自带的FtpClient。
    • 实现思路
      保持源码不修改,异步上传思路是在上传完成后启动FTP上传线程,在不影响用户操作的情况下将图片上传到FTP服务器,同步上传思路是在上传图片过程中,将文件流对象直接上传到FTP服务器,而不是保存到本地。
      • 当前图片上传思路
        调用图片上传方法- 获取应用程序完整路径-追加“upload”-追加用户名,时间戳.jpg-判断路径是否存在,不存在则创建-文件流上传图片-调用水印方法-保存相关数据到图片信息表-开始FTP上传线程-结束。
      • 修改后的思路(异步):
        上传到应用服务器:调用图片保存方法-获取当前应用完整路径-追加“upload”-追加用户名,时间戳.jpg-判断路径是否存在,不存在则创建-文件流上传图片-调用水印方法-保存相关数据到图片信息表-开始FTP上传线程-结束。
        FTP上传线程:开始-登录到FTP-遍历当前上传目录下的图片文件,获取路径-解析目录,判断目录在FTP服务器上是否存在,不存在则创建-调用FTP上传方法上传图片-删除应用服务器端的图片-完成。
        - 修改后的思路(同步):
        通用图片保存方法-文件流接收图片保存到对象中-调用水印方法-登录到FTP-追加用户名-时间戳.jpg-判断路径是否存在,不存在则创建-文件流上传图片-保存相关数据到数据库日志表-结束。
        注:同步上传方式需修改水印方法,同步上传等待时间高于异步上传。
  2. Windows共享目录:

    • 优点:
      • 共享方式简单,效率高,传输速度快
      • 代码改动最小,仅需修改上传路径
      • 成本低,维护简单
      • 不会暴露图片服务器地址
    • 缺点:
      • 只能使用Windows系统
      • 若服务器重启或改变网络拓扑结构,可能要重新挂载和配置
      • 只能用于局域网共享
    • 使用技术:
      • windows自带的目录共享功能,Linux下需安装支持Samba协议的相关软件
    • 实现思路:
      • 将应用服务器下某一目录挂载为windows的共享磁盘,程序中改动代码,将上传目录指向此目录即可。
  3. NFS

    • 优点:
      • 同window共享目录优点。
      • 服务器操作系统无限制,windows和linux均可。
      • 可用于局域网和广域网
    • 缺点:
      • 安装和配置较为繁琐。
      • 若服务器重启或改变网络拓扑结构,可能需要重新挂载和配置。
    • 使用技术:
      • NFS服务
    • 实现思路:
      • 使用NFS服务搭建NFS服务器,设置共享目录后,将应用服务器下某一目录挂载为此共享目录,将上传目录指向此目录即可。
  4. 数据库存储:

    • 优点:
      • 无需图片服务器,直接将图片存到数据库服务器中。
      • 结构化的图片信息
    • 缺点:
      • 拖慢数据库备份速度,后期图片较多时维护费时
      • 数据库服务器压力大
      • 需改动数据库结构
    • 使用技术:
      • DB2数据库,使用Blob类型存储图片。
    • 实现思路:
      • 修改数据结构,图片信息表中加入一列或创建单独一张表保存图片,上传图片时无需配置路径,将图片转为byte[]插入数据库中即可
  5. fastDFS

    • 优点:
      • 分布式文件系统,传输速度最快,性能最高。
      • 可动态增删节点,当存储空间不够用时增加节点即可。
      • 代码完成后形成模块,任意程序都可使用。
      • 读取图片时不占用应用服务器资源
    • 缺点:
      • 需多台图片服务器形成分布式文件系统才能体现出价值
      • 安装配置最繁琐,后期维护较复杂
      • 实现成本高,性价比低
      • FastDFS和不同版本的Linux可能存在兼容性问题
      • 前端显示图片会暴露图片服务器地址
      • 图片服务器需做端口映射
      • 代码量大
    • 使用技术:
      • FastDFS软件,FastDFS提供的JAVA Cliet jar包
    • 实现思路:
      • 后台上传与下载需要使用FastDFS提供的JAVA Client中的相关方法,具体实现思路与FTP类似。
  6. 大数据层面:HBase存储:

    • 优点:
      • HBase存储层是分布式文件系统,对于存储量来说毫无压力。
      • 对分布式文件系统存取小文件的噩梦来说,HBase系统层小文件合并、全局名字空间等多种优势。
      • 通过将图片属性信息与图片内容存储到一个大表中,可支持图片的多属性综合查询。此外,还可以根据应用需求,对列簇进行扩展以保存应用相关信息,从而支持应用相关的图片查询。可见,基于HBase的海量图片存储技术不仅解决了图片存储,还实现了灵活的图片检索。.
      • HBase隐含了小文件打包过程,无需进行二次开发即实现了系统层小文件合并。
      • HBase采用分布式B+树对图片元数据进行全局统一管理,实现了全局名字空间,方便了对图片的管理。
    • 缺点:
      • 大表设计是个巨大难点
      • 无校验码设计,导致存储图片数据的正确性无法验证(需自己设计)
      • Key-Value字节数组没有进行对齐,影响读写效率(自己设计对其机制)
      • 需摸索设置数据块大小(由于HBase本身设计,当数据块过大时,不适合随机读,从而影响图片读取性能。因此数据块不能无限调大,推荐数据块最大不超过1M。可在具体应用场景,即使大多图片在1M以内,也可能存在少量图片超过1M,从而需要对基于HBase的海量图片存储技术进行改进)。

你可能感兴趣的:(大数据进阶)