设为首页 收藏本站
查看: 1358|回复: 0

[经验分享] 十分钟搞定你自己的多图片/文件服务器

[复制链接]

尚未签到

发表于 2017-12-29 11:34:10 | 显示全部楼层 |阅读模式
  本文版权归博客园和作者吴双本人共同所有,转载和爬虫必须在显要位置注明原文地址,www.cnblogs.com/tdws
写在前面  图片/文件服务器,顾名思义就是存文件呗,有的人用阿里云的现有服务,有的把文件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站点下新建虚拟目录,注意物理路径指向的是网络共享文件夹的网络路径
DSC0000.png DSC0001.png

  4.在Webconfig下  <system.web>增加 <identity impersonate="true" userName="ben" password="yourpwd" /> ,IIS对该虚拟目录设置身份验证为 应用程序池标识。 DSC0002.png
  5.使用Server.MapPath可以获取FileServer2的网络路径,并使用你的读写文件方式对目录中的文件进行读写。
  6.写入文件建议使用Async的方式,异步IO会在你将IO请求包发给网络驱动或者磁盘驱动后,返回去处理其他事情,在将来的某个时刻,文件写入成功,状态机恢复你的上下文并以同步的方式继续向下执行,能大大提高你Web服务器的吞吐能力。
写在最后的重点  如果还有模糊的地方,看这里就全明白啦
DSC0003.png

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-429300-1-1.html 上篇帖子: 在Windows服务器上启用TLS 1.2及TLS 1.2基本原理 下篇帖子: Visual Studio 2017 RC的坑
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表