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