PHP - 缓存和提供图像和视频文件的最佳方式
PHP - best way to cache and serve image and video files
我是 运行 像 9gag 这样的应用程序,用户可以在其中上传和观看图像和视频,所以相同的图像和视频每分钟最多被请求 100 次,这给 SSD 带来了很大的工作量,所以最后存储在 RAM 中使用媒体并从那里提供服务会更好。
我读到 memcached 和 redis 不适合这个,但没有很好的解释为什么不,有人可以解释一下吗?消失是更好的解决方案吗?它可以与 PHP 一起使用吗?
我需要最好的解决方案 PHP。
我绝对不会建议您将这些类型的工作负载存储在 Memcached 或 Redis 中,我也不建议您让 PHP 处理这些工作负载。
Varnish 确实是解决问题的方法。
为什么不使用 Memcached 和 Redis?
Memcached 和 Redis 是分布式键值存储。它们速度极快且可扩展,非常适合存储定期更改的小值。
图像和视频文件非常大,不太适合这些纯内存数据库。请记住,Redis 和 Memcached 不能直接从 Web 访问,它们是您可以从 Web 应用程序调用的缓存。
这意味着 运行 它们通过像 PHP 这样的应用程序运行时会有额外的延迟。
为什么不PHP?
不要误会我的意思,我是 PHP 的忠实粉丝,自 2007 年以来一直是 PHP 社区的一员。PHP 非常适合构建网页,但不适合处理二进制数据。
您要处理的这些类型的工作负载很容易使 PHP-FPM 或 PHP-CLI 运行时不堪重负。
可以使用 PHP,但是您需要大量的服务器来处理大规模的视频和图像处理,这将成为一种运营负担。
为什么选择清漆?
Varnish 是一个位于 Web 应用程序前面的反向缓存代理,不同于位于 Web 应用程序后面的分布式缓存,例如 Memcached 和 Redis。
这意味着您只需将图像和视频存储在网络服务器的磁盘上,Varnish 会将请求的内容缓存在内存中,而无需在每次请求时都访问网络服务器。
Varnish 专为大规模 HTTP 处理而构建,非常擅长大规模处理任何大小的 HTTP 响应。
Varnish 是 CDN 和 OTT 视频流平台用来传送图像和在线视频的软件。
使用 HLS、MPEG-DASH 或 CMAF 等视频协议,这些流式视频被分成多个片段并在清单文件中编制索引。
单个 Varnish 服务器可以以亚毫秒级延迟提供这些服务,带宽高达 500 Gbps,并发量约为 100,000 个请求。
与在 PHP 中执行此操作相比,您需要的机器数量将大大减少。
Varnish Configuration Language 是 Varnish 附带的特定于领域的编程语言,也可用于在 request/response 流程中执行某些自定义任务。
VCL 代码只需要扩展标准行为,而在 PHP 等常规开发语言中,您必须在代码中定义所有行为。
这里有一些与 Varnish 相关的资源:
- Varnish 开发者门户:https://www.varnish-software.com/developers/
- Varnish 文档:http://varnish-cache.org/docs/
- 我写的 Varnish 6 By Example 书:https://info.varnish-software.com/resources/varnish-6-by-example-book
甚至 Varnish Enterprise?
唯一的挑战是缓存大量 image/video 内容。因为 Varnish 将所有内容都存储在内存中,所以您需要足够的内存来存储所有内容。
虽然您可以横向扩展 Varnish 并使用一致的哈希算法来平衡多个 Varnish 服务器上的内容,但您可能仍然需要相当多的服务器。这取决于需要始终存储在缓存中的内容量。
如果您的原始 Web 平台足够强大,可以处理对未缓存的长尾内容的请求,Varnish 可以将 热门内容 存储在内存中并触发该长尾的缓存未命中内容。这样你可能不需要很多缓存服务器。这主要取决于你平台的流量模式。
Varnish 的开源版本确实有一个 file
存储引擎,但它的性能很差,并且容易出现大规模磁盘碎片。随着写入操作的增加,这会大大降低您的速度。
为了解决这个问题,开源项目背后的商业实体 Varnish Software 提出了 海量存储引擎 (MSE)。 MSE 以非常强大的方式解决了文件缓存带来的典型问题。
世界上一些最大的视频流媒体平台都在使用该技术。
有关 MSE 的详细信息,请参阅 https://docs.varnish-software.com/varnish-cache-plus/features/mse/。
Varnish Enterprise and MSE are not free and open source. It's up to you to figure out what would be the cheaper solution from a total cost of ownership point of view: managing a lot of memory-based open source Varnish servers or paying the license fees of a limited amount of Varnish Enterprise servers with MSE.
我是 运行 像 9gag 这样的应用程序,用户可以在其中上传和观看图像和视频,所以相同的图像和视频每分钟最多被请求 100 次,这给 SSD 带来了很大的工作量,所以最后存储在 RAM 中使用媒体并从那里提供服务会更好。
我读到 memcached 和 redis 不适合这个,但没有很好的解释为什么不,有人可以解释一下吗?消失是更好的解决方案吗?它可以与 PHP 一起使用吗?
我需要最好的解决方案 PHP。
我绝对不会建议您将这些类型的工作负载存储在 Memcached 或 Redis 中,我也不建议您让 PHP 处理这些工作负载。
Varnish 确实是解决问题的方法。
为什么不使用 Memcached 和 Redis?
Memcached 和 Redis 是分布式键值存储。它们速度极快且可扩展,非常适合存储定期更改的小值。
图像和视频文件非常大,不太适合这些纯内存数据库。请记住,Redis 和 Memcached 不能直接从 Web 访问,它们是您可以从 Web 应用程序调用的缓存。
这意味着 运行 它们通过像 PHP 这样的应用程序运行时会有额外的延迟。
为什么不PHP?
不要误会我的意思,我是 PHP 的忠实粉丝,自 2007 年以来一直是 PHP 社区的一员。PHP 非常适合构建网页,但不适合处理二进制数据。
您要处理的这些类型的工作负载很容易使 PHP-FPM 或 PHP-CLI 运行时不堪重负。
可以使用 PHP,但是您需要大量的服务器来处理大规模的视频和图像处理,这将成为一种运营负担。
为什么选择清漆?
Varnish 是一个位于 Web 应用程序前面的反向缓存代理,不同于位于 Web 应用程序后面的分布式缓存,例如 Memcached 和 Redis。
这意味着您只需将图像和视频存储在网络服务器的磁盘上,Varnish 会将请求的内容缓存在内存中,而无需在每次请求时都访问网络服务器。
Varnish 专为大规模 HTTP 处理而构建,非常擅长大规模处理任何大小的 HTTP 响应。
Varnish 是 CDN 和 OTT 视频流平台用来传送图像和在线视频的软件。
使用 HLS、MPEG-DASH 或 CMAF 等视频协议,这些流式视频被分成多个片段并在清单文件中编制索引。
单个 Varnish 服务器可以以亚毫秒级延迟提供这些服务,带宽高达 500 Gbps,并发量约为 100,000 个请求。
与在 PHP 中执行此操作相比,您需要的机器数量将大大减少。
Varnish Configuration Language 是 Varnish 附带的特定于领域的编程语言,也可用于在 request/response 流程中执行某些自定义任务。
VCL 代码只需要扩展标准行为,而在 PHP 等常规开发语言中,您必须在代码中定义所有行为。
这里有一些与 Varnish 相关的资源:
- Varnish 开发者门户:https://www.varnish-software.com/developers/
- Varnish 文档:http://varnish-cache.org/docs/
- 我写的 Varnish 6 By Example 书:https://info.varnish-software.com/resources/varnish-6-by-example-book
甚至 Varnish Enterprise?
唯一的挑战是缓存大量 image/video 内容。因为 Varnish 将所有内容都存储在内存中,所以您需要足够的内存来存储所有内容。
虽然您可以横向扩展 Varnish 并使用一致的哈希算法来平衡多个 Varnish 服务器上的内容,但您可能仍然需要相当多的服务器。这取决于需要始终存储在缓存中的内容量。
如果您的原始 Web 平台足够强大,可以处理对未缓存的长尾内容的请求,Varnish 可以将 热门内容 存储在内存中并触发该长尾的缓存未命中内容。这样你可能不需要很多缓存服务器。这主要取决于你平台的流量模式。
Varnish 的开源版本确实有一个 file
存储引擎,但它的性能很差,并且容易出现大规模磁盘碎片。随着写入操作的增加,这会大大降低您的速度。
为了解决这个问题,开源项目背后的商业实体 Varnish Software 提出了 海量存储引擎 (MSE)。 MSE 以非常强大的方式解决了文件缓存带来的典型问题。
世界上一些最大的视频流媒体平台都在使用该技术。
有关 MSE 的详细信息,请参阅 https://docs.varnish-software.com/varnish-cache-plus/features/mse/。
Varnish Enterprise and MSE are not free and open source. It's up to you to figure out what would be the cheaper solution from a total cost of ownership point of view: managing a lot of memory-based open source Varnish servers or paying the license fees of a limited amount of Varnish Enterprise servers with MSE.