原文地址:http://www.cnblogs.com/tdws/p/6231308.html

在前面

图片/文件服务器,顾名思义就是存文件呗,有的人用阿里云的现有服务,有的把文件Post到文件服务器,在文件服务器一端用一个应用程序来接收并保存,方法各不相同。老司机们各种服务器已经玩烂了。在使用图片/文件多服务器的几个问题就在于:

1.web上传的文件如何post到文件服务器上及其速度如何,占用带宽和耗时如何。

2.如何使文件均衡的分布在各台图片服务器上。

3.如何拓展新的图片服务器,并保障对已分配的内容影响降到最小。

本篇分享一方面希望有经验的司机给点意见,另一方面分享给新司机和记录自己的历程。

第一分钟确定最终目标

1.各文件服务器不仅提供存储功能,还要有对外服务能力,以降低各个Web服务器的带宽占用和磁盘IO消耗。

2.提供简便和容易的可横向拓展能力

3.Async异步IO保证线程非阻塞,如果对异步有疑问的,可以异步这篇文章 http://www.cnblogs.com/tdws/p/6172207.html

4.文件快速到达图片服务器

第三分钟否定自己

1.否认采取Http Post图片到图片服务器的方式

2.否认采取Hash取模算法

3.否认使用一致性哈希,避免服务器横向拓展后文件移动,即使是少量的

 第五分钟确定实现方式

1.把文件服务器磁盘共享出一个文件夹,作为特定用户间“网络磁盘”,就是说该共享文件夹,只有web服务器有权限访问,你可以参照局域网内如何共享文件夹或者阿里云共享文件夹。

2.通过IIS虚拟目录,将其物理路径指向网络磁盘。你知道共享文件夹间使用Tcp/Ip协议和Netbios协议通信。

3.配置WebConfig访问网络磁盘身份(用户名和密码)—必须配置哦

4.第一步所共享的文件,在文件服务器部署在IIS下WebApp中的一个文件下,以便暴露URL路径。因为你知道IIS除了使用文件读取的方式,是不可以获取父级文件夹中的任何内容的。

4.确定根据文件名均匀分配图片位置的方式—文件后缀名方式,后缀名采用"文件名-01"(一号服务器),后缀名采用"文件名-02"(二号服务器),随机数使用Random来取,随机数是几,我们就存在几号服务器。经过多次测试100万次随机,1,2,3分别得到33W次左右,保障了均衡。在将来拓展的时候,Random随机数多开启几位就行了,不需要文件的移动,也没有reshash。并且在横向拓展服务器数量后,希望保证已有三台服务器不继续存储文件,Random范围可调。在数据库或者缓存中我们已经存下了文件名称,并且其有后缀名,在为前台返回图片URL的时候,只需要根据后缀名称,来拼出文件服务器IP或域名。

第七分钟按照步骤动手操作

1.部署FileServerApp,其功能是对图片暴露URL,其实很简单啦,建立一个Asp.Net空项目,建立出存储图片的文件夹。并将该文件夹共享给Web服务器,细节看最后一节的部署图。

2.假定你已经实现文件夹共享

3.在IIS站点下新建虚拟目录,注意物理路径指向的是网络共享文件夹的网络路径

4.在Webconfig下  <system.web>增加 <identity impersonate="true" userName="ben" password="yourpwd" /> ,IIS对该虚拟目录设置身份验证为 应用程序池标识。

5.使用Server.MapPath可以获取FileServer2的网络路径,并使用你的读写文件方式对目录中的文件进行读写。

6.写入文件建议使用Async的方式,异步IO会在你将IO请求包发给网络驱动或者磁盘驱动后,返回去处理其他事情,在将来的某个时刻,文件写入成功,状态机恢复你的上下文并以同步的方式继续向下执行,能大大提高你Web服务器的吞吐能力。

写在最后的重点

如果还有模糊的地方,看这里就全明白啦

2017-5-3更新。读淘宝技术这十年笔记,有兴趣可以看看。

转载于:https://www.cnblogs.com/hhhh2010/p/7247719.html

(转)十分钟搞定你自己的多图片/文件服务器相关推荐

  1. JeecgBoot 单体升级微服务快速方案(十分钟搞定)

    JeecgBoot 单体升级微服务方案(十分钟搞定) 当前系统分为system.demo 等模块,现有需求把每个模块单独启动作为微服务应用,故而推出新版boot[20200812beta],支持快速切 ...

  2. 逗号后面统一加空格_十分钟搞定字幕,教你做加字幕的“快手菜”

    平台上许多同学有疑问:做视频是否有加字幕的必要呢? 其实除了外语需要翻译.语速过快加字幕方便理解.普通话不标准等情况之外,还是建议有余力的同学可以加上字幕,提升用户的观看体验. 那么问题来了,存在以下 ...

  3. 全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析

    全网最简单的C# json数据解析 无敌菜鸟教程 十分钟搞定json数据解析 废话先说一点,算了.直接进入正题吧. 用例子说话: JSON数据: string json: " {" ...

  4. JAVA微信企业付款到零钱(十分钟搞定),附完整DEMO下载

    最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信提现功能开发的流程, 主要就是按规则封装好请求参数调用微信接口,涉及一些签名校验: A.接口流程 获取用户OPENI ...

  5. java 分组报表_【Java】分组报表怎么做,积木报表十分钟搞定!

    首页 专栏 java 文章详情 0 分组报表怎么做,积木报表十分钟搞定! scott发布于 今天 12:24 报表需求 某大型超市需要做一张年度区域销售统计报表 展示2019和2020年度各地区每月的 ...

  6. java零钱换整程序_JAVA微信企业付款到零钱(十分钟搞定),

    JAVA微信企业付款到零钱(十分钟搞定), 最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信企业付款到零钱的开发过程, 主要就是按规则封装好请求参数调用微信接口,涉 ...

  7. mfc远程连接mysql数据库连接_MFC连接mysql数据库(十分钟搞定)

    最近要做一个大作业,需要用到数据库,sql server装了两次都失败,遂弃暗投明,用mysql,虽然我从来没有接触过,数据库么,一通百通的,5分钟就熟悉了.问题的关键是要用MFC连接mysql数据库 ...

  8. 支付宝上线新功能:去这个国家入境十分钟搞定!

    11月15日,作为"新马泰"旅游胜地的泰国是出国旅游热度最高的几个国家之一.据统计,2018年中国游客赴泰旅游突破了1054万人,比2017年上升了7.4%.2018年赴泰旅游的中 ...

  9. poi实现excel上传下载 亲自实践 教你十分钟搞定

    今天要实现一个上传excel的功能,之前写过很多次,但是都没有详细整理过,今天整理下,方便以后直接拿来拷贝 首先从前台来看,看了很多案例,基本两种方法:一种是form表单提交,一种是异步ajax方式. ...

最新文章

  1. python3-Python3 zip() 函数
  2. 原生js监听input值发生变化
  3. 10 Redis 主从复制
  4. 关于MGS4和XSI
  5. Spring Cloud Feign - 内部实现细节
  6. SAP Fiori Launchpad里加载abap.js的具体代码位置
  7. 躺平也要看,2022年计算机相关考试汇总
  8. 【英语学习】【WOTD】asperity 释义/词源/示例
  9. Qt程序启动画面QSplashScreen
  10. 命令行或终端ImportError:No module named(pycharm运行没问题)
  11. sql server 2008语言基础: 连接查询习题
  12. Spring的事务传播机制详解
  13. Word导出pdf时Origin图片出现重影(重叠)
  14. ReactNative实现仿微信或者通讯录快速索引功能
  15. arduino(14):使用ESP8266加蜂鸣器,自己动手做歌曲,使用python 程序,做简单的五线谱转换。直接把音节和节拍转换,然后转换成数据,用蜂鸣器播放歌曲《下山》。。
  16. 微信小程序自定义组件/插件等解析
  17. BOM 和 DOM 的区别是什么?
  18. vscode使用ssh连接远程Ubuntu服务器(记录)
  19. Kubernetes:dashboard 搭建(k8s -web端管理)
  20. C语言函数递归调用实验报告,C语言函数的递归和调用实例分析

热门文章

  1. echo添加换行 linux_在 Linux 上创建文件的 10 个方法
  2. Linux学习之Ubuntu安装Java
  3. layui 传递前端请求_Layui数据表格 前后端json数据接收的方法
  4. Java笔记-获取当前时间及对当前时间进行加减及时间对比
  5. Qt5\MinGw编译器快速解决-QMYSQL driver not loaded问题
  6. Qt文档阅读笔记-关于Q_DECLARE_METATYPE原理以及使用
  7. Linux学习笔记-Makefile的基本使用
  8. 二叉排序树的删除操作
  9. arraylist怎么在mysql中排序_对ArrayList中对象元素进行排序
  10. java中图的封装,模拟java 中地图的功能封装一个有序的地图