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

2022-10-18 10:59:50 +08:00
 frostfall

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

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

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

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

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

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

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

量大一点,ATS 是最佳选择,但你得找个熟悉 ATS 并且能做二次开发的人
frostfall
2022-10-18 12:16:54 +08:00
楼有些歪了,其实我们的场景,就是实现像 CDN 厂商一样的视频缓存方案。不是说把大文件扔给 CDN 就完了的。
nginx 在 7 层网关的地位是有目共睹的,但对于单纯做大文件的缓存,还是太简单了。比如,SSD+HDD 实现冷热存储,多磁盘分片存储降低单硬盘压力等等,对于动辄需要几十个 TB 的缓存空间的情况,Nginx 还是太简单了。
当然也不排除真的有用 nginx+lua 实现的方式,只是我没见过,也想了解下。比如我一直关注的某 CDN 厂商,一直在分享 openresty 的一些应用与实现,但是对于视频缓存这款却一直没讲过。
MeteorCat
2022-10-18 12:17:32 +08:00
我也觉得,只要看是什么量级的,你是要做视频站点?
frostfall
2022-10-18 12:18:49 +08:00
@MeteorCat 不是视频站点😅
eason1874
2022-10-18 12:20:50 +08:00
前端大多用 Nginx ,缓存没有用 Nginx 的,据我所知用最多是 ATS ,阿里云前几年也用这个,后来好像改自研了
liuxu
2022-10-18 12:23:49 +08:00
考虑到楼主的需求和未来的职业生涯,建议 rust/axum 手写,把时间花在解决问题上,而不是找方案上
0ZXYDDu796nVCFxq
2022-10-18 13:49:52 +08:00
ng+ats ,你要是需求明确没啥特殊需求,数据面一周都能出 demo 了
前提是有个熟悉各方面的人
vW1k6gKHu0543k0h
2022-10-18 14:20:07 +08:00
@frostfall 需要解决方案?还是思路?
frostfall
2022-10-18 14:27:58 +08:00
@eason1874 #14 对,是的,也是听说阿里后来改自研了,不清楚其他厂商是怎么做的
vW1k6gKHu0543k0h
2022-10-18 14:38:38 +08:00
@frostfall 这种信息一般人不知道的,只要问云厂家的架构师,还要找 cdn 的架构师,可以帮你问问 v:aDE4MTU2NTQ1Nzky
frostfall
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 方案可行吗,有没有什么坑?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/887725

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX