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

场景

  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访问即可.

原文地址:https://www.cnblogs.com/nuccch/p/10215888.html

时间: 2024-10-10 08:29:08

多实例集群部署下的图片上传的相关文章

zabbix实例集群部署-偏向于管理使用

zabbix实例集群部署 前言:已经折腾两个礼拜了,本文侧重点不在于安装,在于使用管理.部署请看文档或者百度,,很简        单 提示:zabbix关于模板.应用集.主机组.触发器.等等命令一定要谨慎,不要随意,防止自己糊涂了 主机组: 比如说,我的主机组用的是yunce56,因为我这个项目名称叫做yunce 模板:zabbix自带的templates不够合理,我自己重新写,DIY.比如说我专门监                          控cpu,我可以写yunce-cpu-li

Linux 下 ---ThinkPHP 图片上传提示:上传根目录不存在!请尝试手动创建

2016年11月15日11:15:47 Windows下如果碰到如此问题,要看文件保存根路径里的rootpath,比如ThinkPHP框架里config.php文件里的的参数配置: //文件上传相关配置 'UPLOAD_CONFIG' => array( 'mimes' => '', //允许上传的文件MiMe类型 'maxSize' => 2 * 1024 * 1024, //上传的文件大小限制 (0-不做限制,默认为2M,后台配置会覆盖此值) 'autoSub' => true

HAProxy高可用负载均衡集群部署

HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3.10.0-327.el7.x86_64 集群架构: 前端:HAProxy 1.虚拟FQDN:www.simpletime.net 2.VIP:192.168.39.1:DIP:172.16.39.50 3.调度服务器:Varnish1.Varnish2 4.调度算法:URL_Hash_Consist

SpringMVC+Spring+MyBatis 整合与图片上传简单示例

一.思路: (一) Dao层: 1. SqlMapConfig.xml,空文件即可.需要文件头.2. applicationContext_dao.xml. a) 数据库连接池b) SqlSessionFactory对象,需要spring和mybatis整合包下的.c) 配置mapper文件扫描器. (二)Service层: 1.applicationContext_service.xml包扫描器,扫描@service注解的类.2.applicationContext_trans.xml配置事务

centos6下redis cluster集群部署过程

一般来说,redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口,比如:slaveof 192.168.10.10 6379,然后启动主从,主从就搭建好了.redis主从中如果主节点发生故障,不会自动切换,需要借助redis的Sentinel(哨兵模式)或者keepalive来实现主的故障转移. 今天介绍下redis cluster集群模式:redis集群是一个无中心的分布式redis存储架构,可以在多个节点之间进行数据共享,解决了redi

万台规模下的SDN控制器集群部署实践

目前在网络世界里,云计算.虚拟化.SDN.NFV这些话题都非常热.今天借这个机会我跟大家一起来一场SDN的深度之旅,从概念一直到实践一直到一些具体的技术. 本次分享分为三个主要部分: SDN & NFV的背景介绍 SDN部署的实际案例 SDN控制器的集群部署方案 我们首先看一下SDN.其实SDN这个东西已经有好几年了,它强调的是什么?控制平面和数据平面分离,中间是由OpenFlow交换机组成的控制器,再往上就是运行在SDN之上的服务或者是应用.这里强调两个,控制器和交换机的接口——我们叫做南向接

Elasticsearch集群 windows下部署ES集群,多台服务器

? 针对于Elasticsearch集群部署基本上就是一些配置就可以解决的,我们这块简单称为(ES). ES下载地址为:https://www.elastic.co/cn/downloads/past-releases 如果不能下载,可以转至https://download.csdn.net/download/weixin_41986096/11635439 进行下载. 下来选择盘符建立es-cluster文件夹,名称可以随意替换,我们将es复制3份,分别如下图所示(伪集群部署方式) ? 然后打

OpenStack Swift集群部署流程与简单使用

转载:http://www.cnblogs.com/fczjuever/p/3224022.html 之前介绍了<OpenStack Swift All In One安装部署流程与简单使用>,那么接下来就说一说Swift集群部署吧. 1. 简介 本文档详细描述了使用两台PC部署一个小型Swift集群的过程,并给出一些简单的使用实例.本文档假定如下前提条件: 使用Ubuntu操作系统. 每台机器都运行Swift的所有服务,既是Proxy Server,又是Storage Server,用户可以向

FastDFS集群部署

之前介绍过关于FastDFS单机部署,详见博文:FastDFS+Nginx(单点部署)事例 下面来玩下FastDFS集群部署,实现高可用(HA) 服务器规划: 跟踪服务器1[主机](Tracker Server):10.100.139.121 跟踪服务器2[备机](Tracker Server):10.100.138.180 存储服务器1(Storage Server):10.100.139.121 存储服务器2(Storage Server):10.100.138.180 存储服务器3(Sto