专栏首页后端开发随笔多实例集群部署下的图片上传和访问

多实例集群部署下的图片上传和访问

场景

  1. 存在多个无状态的Web应用服务,支持多实例集群化部署(使用nginx作为反向代理)
  2. 在Web应用中存在图片文件上传功能
  3. 不能将图片文件直接保存到数据库中,数据库中只保存文件访问链接

问题

  1. 因为Web应用服务是多实例集群化部署的,因此上传图片之后不能简单保存到本地,否则其他实例将无法访问上传之后的图片.
  2. 图片上传之后不要通过Web应用来访问(像Tomcat这样的Servlet容器不擅长处理静态文件)

解决方案

图片如何存储

针对第一个问题,图片通过Web应用上传之后不能保存在本地,应该使用专门的图片服务器或者分布式文件系统进行存储. 具体实现方案如下:

  • 在项目初期的时候,图片数量不算太多,可以直接使用1台独立的静态文件服务器进行存储即可,同时使用RAID机制对磁盘进行一定的冗余备份.
  • 随着项目的演进,图片数量达到一定量级出现瓶颈时(如单台服务器存储容量不够,或者文件数量太多访问缓慢等因素),需要考虑使用分布式集群文件系统进行文件存储,如:FastDFS等.

这里还存在一个疑问: Web应用接收到上传的图片文件之后如何保存到静态文件服务器或者集群文件系统呢? 其一, 如果图片文件存储在单独的文件服务器中时,Web应用接收到浏览器上传的图片之后可以通过NFS或者FTP协议将文件同步到图片服务器,但是可能存在同步出错或者延时的情况.当然,还可以开发一个简单的网络服务程序运行于图片服务器上,专门用于接收上传图片. 其二, 如果图片文件存储在分布式集群文件系统中,则直接使用文件系统API将文件写入即可.

如何访问图片

针对第二个问题,图片上传之后访问时如何与Web应用分离? (1)如果只是单台的图片服务器,可以直接使用nginx作为静态文件服务器即可,简单快捷,访问性能有保证. (2)如果图片保存到分布式集群文件系统中,则直接通过文件系统API访问即可.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 百度地图JavaScript API获取用户当前经纬度和详细地理位置,反之通过详细地理位置获取当前经纬度

      前端时间刚好使用了百度地图的js api定位获取用户当前经纬度并获取当前详细位置和通过当前用户详细地理位置换取用户当前经纬度坐标的功能,为了方便下次找起来方...

    追逐时光
  • 微信小程序开发之多图片上传+服务端接收

      业务需求,这次需要做一个小程序同时选中三张图片一起上传到服务端,后端使用的.NET WEBAPI接收数据保存。

    追逐时光
  • 2019-08-16 vue的axios的拦截器,响应器(api的集中处理。统一处理入参和出参)

    用户4344670
  • 微信公众号支付提示当前页面的URL未注册

      记一下前端时间自己做了一个微信公众号支付的功能,因为有一段时间没有接触过了微信支付方面的开发,居然忘记了在微信商户商户号中配置了对应的支付目录,所以提示我当...

    追逐时光
  • .Net微信开发之通过UnionID机制,解决用户在不同公众号,或在公众号、移动应用之间帐号统一问题

      最近一段时间一直在做关于微信方面的网站应用开发,这段时间也收获的不少关于微信开发方面的开发技能,接触的比较多的主要有微信公众号和微信网站app第三方登录授权...

    追逐时光
  • 分享:手把手生成漂亮的静态文档说明页

    最近经常被问 https://t.itmuch.com/doc.html 文档页是怎么制作的,考虑到步骤略复杂,写篇手记总结下吧。

    用户1516716
  • Hickory智能门锁存在的多个漏洞

    近期,Rapid7安全研究团队发现了Hickory蓝牙智能系列BlueTooth Enabled Deadbolt款式门锁存在多个安全漏洞,漏洞涉及其移动端AP...

    FB客服
  • Git打标签与版本控制规范

    用过Git的程序猿,都喜欢其分布式架构带来的commit快感。不用像使用SVN这种集中式版本管理系统,每一次提交代码,都要为代码冲突捏一把冷汗。 频繁commi...

    我是leon
  • 「简单实战」YouTube Iframe API 的使用

    业务需求需要在自己的网页上嵌入油管( youtube )上的视频,所以去踩了油管 IFrame Player API 的坑。其实和大多数国内视频网站的 ifr...

    拾贰
  • .NET WebAPI中使用Session使用

    今天做项目的时候因为需要编写一个短信验证码的接口我需要在我的后台.net webapi中存入我随机生成的短信验证码方便与前端传递过来的数据对比,所以决定使用s...

    追逐时光

扫码关注云+社区

领取腾讯云代金券