限流和缓存疑问? #44

Closed
opened 2025-07-29 11:36:57 +08:00 by XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0 · 25 comments
XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0 commented 2025-07-29 11:36:57 +08:00 (Migrated from github.com)

达到限流的IP是怎么限制的,限制时长还是直接拉黑了?
最后一项的缓存缓存还是什么?例如有几百个人访问https://raw.githubusercontent.com/sky22333/hubproxy/refs/heads/main/src/config.toml 是否是对这个文件进行了缓存?

达到限流的IP是怎么限制的,限制时长还是直接拉黑了? 最后一项的缓存缓存还是什么?例如有几百个人访问https://[raw.githubusercontent.com/sky22333/hubproxy/refs/heads/main/src/config.toml](https://raw.githubusercontent.com/sky22333/hubproxy/refs/heads/main/src/config.toml) 是否是对这个文件进行了缓存?
sky22333 commented 2025-07-29 11:53:33 +08:00 (Migrated from github.com)

关于缓存是仅缓存Docker的匿名认证token和镜像清单,用于提升认证速度和响应速度,不会缓存镜像文件,仅占用一点内存,不会占用任何存储空间。

Docker的镜像文件是实时流式转发到客户端,服务端不会存储任何镜像文件。github文件也是。下载离线镜像也是。都不会缓存任何二进制文件。所以不吃存储空间。


IP限流是基于令牌桶算法来限流,如果对应的IP,超过速率限制,访问时会显示429状态码,并返回错误信息暂时被封禁

关于令牌桶的算法大概是这样:

以配置了2小时内100个请求为例

限制:每两小时最多 100 次请求  
速率:r = 100 / 7200 ≈ 0.0139 令牌/秒  
理论上桶最大容量如果是 100 个令牌,表示:  
桶一开始默认满,有 100 个令牌(即可以瞬间处理 100 次请求)  

之后令牌以 0.0139 个/秒的速率持续补充(即每 72 秒补充 1 个令牌)  
所以只要消耗掉一个,就会72秒后补充一个,不是所有的消耗完了再补。但由于桶最大容量是 100 个,所以令牌最多只能积攒到 100 个。 

关于配置:想要限制的速率间隔小,就降低周期,增大请求数。。。想要限制的速率间隔大,就增加周期,降低请求数。

关于缓存是仅缓存Docker的匿名认证token和镜像清单,用于提升认证速度和响应速度,不会缓存镜像文件,仅占用一点内存,不会占用任何存储空间。 Docker的镜像文件是实时流式转发到客户端,服务端不会存储任何镜像文件。github文件也是。下载离线镜像也是。都不会缓存任何二进制文件。所以不吃存储空间。 --- IP限流是基于令牌桶算法来限流,如果对应的IP,超过速率限制,访问时会显示429状态码,并返回错误信息`暂时被封禁`。 关于令牌桶的算法大概是这样: 以配置了2小时内100个请求为例 ``` 限制:每两小时最多 100 次请求 速率:r = 100 / 7200 ≈ 0.0139 令牌/秒 理论上桶最大容量如果是 100 个令牌,表示: 桶一开始默认满,有 100 个令牌(即可以瞬间处理 100 次请求) 之后令牌以 0.0139 个/秒的速率持续补充(即每 72 秒补充 1 个令牌) 所以只要消耗掉一个,就会72秒后补充一个,不是所有的消耗完了再补。但由于桶最大容量是 100 个,所以令牌最多只能积攒到 100 个。 ``` 关于配置:想要限制的速率间隔小,就降低周期,增大请求数。。。想要限制的速率间隔大,就增加周期,降低请求数。
XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0 commented 2025-07-29 11:57:36 +08:00 (Migrated from github.com)

关于缓存是仅缓存Docker的匿名认证token和镜像清单,用于提升认证速度,不会缓存镜像文件,仅占用一点内存,不会占用任何存储空间。

IP限流是基于令牌桶算法来限流,如果对应的IP,超过速率限制,访问时会显示429状态码,并返回错误信息暂时被封禁

关于令牌桶的算法大概是这样:

以配置了2小时内100个请求为例

限制:每两小时最多 100 次请求  
速率:r = 100 / 7200 ≈ 0.0139 令牌/秒  
理论上桶最大容量如果是 100 个令牌,表示:  
桶一开始默认满,有 100 个令牌(即可以瞬间处理 100 次请求)  

之后令牌以 0.0139 个/秒的速率持续补充(即每 72 秒补充 1 个令牌)  
所以只要消耗掉一个,就会72秒后补充一个,不是所有的消耗完了再补。但由于桶最大容量是 100 个,所以令牌最多只能积攒到 100 个。 

是封禁多久呢?我配置了500/0.5我看都封禁了不少

> 关于缓存是仅缓存Docker的匿名认证token和镜像清单,用于提升认证速度,不会缓存镜像文件,仅占用一点内存,不会占用任何存储空间。 > > IP限流是基于令牌桶算法来限流,如果对应的IP,超过速率限制,访问时会显示429状态码,并返回错误信息`暂时被封禁`。 > > 关于令牌桶的算法大概是这样: > > 以配置了2小时内100个请求为例 > > ``` > 限制:每两小时最多 100 次请求 > 速率:r = 100 / 7200 ≈ 0.0139 令牌/秒 > 理论上桶最大容量如果是 100 个令牌,表示: > 桶一开始默认满,有 100 个令牌(即可以瞬间处理 100 次请求) > > 之后令牌以 0.0139 个/秒的速率持续补充(即每 72 秒补充 1 个令牌) > 所以只要消耗掉一个,就会72秒后补充一个,不是所有的消耗完了再补。但由于桶最大容量是 100 个,所以令牌最多只能积攒到 100 个。 > ``` 是封禁多久呢?我配置了500/0.5我看都封禁了不少
sky22333 commented 2025-07-29 12:01:50 +08:00 (Migrated from github.com)

以配置了2小时内100个请求为例,超过了,就会封72秒,72秒后只给你增加一个请求,所以72秒后你只能访问一次。需要再等72秒你才能访问第二次。

如果144秒内你没访问,此时你有两个请求可以访问。可以直接访问两次。依次类推。

如果还是不明白的话最好是问一下AI,AI讲的比我更准确

以配置了2小时内100个请求为例,超过了,就会封72秒,72秒后只给你增加一个请求,所以72秒后你只能访问一次。需要再等72秒你才能访问第二次。 如果144秒内你没访问,此时你有两个请求可以访问。可以直接访问两次。依次类推。 如果还是不明白的话最好是问一下AI,AI讲的比我更准确
XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0 commented 2025-07-29 12:03:18 +08:00 (Migrated from github.com)

以配置了2小时内100个请求为例,超过了,就会封72秒,72秒后只给你增加一个请求,所以72秒后你只能访问一次。需要再等72秒你才能访问第二次。

如果144秒内你没访问,此时你有两个请求可以访问。可以直接访问两次。依次类推。

如果还是不明白的话最好是问一下AI,AI讲的比我更准确

懂了,谢谢你的解答

> 以配置了2小时内100个请求为例,超过了,就会封72秒,72秒后只给你增加一个请求,所以72秒后你只能访问一次。需要再等72秒你才能访问第二次。 > > 如果144秒内你没访问,此时你有两个请求可以访问。可以直接访问两次。依次类推。 > > 如果还是不明白的话最好是问一下AI,AI讲的比我更准确 懂了,谢谢你的解答
sky22333 commented 2025-07-29 12:08:09 +08:00 (Migrated from github.com)

需要注意的是拉取镜像时,由于镜像会有多个层,还有一些认证交互,所以拉取一次镜像会消耗多个请求。一般的镜像拉取一次会消耗大约10个左右的请求。

需要注意的是拉取镜像时,由于镜像会有多个层,还有一些认证交互,所以拉取一次镜像会消耗多个请求。一般的镜像拉取一次会消耗大约10个左右的请求。
XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0 commented 2025-07-29 12:10:29 +08:00 (Migrated from github.com)

需要注意的是拉取镜像时,由于镜像会有多个层,还有一些认证交互,所以拉取一次镜像会消耗多个请求。

还有就是使用多线程工具下载GitHub大文件的时候,也会产生大量请求,例如下载:https://github.com/ollama/ollama/releases/download/v0.10.0-rc3/ollama-windows-amd64.zip

> 需要注意的是拉取镜像时,由于镜像会有多个层,还有一些认证交互,所以拉取一次镜像会消耗多个请求。 还有就是使用多线程工具下载GitHub大文件的时候,也会产生大量请求,例如下载:https://github.com/ollama/ollama/releases/download/v0.10.0-rc3/ollama-windows-amd64.zip
sky22333 commented 2025-07-29 12:15:01 +08:00 (Migrated from github.com)

是的

是的
XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0 commented 2025-07-29 12:19:02 +08:00 (Migrated from github.com)

是的

可否实现GitHub缓存,作为一个可开启关闭的选项,因为例如下载这种大文件,在多线程的情况下,用户端的速率假如只能跑10M/s,但是用户是使用32线程拉取的,会导致服务器的下行直接被拉满,2.5G口都被占满了,还会导致cpu占用增加,用户没下载完会导致服务器一直拉这个文件。

> 是的 可否实现GitHub缓存,作为一个可开启关闭的选项,因为例如下载这种大文件,在多线程的情况下,用户端的速率假如只能跑10M/s,但是用户是使用32线程拉取的,会导致服务器的下行直接被拉满,2.5G口都被占满了,还会导致cpu占用增加,用户没下载完会导致服务器一直拉这个文件。
sky22333 commented 2025-07-29 12:22:56 +08:00 (Migrated from github.com)

文件缓存的话会占用大量空间,即使支持了,也不会有多少人使用。并且程序中有超时限制,下载时间过长的文件会自动断开。不会一直占用连接。

你可以直接在配置中修改github文件大小限制,超过限制大小的文件会直接拒绝。

文件缓存的话会占用大量空间,即使支持了,也不会有多少人使用。并且程序中有超时限制,下载时间过长的文件会自动断开。不会一直占用连接。 你可以直接在配置中修改github文件大小限制,超过限制大小的文件会直接拒绝。
XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0 commented 2025-07-29 12:33:58 +08:00 (Migrated from github.com)

文件缓存的话会占用大量空间,即使支持了,也不会有多少人使用。并且程序中有超时限制,下载时间过长的文件会自动断开。不会一直占用连接。

你可以直接在配置中修改github文件大小限制,超过限制大小的文件会直接拒绝。

每个人有每个人的想法吧,我提供的服务目前日ip超过20万+,就是不想设置太多限制,速率限制也是最宽容的

> 文件缓存的话会占用大量空间,即使支持了,也不会有多少人使用。并且程序中有超时限制,下载时间过长的文件会自动断开。不会一直占用连接。 > > 你可以直接在配置中修改github文件大小限制,超过限制大小的文件会直接拒绝。 每个人有每个人的想法吧,我提供的服务目前日ip超过20万+,就是不想设置太多限制,速率限制也是最宽容的
sky22333 commented 2025-07-29 12:36:52 +08:00 (Migrated from github.com)

你这流量这么大的话,所以更不建议缓存文件

你这流量这么大的话,所以更不建议缓存文件
XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0 commented 2025-07-29 12:44:50 +08:00 (Migrated from github.com)

你这流量这么大的话,所以更不建议缓存文件

感谢你的解答,也感谢你写出这么好的项目!

> 你这流量这么大的话,所以更不建议缓存文件 感谢你的解答,也感谢你写出这么好的项目!
XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0 commented 2025-07-29 13:03:29 +08:00 (Migrated from github.com)

你这流量这么大的话,所以更不建议缓存文件

可不可以增加开启/关闭docker反代的配置选项

> 你这流量这么大的话,所以更不建议缓存文件 可不可以增加开启/关闭docker反代的配置选项
sky22333 commented 2025-07-29 13:08:20 +08:00 (Migrated from github.com)

你看一下配置文件,一直都有的,改一下布尔值

你看一下配置文件,一直都有的,改一下布尔值
XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0 commented 2025-07-29 13:11:51 +08:00 (Migrated from github.com)

你看一下配置文件,一直都有的,改一下布尔值

没有关闭Docker Hub的选项?

> 你看一下配置文件,一直都有的,改一下布尔值 没有关闭Docker Hub的选项?
sky22333 commented 2025-07-29 13:21:51 +08:00 (Migrated from github.com)

配置里没写,其实是支持的,在配置文件里[registries]字段中添加

# Registry映射配置,支持多种镜像仓库上游
[registries]

# 添加如下配置关闭docker hub代理
[registries."registry-1.docker.io"]
enabled = false

.......
...
配置里没写,其实是支持的,在配置文件里`[registries]`字段中添加 ``` # Registry映射配置,支持多种镜像仓库上游 [registries] # 添加如下配置关闭docker hub代理 [registries."registry-1.docker.io"] enabled = false ....... ... ```
XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0 commented 2025-07-29 13:28:56 +08:00 (Migrated from github.com)

配置里没写,其实是支持的,在配置文件里[registries]字段中添加

# Registry映射配置,支持多种镜像仓库上游
[registries]

# 添加如下配置关闭docker hub代理
[registries."registry-1.docker.io"]
enabled = false

.......
...

输入错误的链接会直接反代GitHub的404页面,这是不合理的,建议返回自定义404页面,例如https://demo.52013120.xyz/https://github.com/sky22333/hubproxy/blob/main/install

> 配置里没写,其实是支持的,在配置文件里`[registries]`字段中添加 > > ``` > # Registry映射配置,支持多种镜像仓库上游 > [registries] > > # 添加如下配置关闭docker hub代理 > [registries."registry-1.docker.io"] > enabled = false > > ....... > ... > ``` 输入错误的链接会直接反代GitHub的404页面,这是不合理的,建议返回自定义404页面,例如https://demo.52013120.xyz/https://github.com/sky22333/hubproxy/blob/main/install
sky22333 commented 2025-07-29 13:34:53 +08:00 (Migrated from github.com)

好的,我后面优化一下,目前其他同类开源项目也都有这个情况

好的,我后面优化一下,目前其他同类开源项目也都有这个情况
XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0 commented 2025-07-29 13:36:26 +08:00 (Migrated from github.com)

好的,我后面优化一下,目前其他同类开源项目也都有这个情况

好的,建议是对这些错误返回都进行自定义页面,因为搜索引擎啥页面都会进行索引

> 好的,我后面优化一下,目前其他同类开源项目也都有这个情况 好的,建议是对这些错误返回都进行自定义页面,因为搜索引擎啥页面都会进行索引
XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0 commented 2025-07-29 13:46:07 +08:00 (Migrated from github.com)

好的,我后面优化一下,目前其他同类开源项目也都有这个情况

🚀 HubProxy 启动成功
📡 监听地址: 0.0.0.0:5000
限流配置: 500请求/0.5小时
H2c: 已启用
🔗 项目地址: https://github.com/sky22333/hubproxy 启动日志建议添加版本号,可以防止没有正常更新到最新版本

> 好的,我后面优化一下,目前其他同类开源项目也都有这个情况 🚀 HubProxy 启动成功 📡 监听地址: 0.0.0.0:5000 ⚡ 限流配置: 500请求/0.5小时 H2c: 已启用 🔗 项目地址: https://github.com/sky22333/hubproxy 启动日志建议添加版本号,可以防止没有正常更新到最新版本
sky22333 commented 2025-07-29 13:52:15 +08:00 (Migrated from github.com)

好的

好的
sky22333 commented 2025-07-29 15:44:55 +08:00 (Migrated from github.com)

4ec36da9b5
已修复,可以更新试试

https://github.com/sky22333/hubproxy/commit/4ec36da9b5de3bdad9c999c6871dc26bbde12d1c 已修复,可以更新试试
fscarmen commented 2025-07-29 23:19:20 +08:00 (Migrated from github.com)

请问部署的 VPS 最大速度是 50MB,那么代理的速度也是最大 50MB了吧?即使使用了 Cloudflare CDN。

请问部署的 VPS 最大速度是 50MB,那么代理的速度也是最大 50MB了吧?即使使用了 Cloudflare CDN。
sky22333 commented 2025-07-30 03:23:29 +08:00 (Migrated from github.com)

请问部署的 VPS 最大速度是 50MB,那么代理的速度也是最大 50MB了吧?即使使用了 Cloudflare CDN。

是的。不过理论上,你可以在cf上主动开启二进制文件缓存,但是即使开启后cf也只会缓存小于512MB的文件,如果用户能命中缓存的话,就相当于直接下载的cf服务器上的文件,而cf的带宽就很大了。不过我没实测过,有待考证

> 请问部署的 VPS 最大速度是 50MB,那么代理的速度也是最大 50MB了吧?即使使用了 Cloudflare CDN。 是的。不过理论上,你可以在cf上主动开启二进制文件缓存,但是即使开启后cf也只会缓存小于512MB的文件,如果用户能命中缓存的话,就相当于直接下载的cf服务器上的文件,而cf的带宽就很大了。不过我没实测过,有待考证
XxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxXxX0 commented 2025-07-30 05:00:30 +08:00 (Migrated from github.com)

请问部署的 VPS 最大速度是 50MB,那么代理的速度也是最大 50MB了吧?即使使用了 Cloudflare CDN。

是的

启动版本号没更新吧,更新了一起试试

> > 请问部署的 VPS 最大速度是 50MB,那么代理的速度也是最大 50MB了吧?即使使用了 Cloudflare CDN。 > > 是的 启动版本号没更新吧,更新了一起试试
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: 3344/hubproxy#44