如题,最近在考虑 http 的缓存方案,因为都是音视频之类的大文件,并不只是 js 、css 、图片,所以 Nginx 之类的就满足不了了。 看了下 squid 、varnish 这些,要么性能不够,要么功能不足。看来看去,ATS 好像更合适,但是稳定性堪忧,内存占用也非常高。
所以想问下有没有各 CDN 的同学,或者各大厂的同学,你们用的是什么?都是自己搞了一套的吗?
![]() | 1 iqoo 2022-10-18 11:23:34 +08:00 nginx 为什么满足不了? |
2 frostfall OP @iqoo #1 nginx 的缓存逻辑非常简单,因为缓存的是视频等大文件,满足不了要求,可以看看知乎这个问题: https://www.zhihu.com/question/20143441 |
![]() | 3 helone 2022-10-18 11:30:01 +08:00 大部分都是 OpenResty 或 Nginx ,小部分自研,看他们技术分享博客就知道大概路线 |
4 frostfall OP @helone #3 一般都是用 openresty 或 Nginx 做 7 层入口,这我理解,但是用 openresty 作缓存,还是大文件的缓存,我也没碰到过,不太了解 |
![]() | 5 helone 2022-10-18 11:46:21 +08:00 @frostfall 文件倒是不大,都是 ts 切片之类的,大部分厂商都是直接给你直播或者点播的方案,然后他们来优化视频存储,你只管上传和配置,一般都会禁止你拿 cdn 去做视频下载之类的,要求你购买直播或者点播的套餐。。。 |
![]() | 6 xiaoz 2022-10-18 11:47:14 +08:00 @frostfall 大文件 nginx 为啥满足不了需求呢? 1. Nginx 支持 Range 范围请求,客户端请求适配大文件的时候一般都是 Range 请求的 2. Nginx 回源的时候也可以设置 Range 分片保存的 |
7 ggvm 2022-10-18 11:52:39 +08:00 nginx 肯定可以满足技术要求,但可能满足不了管理的需求。 视频文件一般都是通过切片的方法处理成一堆小的文件,放 nginx 缓存也没有大文件的问题。 |
![]() | 8 isno 2022-10-18 11:56:31 +08:00 流媒体 HTTP 缓存,第一次听说,这穿透率能应用么? 我们这视频类的一般缓存 m3u8 文件,ts 走 CDN 下载。 CDN 主要是连接优化技术:QUIC 、BBR 等 |
9 PMR 2022-10-18 11:57:21 +08:00 via Android ![]() ? nginx “又”不行了? nginx 在 linux 上性能还是处于上游的 Cloudflare 曾经也是用 nginx lua 做支撑 后面用 rust 重写新的 proxy |
10 0ZXYDDu796nVCFxq 2022-10-18 12:11:52 +08:00 via Android 不说量级都是耍流氓 量大一点,ATS 是最佳选择,但你得找个熟悉 ATS 并且能做二次开发的人 |
11 frostfall OP 楼有些歪了,其实我们的场景,就是实现像 CDN 厂商一样的视频缓存方案。不是说把大文件扔给 CDN 就完了的。 nginx 在 7 层网关的地位是有目共睹的,但对于单纯做大文件的缓存,还是太简单了。比如,SSD+HDD 实现冷热存储,多磁盘分片存储降低单硬盘压力等等,对于动辄需要几十个 TB 的缓存空间的情况,Nginx 还是太简单了。 当然也不排除真的有用 nginx+lua 实现的方式,只是我没见过,也想了解下。比如我一直关注的某 CDN 厂商,一直在分享 openresty 的一些应用与实现,但是对于视频缓存这款却一直没讲过。 |
12 MeteorCat 2022-10-18 12:17:32 +08:00 via Android 我也觉得,只要看是什么量级的,你是要做视频站点? |
![]() | 14 eason1874 2022-10-18 12:20:50 +08:00 前端大多用 Nginx ,缓存没有用 Nginx 的,据我所知用最多是 ATS ,阿里云前几年也用这个,后来好像改自研了 |
![]() | 15 liuxu 2022-10-18 12:23:49 +08:00 考虑到楼主的需求和未来的职业生涯,建议 rust/axum 手写,把时间花在解决问题上,而不是找方案上 |
16 0ZXYDDu796nVCFxq 2022-10-18 13:49:52 +08:00 via Android ng+ats ,你要是需求明确没啥特殊需求,数据面一周都能出 demo 了 前提是有个熟悉各方面的人 |
17 vW1k6gKHu0543k0h 2022-10-18 14:20:07 +08:00 @frostfall 需要解决方案?还是思路? |
19 vW1k6gKHu0543k0h 2022-10-18 14:38:38 +08:00 @frostfall 这种信息一般人不知道的,只要问云厂家的架构师,还要找 cdn 的架构师,可以帮你问问 v:aDE4MTU2NTQ1Nzky |
20 frostfall OP 目前来看,原生 ATS 也不完美,使用了一段时间,发现了几个问题,有大有小: 1. 编译问题,上个版本编译通过,下个小版本编译就过不去了。 2. 启动问题,有时即便编译通过,也启动不了,配置文件没问题,运行配置文件检测却报错。 3. 内存占用问题,默认开启 RamCache ,占用相当一部分内存(因为在内存里,性能当然没的说)。可即便不开 RamCache ,ATS 默认存储索引也放内存里,且不可更改,这就导致内存非常大,测试的机器硬盘用了三分之一,内存已经被吃满了。 4. 不支持 SSD+HDD 冷热缓存,原本 6.0 版本以前还临时支持 SSD 做中间缓存,6.0 开始就没有了,并且也没有替代方案。 所以就想问问看,这些厂商,你们是魔改的 ATS ,还是另起炉灶该了一套?魔改 ATS 方案可行吗,有没有什么坑? |
![]() | 23 ccsexyz 2022-10-18 14:46:10 +08:00 基本上都是自研 or ATS |
24 hankai17 2022-10-18 14:52:22 +08:00 @frostfall 1. 编译看版本 我记得 7.x 以后需要高版本 g++ 2. 版本升降级 确实会有配置不兼容问题 不至于起不来 3. 我记得总索引大小 可以根据 min_obj 配置 根据你们的业务配一个恰当的值 内存占用大可以用 jemalloc(我没用过)代替其内存池 4. 可以根据 host 划分磁盘? |
25 frostfall OP |
![]() | 26 yuzo555 2022-10-18 15:18:25 +08:00 视频处理成 HLS 或者分段缓存的 Dash 不就没有大文件了? |