我是认真的,请不要使用七牛 对象存储,特别是基于 HTTP 的“免费服务” - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Recommended Services
Amazon Web Services
LeanCloud
New Relic
ClearDB
imdjh
V2EX    云计算

我是认真的,请不要使用七牛 对象存储,特别是基于 HTTP 的“免费服务”

  •  
  •   imdjh 2017-11-08 21:03:24 +08:00 17603 次点击
    这是一个创建于 2904 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近捣鼓了一个小脚本,把国外 feed 拉到七牛 对象存储,国内客户端拉起来更快嘛。因为“对开发者”免费,做做实验挺不错的。我也算七牛老用户了,刚开 https 那会儿就申请了,记得当时还要充钱才能申请的。闲话就说这么多。


    可是在使用中遇到这些问题,请诸位留意这些坑(如果你看完觉得这都是小意思,还要继续用的话):
    0. HTTPS 流量均收费(只是提一下)
    1. 对于绑定过 HTTPS 的 bucket。请求 HTTPS 得到的 max-age 和设置页面是一致的。而 HTTP 链接则是 max-age 时长一周(不会被改动)。
    2. 上一点提到了,如果你用 HTTP 请求,那么你的文件(我的情况是 xml ),会被地域节点缓存一周。而且你请求 HTTP 返回的是 200,不是 304 http not-modified。对于 HTTP 请求,我试过联通宽带、电信手机、移动手机、甚至挂**国内代理** 和国外 vps 都能得到新旧不同的版本。
    3. 删除一个文件后。过 30 分钟,照旧能访问,无论 HTTP 或是 HTTPS。

    对于第 2 和第 3 点,我想请诸位玩一个游戏。访问同一资源的 HTTP 和 HTTPS 链接,回复下你得到的 xml 内容和所在地里位置。
    如果包含‘ 5 楼‘,那么就是昨天的热榜内容。如果有’鹦鹉‘那么就是今天的。当然啦,还可能被删除了,op 于 8:22 操作的删除。
    HTTP==》 http://7xo6xf.com1.z0.glb.clouddn.com/v2ex-hot-topic.xml
    HTTPS==》 https://dn-imdjh.qbox.me/v2ex-hot-topic.xml
    第 1 条附言    2017-11-09 08:48:15 +08:00

    感谢各位的回复,现附上事件更新。

    由于七牛给出的外链接“无法删除”,重新创建了一个bucket,改掉代码中所有涉及bucket字段。

    先说结果吧,外链内容依旧不更新。

    为了防止出现“用人脑无法理解”的回帖,这里附上步骤截图,所有截图均已上传wayback machine.

    0.创建bucket,华东地区。

    bucket showbox

    1. 主机,使用官方工具qshell最新发布。根据官方文档(github)强制指定上传主机为回源为 HTTP协议的华东源站 非“加速”站点。执行命令

    2. 立即查看本地和外链SHA1哈希值。

    3. 等待超过max-age的时间后,重新查看外链SHA1哈希值。

    vps showbox

    华东地区客户端视角,执行如下验证

    1. 立即查看外链SHA1哈希值。

    2. 等待超过max-age的时间后,重新查看外链SHA1哈希值。

    local showbox

    现初步结论,max-age和外链内容是否更新 无关

    初步假设,七牛对象存储提供的外链不调用 刷新cdn缓存API 就不更新 内容。


    PS,诸位看清楚了,至始至终我针对的都是 对象存储的外链内容

    提供的外链和上传的内容不一致,难道应该强行甩锅给 cdn 概念?哦,那为什么之前用 https就是没问题的 呢?(这个新开的bucket没有申请https协议的CDN服务)

    第 2 条附言    2017-11-09 22:34:36 +08:00

    感谢各位的友善回帖,作为时隔原帖24小时后的第二篇附言。这里我本人先给七牛道歉。你们的存储做的很好,这不假,可就是用户找不到对象。所以这“对象存储”产品就是个玩笑

    本次遇到的问题中,使用的都是官方发布最新工具,如图为证:

    tool SHA1 hash

    官方文档对于缓存更新只字未提,archive.is网页存档为证:

    https://developer.qiniu.com/kodo/api/1312/upload

    https://github.com/qiniu/qshell/blob/master/docs/fput.md

    作为开发者群体中的一员,我可能是被提供更抽象的CDN机制“惯坏了”,可不能否认的是所谓“门槛”说难听点就是一个深坑,官方还以为用户能知道文档只字未提(第二遍强调)。

    我觉得再怎么解释这都是不该出现的结果。请扪心自问下,用户上传数据要干什么?难倒是给你们源站磁盘添光增彩?(对此的验证请参见附言第一篇)

    退一步说,撇开别的不谈。为什么同样是对象存储服务,HTTPS协议的外链被主动更新了,HTTP的没有更新?

    最后说下解决方案吧,感谢L11层@提供的链接,调用七牛的CDN刷新API,官方文档见此。实际项目中可以参考这个小脚本qiniu_renew_helper.sh


    FYI:

    1. 原帖中的HTTP内容经过24H仍然没有被主动发现删除。本人没有对此执行API缓存刷新,也不想这么做。目的有二:窥探一个过期URL到底多久能被主动发现,提醒读者在删除七牛“对象存储”后一定要调用CDN刷新API

    2. 是在捣鼓这个项目V2EX 最热主题 RSS 源 - 非官方 /t/404766时发现的,有兴趣的可以点击看详情。

    3. 七牛的CDN刷新API 并没有你想象中那么可靠。写了这篇帖子引来不少人骂我,痛定思痛,某些事还得靠事实说话。

    写了个小脚本循环拉取CDN内容和本地进行对比。临时执行作为抽查提供的CDN缓存健康状态,源码见qiniu_validator.sh,演示外链如下:

    asciicast

    以上

    Thu Nov 9 22:33:08 CST 2017

    第 3 条附言    2017-11-12 23:56:04 +08:00

    承蒙各位厚爱,这里是附言3,也是v2ex允许的最后一条附言。HTTP的内容依旧存在,距删除当日已经过去4天,已经试过使用缓存刷新API能够实现删除文件。

    相信诸位或多或少看过了附言2中的演示视频。因为在无意中看CDN日志发现在视频演示中出现过,但从没贴过文字链接的私人用feed地址被广为盗用,占总CDN日流量的 94%

    wth with v2ex people

    人群分布:

    wth with these place

    请求UA:

    wth with ua

    po的荷包不足以支持诸位爬虫大佬爬私人资源,故删除泄露的私人feed资源,用OPML形式公开泄露订阅源的新地址,文件opml.xml

    以上,

    Sun Nov 12 23:54:10 CST 2017

    46 条回复    2017-11-15 13:58:52 +08:00
    GG668v26Fd55CP5W
        1
    GG668v26Fd55CP5W  
       2017-11-08 21:33:33 +08:00 via iPhone
    删除要手动刷新 url 吧?
    Chalice
        2
    Chalice  
       2017-11-08 21:37:04 +08:00
    {"error":"Document not found"}
    gy6221
        3
    gy6221  
       2017-11-08 21:38:47 +08:00   1
    妖都
    http5 楼,https document not found
    allenhu
        4
    allenhu  
       2017-11-08 21:40:22 +08:00 via Android   3
    你没用过 cdn 吧
    imdjh
        5
    imdjh  
    OP
       2017-11-08 21:42:35 +08:00
    忘记了最终要的一点,自己补充下(刚才气疯了,下楼跑了几圈):
    4. /!\HTTP 协议下的回源策略有严重问题 /!\

    展开说下,
    首先是前提:相信各位都知道”回源“是涉及 cdn 的术语,可是我标题写的是”对象存储“。没错,七牛自带 cdn,无论你用不用”融合 cdn “(其实就是 https 协议的 cdn )主机位于国外,工具是官方的 qshell 最新发布版。用的是 qshell fput,看过文档就是道,fput 是需要一个本地文件作为参数的。


    再是我遇到的问题: 本地文件被更新过了,qshell 返回正常退出(我手工运行过,过程 success )。但是 HTTP 协议下的文件没有被更新。这里你可以说是 op 中提到的第一点 max-age 的问题,本地节点已经缓存了。好吧,强制你用 https 咯?

    FYI:
    如果想说”回源更新需要时间的呀”,这里明确告诉你,我等了 24h,脚本每小时运行一次,也就是 24 次的更新 24H 的时长,可是依旧是 24H 前的版本。
    imdjh
        6
    imdjh  
    OP
       2017-11-08 21:43:12 +08:00
    @allenhu 见 L5,忘记了说一点。
    imdjh
        7
    imdjh  
    OP
       2017-11-08 21:44:16 +08:00
    @falcon05 这是七牛比较好的一个方面,和 dropbox 一样的,美丽的 url。
    imdjh
        8
    imdjh  
    OP
       2017-11-08 21:46:44 +08:00
    @gy6221
    @Chalice
    感谢回复,请问 HTTP 和 HTTPS 均是无法访问吗?
    我这边 HTTP 和 HTTPS 均能访问。

    FYI:
    我这边的测试工具一直都是curl
    imdjh
        9
    imdjh  
    OP
       2017-11-08 21:49:08 +08:00
    @allenhu 如果你觉得回源更新可以长达 25+次,还毫无反应,那我无话可说。

    对了,我的设备都比较蠢,没法用常用的 http://example.com/xxxx.js?random-hash
    难道这些设备就应该被排除在 cdn 使用范围外么?
    imdjh
        10
    imdjh  
    OP
       2017-11-08 21:51:53 +08:00
    @gy6221 对了,忘记说。
    恭喜,这个 feed 被成功缓存 1 周~
    记录下时间戳吧:Wed Nov 8 21:51:43 CST 2017
    quericy
        11
    quericy  
       2017-11-08 22:50:08 +08:00
    记得七牛的回源是遵循客户端请求协议的回源,http 访问会是 http 的回源,https 访问会是 https 的回源

    不过七牛的回源确实有时候在一些节点上很迷,主动刷新的 url 拉取还会有问题
    MinonHeart
        12
    MinonHeart  
       2017-11-08 23:19:11 +08:00
    我七牛账户的余额就是不给退,无奈()
    imdjh
        13
    imdjh  
    OP
       2017-11-08 23:19:55 +08:00
    @quericy
    感谢回复, **回源是遵循客户端请求协议的** 这个我原来不知道。客户端使用的是 qshell,刚才看了文档,说是自动选取的上传节点。估计是给传到国外源站咯。我再等 24H 看下指定了 HTTP 源站点时,是否有还会复现。

    之所以那么气氛,是因为出现了在 HTTP 协议下(免费流量):
    1. 联通宽带 - 老版本
    2. 电信手机 - 老版本
    3. 移动手机 - 新版本
    4. 江苏电信(网上被扫出来的代理) - 老版本
    5. 国外 - 老版本

    这不一致情况让人无比抓狂。
    imdjh
        14
    imdjh  
    OP
       2017-11-08 23:22:25 +08:00
    附上截图:
    https://web.archive.org/web/20171108151432/

    从国外主机访问 HTTPS,文件依旧存在。
    sexrobot
        15
    sexrobot  
       2017-11-08 23:28:1 +08:00
    自己不知道 CDN 的机制,还出来秀智商。
    imdjh
        16
    imdjh  
    OP
       2017-11-08 23:36:45 +08:00
    @sexrobot 呵呵
    imdjh
        17
    imdjh  
    OP
       2017-11-08 23:41:34 +08:00
    @sexrobot 事实都写进 wayback machine 了,还要舔?
    仅凭借文件删除 3 小时未更新这一点来说,这个“对象存储”呵呵,可以叫做小 wayback 了吧。

    不说别的,我现在的处境就是,改动所有涉及到 bucket 的代码。
    为什么?因为文件删除不了,我需要新创建一个 bucket,才能“改动”文件。
    jellybool
        18
    jellybool  
       2017-11-08 23:45:11 +08:00
    所有我半年前转 upyun 了
    liangchaoboy
        19
    liangchaoboy  
       2017-11-08 23:49:40 +08:00   1
    cdn 基于边缘节点缓存,设置 加速域名缓存规则(指边缘节点的缓存时间)短些或者
    更新文件后刷新 cdn 缓存,api 接口 : https://developer.qiniu.com/fusion/api/1229/cache-refresh
    rrfeng
        20
    rrfeng  
       2017-11-09 00:44:17 +08:00 via Android
    我竟然不知道说什么好。。。

    花这么长时间吐槽,都足够研究一下到底是为什么了。
    pynix
        21
    pynix  
       2017-11-09 00:46:57 +08:00
    就这智商,基本靠别对象。。。储存了。。。
    dangyuluo
        23
    dangyuluo  
       2017-11-09 05:33:28 +08:00 via iPhone
    你可以试试将删除这个时间手动通知一下更新 CDN 边缘节点?
    Trim21
        24
    Trim21  
       2017-11-09 06:17:08 +08:00 via iPad
    @imdjh 没能用人脑还原出这个标签原本的样子。。。你原来是想发啥?
    colordog
        25
    colordog  
       2017-11-09 07:05:47 +08:00 via iPhone
    我能说我注册了账户几年没用过,然后再登录提醒我欠费账户冻结,联系销售代表么,连登录进去看看的资格都不给我
    kimown
        26
    kimown  
       2017-11-09 07:22:06 +08:00 via Android
    从一开始接触到现在用,觉得七牛的 cdn 做的挺烂的,还有 js sdk 也烂,但不得不用,也许他们主要业务不是 cdn,不理解删除或者修改文件后,不主动清空缓存,需要在地址上附加 url 是什么脑回路
    renothing
        27
    renothing  
       2017-11-09 07:46:12 +08:00
    楼主可能对 cdn 有什么误会。
    大概说一下,CDN 有两类,一类是 push 方式主动更新节点的。一类是 pull 方式被动更新节点的。楼主说的情况大概是后一类。
    imnpc
        28
    imnpc  
       2017-11-09 08:20:44 +08:00
    配置个 https 需要 24 小时
    有商最慢不过几小时
    psirnull
        29
    psirnull  
       2017-11-09 08:30:37 +08:00 via iPhone
    被七扭坑过几千块, 之前注册后测试传了东西忘了删,过了一年提示欠费几千块,每个月还不停累加, 就起靠这样骗钱的。
    49gd
        30
    49gd  
       2017-11-09 08:32:22 +08:00
    @renothing 楼主的槽点可能是明明是对象存储 整的跟 cdn 一样
    imdjh
        31
    imdjh  
    OP
       2017-11-09 08:54:39 +08:00
    @renothing 感谢友善回复。可能七牛就是你说的第二类,需要手动调用刷新缓存 API 来更新。有时间我会更新下的。另外,已验证并非 11L@quericy 所说的按照上传站点的协议更新。

    很搞不懂 https 外链内容就是好的。可能官方做 https 的时候用心了吧 =]
    imdjh
        32
    imdjh  
    OP
       2017-11-09 08:56:22 +08:00
    @49gd Bingo,感谢友善回复。没错,我调用的一直是“网页控制台”给出的“外链”。
    OneNian
        33
    OneNian  
       2017-11-09 09:11:09 +08:00 via iPhone
    七牛不适合频繁更新
    我是这样觉得
    就算加了 url 后缀,文件仍然不能更新,而是又缓存了一个“新文件”,但是七牛 web 后台也只能看到那个没更新的文件。
    所以最好像 ghosts 那样,静态文件加个 ?xxxx
    OneNian
        34
    OneNian  
       2017-11-09 09:14:57 +08:00 via iPhone   1
    只能被动,去手动刷新,才能让所有节点都更新。
    不同节点可能会缓存到不同版本。
    zangbob
        35
    zangbob  
       2017-11-09 09:43:37 +08:00   1
    我就不明白你们,为了那一点儿免费用,天天跟七牛折腾,费不费劲呐。。

    又拍的价格也不贵,随便充点儿钱,再加个联盟,可劲儿用都够了。
    SourceMan
        36
    SourceMan  
       2017-11-09 09:45:11 +08:00
    我是认真的,按照你的描述,某里云一样是 laji
    zhchyu999
        37
    zhchyu999  
       2017-11-09 10:29:26 +08:00
    七牛提供免费服务,获得了一个仇人
    slgz
        38
    slgz  
       2017-11-09 13:56:34 +08:00
    的确,七牛是有这样一个问题, 比如同一个 bucket, 然后相同的文件名(路径也相同), 最后存的图片还是节点缓存的图片, 不是新的图片,
    imdjh
        39
    imdjh  
    OP
       2017-11-09 22:45:01 +08:00
    @slgz 请麻烦看下原帖附言 2,其实是七牛没告诉我们每次变动都要调用 CDN 刷新 API。可笑的是,HTTPS 就没这个问题。

    我自己测试成功了,希望你改了代码后也能顺利 =]

    FYI:
    官方文档链接==》 https://developer.qiniu.com/fusion/api/1229/cache-refresh
    imdjh
        40
    imdjh  
    OP
       2017-11-09 22:47:31 +08:00
    @liangchaoboy 非常感谢你提供的文档,问题完美解决。HTTP 内容在 2 分钟左右就被更新。

    监控节点在华东和美国。用的是单一 URL 作为参数的刷新。希望能给之后的用户一个参考。更多内容请见原帖附言 2
    imdjh
        41
    imdjh  
    OP
       2017-11-09 22:53:00 +08:00
    @SourceMan 哈哈,我的立场一直是七牛。就事论事,友商没用过不敢下结论。不能说是恨铁不成钢,像是被“儿子”给坑了的那种感觉吧。
    cjpjxjx
        42
    cjpjxjx  
       2017-11-10 11:44:53 +08:00 via iPad
    很早就发现了这个问题,WordPress 博客用了七牛加速之后,有时候在服务器上修改了一个 css 样式,保存之后,清除浏览器缓存,刷新页面,无效,登录七牛控制面板,刷新缓存,还是无效,直接删除七牛上的文件,依旧无效,访问文件外链,居然还能访问??一般遇到这情况,都是等个几十分钟到几个小时后才好
    bubue
        43
    bubue  
       2017-11-10 23:10:11 +08:00
    可以设置实时更新的呀,都不知道吗?- -
    imdjh
        44
    imdjh  
    OP
       2017-11-10 23:20:19 +08:00
    @bubue 你好,我使用了“七牛 实时更新”作为关键字搜索了谷歌和百度,前 5 条结果均没有相关回答。
    如果能配置的话,还请点明告知,谢谢。
    a32b88z
        45
    a32b88z  
       2017-11-12 21:18:30 +08:00
    借楼主的地盘吐槽一下新浪的 SCS.

    新浪 SCS 用了大半年,虽然感觉它就是基本上抄袭 amazon 的 s3,但总体感觉还行,反正算「能用」吧。

    但上周 1 突然发现不能访问,访问时报错「 ip 非法请求」,俺使用其 api 时是绑定了访问者的 ip 的。但用了好几个月,怎么突然出现这种错误呢?

    向新浪提交了工单,过了 2 个小时,有了第一次回复,新浪征求我的意见竟然是:您能取消 IP 限制吗?

    没想到竟然有这种回复。我马上答复「必须要限制 ip 访问」,因为我在 SCS 上都是存放的企业信息。如果云上的资源不能限制 IP, 谁还改用?

    然后,过了大概 1 小时,恢复正常访问。
    cgnbkm
        46
    cgnbkm  
       2017-11-15 13:58:52 +08:00
    最初把 css 放七牛也发现文件不刷新,就给文件加个版本号,h5 里面引用新文件即可。如果需要禁止访问删除的文件,只能刷新 cdn,一般情况下不用管的。
    就为这破事折腾这么久,真是闲得蛋疼.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1248 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 17:17 PVG 01:17 LAX 10:17 JFK 13:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86