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

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

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

    如题,最近在考虑 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 了
    前提是有个熟悉各方面的人
    TXYBDY
        17
    TXYBDY  
       2022-10-18 14:20:07 +08:00
    @frostfall 需要解决方案?还是思路?
    frostfall
        18
    frostfall  
    OP
       2022-10-18 14:27:58 +08:00
    @eason1874 #14 对,是的,也是听说阿里后来改自研了,不清楚其他厂商是怎么做的
    TXYBDY
        19
    TXYBDY  
       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   ·   实用小工具   ·   1130 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:37 · PVG 02:37 · LAX 10:37 · JFK 13:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.