如何设计一台能存海量图片的服务器?

2013-07-11 14:57:53 +08:00
 kenneth
1.文件系统选择应该如何考虑
2.单台最大可以容量最大可以多少
3.如何尽可能节约成本,但是又可以存的多

不说S3和又拍云,自己建一个能否更低的成本。
4539 次点击
所在节点    程序员
14 条回复
wenbinwu
2013-07-11 15:00:37 +08:00
关注一下,高人请作答
maoyipeng
2013-07-11 15:05:09 +08:00
你是只要存,不要传输么
SharkIng
2013-07-11 15:06:21 +08:00
这个好像和我们现在学的差不多,大致原理还是云技术,用的是Hadoop分布是文件系统

主要就是把文件分别存储在不同的机台服务器中(云)以保证可靠性和容量的扩容之类的

没有讲到关于成本,但是这种情况其实成本并不低,相当于自己搭建云了。

总的来说S3和又拍应该是节约成本的最好选择
zhttty
2013-07-11 15:25:25 +08:00
1、分区类型文件系统使用LVM组成raid1;
2、单台最大可以达到操作系统极限;
3、机械硬盘,组阵列,md5排重,限定上传尺寸;
halfbloodrock
2013-07-11 15:37:09 +08:00
重点落在了一台。。。


如果对读实时性要求不高,强烈推荐 FreeBSD + ZFS !
抛弃RAID卡,不过内存要大些。
kenneth
2013-07-11 16:01:02 +08:00
@halfbloodrock 一台是因为没钱,有钱可以用豆瓣Beansdb搞一个集群。考虑过淘宝的TFS,Mogilefs。
但是还是觉得HDFS存的最多,单机可以12块硬盘一组好像。但是具体不知道如何搞。
halfbloodrock
2013-07-11 16:11:00 +08:00
@kenneth 单机情况下,在我看来没有任何文件系统能超越ZFS,使用简单,几行命令就搞定,而且你能接多少块盘,就能用多少。

如果考虑以后扩容到分布式,考虑方式就完全不一样了。
c0878
2013-07-11 16:26:27 +08:00
单机的可用性无论怎么提高都不如双机或者多机分布式的 而且多硬盘对机箱电源的要求就更高了 超过一定数量的话成本还不如搞两台
存储建议分层 内存+SSD+Raid1或者Raid5 根据热度来存放
thinkxen
2013-07-11 16:28:29 +08:00
zfs不错的,或者买一台共享存储设备?
alcoholwang
2013-07-11 16:55:00 +08:00
海量看你到底有多海量了,以及未来的预期,方案有所不同。

不过建议可以用第三方服务,又拍云存储,https://www.upyun.com/

我们公司要不是自己已经花蛮多成本建设了一套类似的,估计也会用又拍云
pubby
2013-07-11 17:00:56 +08:00
手头有2台图片存储,海量说不上,也就200w张左右
freebsd8.x+zfs ( 3块SATA硬盘做 raidz,1块SAS盘做系统和缓存)
08年的时候搭建的,当时还是freebsd7.x 硬盘是500G的,所以可用的存储容量是1T(1U机器最多4硬盘)
后来容量不够了,又加了1台类似配置的。

说一些使用感受:
1. 要跑zfs必须要64位系统配大内存。
2. 前端加上squid缓存,减少热图访问给zfs带来压力。(squid是在单独的SAS盘上做的)
3. 用C+ImageMagick写了一个动态生成任意尺寸缩略图的网关(fastcgi挂到nginx上,同样用squid做了缓存)

注意事项:
1. zfs下单目录不要放太多图片文件,影响性能
2. 做好硬盘smart监控,发现异常及时更换硬盘。我们这2台都发生过硬盘挂掉的情况。
alcoholwang
2013-07-11 17:06:11 +08:00
没自己看到楼主的最后一句话。。。。不过不从技术成本、硬件成本、网络成本(CDN)上来讲,综合比较下来还是又拍
mudone
2013-07-11 17:18:56 +08:00
说说我自己的解决方案吧:
我自己的需求是存了1kw+的图片,空间占用2T+。

第一版本直接hash目录,分目录存放,创建了5级目录,这种方式就是备份非常麻烦,其他还好,访问直接用nginx rewrite到物理文件;
第二版,图片存储用的是SQLite,一个SQLite库存1W张图片,程序读出来之后存为一个缓存文件,然后nginx rewrite到这个缓存文件。

这个方法的成本:一个月40美金左右。
stranbird
2013-07-11 19:59:25 +08:00
请问一下gridfs大概是一个什么水平,用来做这种分布式系统的话。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/75455

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX