如题,最近在考虑 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 1
?
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 不就没有大文件了?
|