V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
anai1943
V2EX  ›  服务器

大量图片存储方案选择

  •  
  •   anai1943 · 2016-06-15 12:52:28 +08:00 · 8249 次点击
    这是一个创建于 2876 天前的主题,其中的信息可能已经有所发展或是发生改变。
    项目现在的架构是 LNMP ,主要的功能是用户上传大图( 5-30M )到服务器,服务器端再将大图切成几百个小图。前端访问后再加载小图。
    没有使用 CDN 和 OSS 的经验,只了解类似同行业的公司都用的七牛的图片存储,前几天由于项目里面的某个作品微信转发很多,访问量比较大(当天 10W PV ),造成服务器带宽出现瓶颈,现在临时使用了阿里云的 cdn 加速静态图片,由于前期规划的时候没有考虑用独立的存储来处理图片,现在想把图片这块分离出来。

    目前有 3 个瓶颈:
    1 、 CPU :大图切成小图的时候, CPU 的使用率很高,如果同时超过 20 个用户在切图, CPU 基本跑到 80%了, CPU 目前是阿里云的 8 核心的,内存是 16G ,内存够用。按照我们目前的用户量,同时在线切图的用户不会超过 20 个。
    2 、存储:由于用户可以无限制上传大图,图片存储在单机上也是问题,目前是一块 1T 的普通硬盘
    3 、带宽:目前是固定带宽 10M ,流量正常的情况下足够,如果出现作品被用户发到微信朋友圈出现大量转发,高并发的情况下带宽就不行了。

    解决方案:
    1 、使用七牛的图片存储,用七牛唯一存在的麻烦的地方是图片的同步,用户上传的图片可能会出现修改和删除,需要即时同步到七牛,不知道会不会出现同步比较慢的情况还有一些其他未知的问题。

    2 、使用阿里的 OSS+CDN ,由于服务器现在也是阿里的产品,图片同步可以通过内网,速度应该会好些吧。但是看到一些资料上说阿里的费用相对七牛会贵很多,没有对比过,不清楚差距有多大。

    这两个方案哪个合理,还有什么更好的方案么?谢谢!
    18 条回复    2016-06-17 03:55:09 +08:00
    akinoniku
        1
    akinoniku  
       2016-06-15 13:05:55 +08:00   ❤️ 1
    如果你要用 CDN 的话,切过的图已经是不一样的图,所以要有另外的 key / 文件名,这样才能「同步」,也就是说图本身应该是 immutable 的。

    如果只是切图,可以用又拍或者七牛的 url 接口,这样就不需要重新生成 /上传图片了,节省空间
    anai1943
        2
    anai1943  
    OP
       2016-06-15 13:09:08 +08:00
    @akinoniku 切图需要用服务器本机的程序来实现,不是类似 url 带参数的那种。你用过阿里的 OSS+CND 么,成本高么? ths
    akinoniku
        3
    akinoniku  
       2016-06-15 13:12:42 +08:00
    @anai1943 没用过阿里的。。
    akinoniku
        4
    akinoniku  
       2016-06-15 13:14:10 +08:00
    如果你的图切了之后 url 不一样,直接用七牛的镜像站功能就好
    anai1943
        5
    anai1943  
    OP
       2016-06-15 13:22:01 +08:00
    @akinoniku 切图以后 url 是不一样的,相当于一张大图按照算法切成几百张小图。
    七牛的镜像站功能是不是类似阿里云的静态 cdn ,现在临时用的阿里静态文件 cdn 是这样的:图片文件不需要另外上传到别的地方,只需要解析一个二级域名到阿里给你分配的一个 cdn 域名上,用户访问图片时,阿里自己会把图片拉到他们的 cdn 服务器上。
    七牛的是这样么?
    anai1943
        6
    anai1943  
    OP
       2016-06-15 13:26:56 +08:00
    @akinoniku 明白了 http://blog.wpjam.com/m/qiniu-image-storage/。和阿里的 cdn 一个原理。感谢。还想把图片也另存一份,如果用七牛的,需要把图片通过接口上传到七牛服务器上吧。怕大量图片同时上传速度会不理想
    akinoniku
        7
    akinoniku  
       2016-06-15 13:27:10 +08:00
    @anai1943 是这样的
    gamexg
        8
    gamexg  
       2016-06-15 13:33:58 +08:00 via Android
    同步都是问题,修改后七牛不会更新的,除非手动触发更新,手动也很慢。
    所以更新的话自己换一个新的 URL 最方便,注意 url?时间戳无效,需要新的 key 才行。
    anai1943
        9
    anai1943  
    OP
       2016-06-15 13:59:13 +08:00
    @gamexg 嗯 现在程序这边对于图片数据发生修改的情况下都是采取重新命名的,除了 css 里面的图片。如果服务器上的原图被程序删除了,能同步删除七牛服务器上的图片么,还是说没有必要去删除。
    gamexg
        10
    gamexg  
       2016-06-15 14:01:48 +08:00
    @anai1943 需要自己手动删除七牛的图片。 七牛就是 kv 储存 ,不删会继续扣空间费用。
    kslr
        11
    kslr  
       2016-06-15 15:40:53 +08:00
    七牛成本比阿里云价格低,体验也好。
    文件的增删改查需要处理,但是可以使用被动缓存,就是七牛接管图片,新的图片自动去源站请求,这样本站也保留了一份图片,整体结构也不用变化,还是本地来处理。

    如果你不打算用七牛自带的裁图,试试优化本地的,性能应没这么差的。
    abcbit
        12
    abcbit  
       2016-06-15 15:46:39 +08:00
    自己租個百兆的獨服,也才幾百塊,這種高計算高帶寬的用途明明是獨服的優點啊
    anai1943
        13
    anai1943  
    OP
       2016-06-15 16:51:02 +08:00
    @abcbit 独立服务器没这么便宜吧。。
    anai1943
        14
    anai1943  
    OP
       2016-06-15 16:52:51 +08:00
    @kslr 你说的被动缓存,就是用七牛的镜像存储功能吧。
    strwei
        15
    strwei  
       2016-06-15 19:30:08 +08:00
    可以试试 ucloud 对象存储,每月 20g 免费流量,有北京,广东,香港,美国四个节点可选,速度也很快
    ebony0319
        16
    ebony0319  
       2016-06-15 19:46:39 +08:00 via Android
    abcbit
        17
    abcbit  
       2016-06-15 21:05:44 +08:00
    @abcbit 百兆單線就是這個價啊,現在單線帶寬本身就很便宜啊。大帶寬還去用雲,真是錢多的沒地方花
    Windows11
        18
    Windows11  
       2016-06-17 03:55:09 +08:00
    又拍云
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2566 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:23 · PVG 20:23 · LAX 05:23 · JFK 08:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.