V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kenneth
V2EX  ›  程序员

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

  •  
  •   kenneth · 2013-07-11 14:57:53 +08:00 · 4365 次点击
    这是一个创建于 3955 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1.文件系统选择应该如何考虑
    2.单台最大可以容量最大可以多少
    3.如何尽可能节约成本,但是又可以存的多

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

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

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

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


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

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

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

    我们公司要不是自己已经花蛮多成本建设了一套类似的,估计也会用又拍云
    pubby
        11
    pubby  
       2013-07-11 17:00:56 +08:00   ❤️ 2
    手头有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
        12
    alcoholwang  
       2013-07-11 17:06:11 +08:00
    没自己看到楼主的最后一句话。。。。不过不从技术成本、硬件成本、网络成本(CDN)上来讲,综合比较下来还是又拍
    mudone
        13
    mudone  
       2013-07-11 17:18:56 +08:00
    说说我自己的解决方案吧:
    我自己的需求是存了1kw+的图片,空间占用2T+。

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

    这个方法的成本:一个月40美金左右。
    stranbird
        14
    stranbird  
       2013-07-11 19:59:25 +08:00
    请问一下gridfs大概是一个什么水平,用来做这种分布式系统的话。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3014 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 15:13 · PVG 23:13 · LAX 08:13 · JFK 11:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.