最近在调研开源的 HTTP 缓存方案, squid、varnish、问下各 CDN 厂商还有各大厂的同学你们都用的什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
frostfall
V2EX    程序员

最近在调研开源的 HTTP 缓存方案, squid、varnish、问下各 CDN 厂商还有各大厂的同学你们都用的什么?

  •  
  •   frostfall 2022-10-18 10:59:50 +08:00 2862 次点击
    这是一个创建于 1094 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,最近在考虑 http 的缓存方案,因为都是音视频之类的大文件,并不只是 js 、css 、图片,所以 Nginx 之类的就满足不了了。 看了下 squid 、varnish 这些,要么性能不够,要么功能不足。看来看去,ATS 好像更合适,但是稳定性堪忧,内存占用也非常高。

    所以想问下有没有各 CDN 的同学,或者各大厂的同学,你们用的是什么?都是自己搞了一套的吗?

    26 条回复    2022-10-18 15:18:25 +08:00
    iqoo
        1
    iqoo  
       2022-10-18 11:23:34 +08:00
    nginx 为什么满足不了?
    frostfall
        2
    frostfall  
    OP
       2022-10-18 11:29:31 +08:00
    @iqoo #1 nginx 的缓存逻辑非常简单,因为缓存的是视频等大文件,满足不了要求,可以看看知乎这个问题: https://www.zhihu.com/question/20143441
    helone
        3
    helone  
       2022-10-18 11:30:01 +08:00
    大部分都是 OpenResty 或 Nginx ,小部分自研,看他们技术分享博客就知道大概路线
    frostfall
        4
    frostfall  
    OP
       2022-10-18 11:33:49 +08:00
    @helone #3 一般都是用 openresty 或 Nginx 做 7 层入口,这我理解,但是用 openresty 作缓存,还是大文件的缓存,我也没碰到过,不太了解
    helone
        5
    helone  
       2022-10-18 11:46:21 +08:00
    @frostfall 文件倒是不大,都是 ts 切片之类的,大部分厂商都是直接给你直播或者点播的方案,然后他们来优化视频存储,你只管上传和配置,一般都会禁止你拿 cdn 去做视频下载之类的,要求你购买直播或者点播的套餐。。。
    xiaoz
        6
    xiaoz  
       2022-10-18 11:47:14 +08:00
    @frostfall 大文件 nginx 为啥满足不了需求呢?
    1. Nginx 支持 Range 范围请求,客户端请求适配大文件的时候一般都是 Range 请求的
    2. Nginx 回源的时候也可以设置 Range 分片保存的
    ggvm
        7
    ggvm  
       2022-10-18 11:52:39 +08:00
    nginx 肯定可以满足技术要求,但可能满足不了管理的需求。

    视频文件一般都是通过切片的方法处理成一堆小的文件,放 nginx 缓存也没有大文件的问题。
    isno
        8
    isno  
       2022-10-18 11:56:31 +08:00
    流媒体 HTTP 缓存,第一次听说,这穿透率能应用么? 我们这视频类的一般缓存 m3u8 文件,ts 走 CDN 下载。

    CDN 主要是连接优化技术:QUIC 、BBR 等
    PMR
        9
    PMR  
       2022-10-18 11:57:21 +08:00 via Android   1
    ?
    nginx “又”不行了?

    nginx 在 linux 上性能还是处于上游的

    Cloudflare 曾经也是用 nginx lua 做支撑 后面用 rust 重写新的 proxy
    0ZXYDDu796nVCFxq
        10
    0ZXYDDu796nVCFxq  
       2022-10-18 12:11:52 +08:00 via Android
    不说量级都是耍流氓

    量大一点,ATS 是最佳选择,但你得找个熟悉 ATS 并且能做二次开发的人
    frostfall
        11
    frostfall  
    OP
       2022-10-18 12:16:54 +08:00
    楼有些歪了,其实我们的场景,就是实现像 CDN 厂商一样的视频缓存方案。不是说把大文件扔给 CDN 就完了的。
    nginx 在 7 层网关的地位是有目共睹的,但对于单纯做大文件的缓存,还是太简单了。比如,SSD+HDD 实现冷热存储,多磁盘分片存储降低单硬盘压力等等,对于动辄需要几十个 TB 的缓存空间的情况,Nginx 还是太简单了。
    当然也不排除真的有用 nginx+lua 实现的方式,只是我没见过,也想了解下。比如我一直关注的某 CDN 厂商,一直在分享 openresty 的一些应用与实现,但是对于视频缓存这款却一直没讲过。
    MeteorCat
        12
    MeteorCat  
       2022-10-18 12:17:32 +08:00 via Android
    我也觉得,只要看是什么量级的,你是要做视频站点?
    frostfall
        13
    frostfall  
    OP
       2022-10-18 12:18:49 +08:00
    @MeteorCat 不是视频站点
    eason1874
        14
    eason1874  
       2022-10-18 12:20:50 +08:00
    前端大多用 Nginx ,缓存没有用 Nginx 的,据我所知用最多是 ATS ,阿里云前几年也用这个,后来好像改自研了
    liuxu
        15
    liuxu  
       2022-10-18 12:23:49 +08:00
    考虑到楼主的需求和未来的职业生涯,建议 rust/axum 手写,把时间花在解决问题上,而不是找方案上
    0ZXYDDu796nVCFxq
        16
    0ZXYDDu796nVCFxq  
       2022-10-18 13:49:52 +08:00 via Android
    ng+ats ,你要是需求明确没啥特殊需求,数据面一周都能出 demo 了
    前提是有个熟悉各方面的人
    vW1k6gKHu0543k0h
        17
    vW1k6gKHu0543k0h  
       2022-10-18 14:20:07 +08:00
    @frostfall 需要解决方案?还是思路?
    frostfall
        18
    frostfall  
    OP
       2022-10-18 14:27:58 +08:00
    @eason1874 #14 对,是的,也是听说阿里后来改自研了,不清楚其他厂商是怎么做的
    vW1k6gKHu0543k0h
        19
    vW1k6gKHu0543k0h  
       2022-10-18 14:38:38 +08:00
    @frostfall 这种信息一般人不知道的,只要问云厂家的架构师,还要找 cdn 的架构师,可以帮你问问 v:aDE4MTU2NTQ1Nzky
    frostfall
        20
    frostfall  
    OP
       2022-10-18 14:38:40 +08:00
    目前来看,原生 ATS 也不完美,使用了一段时间,发现了几个问题,有大有小:
    1. 编译问题,上个版本编译通过,下个小版本编译就过不去了。
    2. 启动问题,有时即便编译通过,也启动不了,配置文件没问题,运行配置文件检测却报错。
    3. 内存占用问题,默认开启 RamCache ,占用相当一部分内存(因为在内存里,性能当然没的说)。可即便不开 RamCache ,ATS 默认存储索引也放内存里,且不可更改,这就导致内存非常大,测试的机器硬盘用了三分之一,内存已经被吃满了。
    4. 不支持 SSD+HDD 冷热缓存,原本 6.0 版本以前还临时支持 SSD 做中间缓存,6.0 开始就没有了,并且也没有替代方案。

    所以就想问问看,这些厂商,你们是魔改的 ATS ,还是另起炉灶该了一套?魔改 ATS 方案可行吗,有没有什么坑?
    frostfall
        21
    frostfall  
    OP
       2022-10-18 14:39:48 +08:00
    @TXYBDY #17 就是想了解下,刚在 20 楼说了一下
    frostfall
        22
    frostfall  
    OP
       2022-10-18 14:42:08 +08:00
    @TXYBDY #19 已加好友
    ccsexyz
        23
    ccsexyz  
       2022-10-18 14:46:10 +08:00
    基本上都是自研 or ATS
    hankai17
        24
    hankai17  
       2022-10-18 14:52:22 +08:00
    @frostfall
    1. 编译看版本 我记得 7.x 以后需要高版本 g++
    2. 版本升降级 确实会有配置不兼容问题 不至于起不来
    3. 我记得总索引大小 可以根据 min_obj 配置 根据你们的业务配一个恰当的值 内存占用大可以用 jemalloc(我没用过)代替其内存池
    4. 可以根据 host 划分磁盘?
    frostfall
        25
    frostfall  
    OP
       2022-10-18 15:02:17 +08:00
    @hankai17 #24 看样子是行家
    1. 编译这块整体没问题,就是有些小毛病导致编译不通过
    2. 目前最新的是 9.1.3 ,编译后引入 lua.so 就报错,而同样的配置文件,官方分发包配置检测失败但是能起来。这问题也不算大
    3. 这块就不太了解了
    4. 划分磁盘到可以,官方就支持。但是,SSD+HDD ,热缓存什么时候进 SSD ,冷缓存什么时候回 HDD ,怎么组合用?这块整体的逻辑 ATS 没有,要是改动的话,感觉 ATS 的整个缓存逻辑都要大动
    yuzo555
        26
    yuzo555  
       2022-10-18 15:18:25 +08:00
    视频处理成 HLS 或者分段缓存的 Dash 不就没有大文件了?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5197 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 09:14 PVG 17:14 LAX 02:14 JFK 05:14
    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