当前位置: 首页 > 架构相关 > 文件分布式存储思想

文件分布式存储思想

  • 分类:架构相关
  • 本文标签: 分布式
  • 发布时间:2015-10-19 17:23:58
  • 作者:Ferman
  • 查看数: 332


          网站在设计之初就要考虑到将来可能出现的大数据大访问量的问题,这就涉及到数据库优化,缓存结构设置,队列,文件存储等等一系列问题,这篇文章主要是讲文件存储,具体就是文件分布式存储的思想。在这里只是给出一种分布式存储的思路,你能实现的方法有n多种。

          试想你的网站是一个图片分享性质的站点,而且用户也不少,假如你的图片与程序都在同一台服务器上,那么服务器的压力可想而知。但是如果你将图片分到n多的服务器上,以不同的域名指向这些服务器。这样用户访问页面时你程序所在的服务器就会得到释放。


          在这里我给出一个简单的实现方法,也是我博客现在所使用的方法(当然现在我只有一台服务器,但是我图片可以随时迁移到别的服务器)比如你上传的每一张图片都是md5过的,你可以以图片名的最后一位作为第一级目录,这样第一级目录就会有16个,从0到f。你可以将这16级目录想象成服务器,也就是说你可以将图片随机的放到16台服务器上。第二级目录用年月日例如:20151019,第三级目录用日,第四级目录用am/pm,根据图片的上传数量,你甚至可以分到时、分,你的图片最终存储地址可能像是这样:

/8/201510/16/pm/8234c62bb08b612b026ef4676c2ce421.png

这样做还有一个好处就是你备份的时候只需要根据时间来备份,比如每小时备份一次,将上一小时上传的图片备份的其他服务器。


          我自己博客所在的服务器用了这中方法,比如,我博文针对MySQL/MariaDB锁机制总结的一些知识点中的一张图片的地址:

http://img.zhbor.com/blog_cui/8/201510/16/pm/8234c62bb08b612b026ef4676c2ce421.png

图片所用域名也是与我博客站域名zhbor.com分开的,如果数据量大,我甚至可以根据1-f分成16台服务器,16个不同的域名,这就是用到了一种简单的分布式的思想。注意,这只是在用思想,在博客中我这样做然而并没有什么卵用。因为这些图片还是跟我的程序,跟我的数据在一台服务器上,这样做非但没有减轻服务器的压力,反而客户端dns压力会增大。但是我如果有多台服务器,那利就会大大大大于弊了。

          当然,如果用更专业的文件分布式存储更好,我之后有时间会介绍一下自己在多台服务器上搭建和使用FastDFS的一些经验。


还有一点忘记说,为了减轻服务器以及带宽压力,要对图片的大小进行压缩,用多大就取多大,比如,这两张图片区别,一个是列表页中一个是文章详情页中,其中,小图片开始是不存在于服务器的,当请求不存在的小图片地址的时候服务器检测到404触发裁剪脚本,然后用ImageMagick  进行裁剪,并返回所需图片:

http://img.zhbor.com/blog_cui/8/201510/16/pm/110x66_8234c62bb08b612b026ef4676c2ce421.png
http://img.zhbor.com/blog_cui/8/201510/16/pm/8234c62bb08b612b026ef4676c2ce421.png


转载时请以 超链接的形式 注明:转自Ferman

                  

About me