🔗 功能:延迟池
- 目标:提供一种方法,根据任何条件的列表来限制某些请求的带宽。
- 状态:已完成
- 版本: 2.2+
- 开发者:David Luyer
🔗 延迟池
作者:David Luyer。
要启用延迟池功能,请在编译 Squid 前使用 –enable-delay-pools 进行配置。
🔗 此 FAQ 条目的术语
-
- 池 (pool)
- 根据给定类别构成的一组桶组。
-
- 桶组 (bucket group)
- 池中的一组桶,例如每个主机的桶组、每个网络的桶组或聚合桶组(聚合桶组实际上是一个单独的桶)。
-
- 桶 (bucket)
- 单个延迟桶代表一种流量分配,该分配以给定速率(最高可达给定限制)进行补充,并在空时导致流量延迟。
-
- 类别 (class)
- 延迟池的类别决定了延迟的应用方式,即不同的客户端 IP 是单独处理还是作为一个组处理(或两者都处理)。
-
- 类别 1 (class 1)
- 类别 1 延迟池包含一个统一的桶,该桶用于受池约束的所有主机的请求。
-
- 类别 2 (class 2)
- 类别 2 延迟池包含一个统一的桶和 255 个桶,每个桶对应一个 8 位网络(IPv4 C 类)上的主机。
- 类别 3 (class 3)
包含 255 个用于 16 位网络中子网的桶,以及这些网络上每个主机的单独桶(IPv4 B 类)。 -
- 类别 4 (class 4)
- 与类别 3 相同,但此外还包含每个已认证用户的桶,每个用户一个。
-
- 类别 5 (class 5)
- 基于 http_access 中 external_acl_type 帮助程序返回的标签值自定义类别。每个使用的标签值一个桶。
延迟池允许您限制客户端或客户端组的流量,具有各种功能。
- 可以指定不受延迟池影响的对等主机,即本地对等连接或其他“免费”流量(使用 no-delay 对等选项)。
- 延迟行为通过 ACL 选择(低优先级和高优先级流量,员工与学生或学生与已认证学生等)。
- 每组用户都有一定数量的桶,一个桶每秒有一个进入量和一个可以增长的最大量;当它达到零时,对象的读取将被推迟,直到其中一个对象的客户端具有一些流量分配。
- 可以使用给定的类别配置任意数量的池,并且可以禁用池内的任何一组限制。例如,您可能只想使用类别 3 的聚合桶组和每个主机的桶组,而不使用每个网络的桶组。
这允许使用诸如创建多个类别 1 延迟池并将一定量的带宽分配给给定对象类型(通过使用 URL 正则表达式或类似方法)等选项,以及许多我确定我甚至没想到的其他用途,超越了最初的公平平衡,将相对较小的流量分配给大量用户。
🔗 延迟池存在一些限制
- 延迟池与慢速中止不兼容;快速中止应设置得相当低,以防止一旦没有客户端请求对象,对象以全速检索(因为流量分配基于当前客户端,当没有客户端连接到对象时,无法确定流量分配)。
- 延迟池仅限制实际传输的数据,不包括 TCP 开销、ICP、DNS、ICMP ping 等开销。
- 一个连接或少量连接可能会占用给定桶的所有带宽,而其他连接可能会完全饿死,这可能是一个主要问题,如果有大量大对象正在传输并且参数设置不当,导致少数大对象会使所有客户端饿死(可能通过一个正在实验的补丁解决)。
- 在 Squid 3.1 中,基于类别的池尚未与 IPv6 地址客户端一起使用。
- 在早于 3.1 的 Squid 版本中,延迟池桶限制为 32 位,因此在桶内容和填充速率方面都有相当低的 MB 容量。现在桶大小已提高到 64 位“无限制”值,但填充速率仍然较低。
🔗 如何将 Squid 的总带宽限制为,例如,512 Kbps?
delay_pools 1
delay_class 1 1
delay_access 1 allow all
delay_parameters 1 64000/64000 # 512 kbits == 64 kbytes per second
1 秒的缓冲区(最大值 = 恢复值 = 64k 字节/秒)是因为请求了限制,并且没有请求对突发流量的响应。如果您希望它能够响应突发流量,请将 aggregate_max 增加到更大的值,这将处理流量突发。建议最大值至少是恢复值的两倍——如果只有一个对象正在下载,有时下载速率会低于请求的吞吐量,因为在需要补充时桶尚未清空。
🔗 如何将单个连接限制为 128 Kbps?
您无法限制单个 HTTP 请求的连接速度。您可以将单个主机限制为某种带宽速率。要限制特定主机,请为其定义一个acl,并使用上面的示例。要限制一组主机,则必须使用类别 2 或 3 的延迟池。例如:
acl only128kusers src 192.168.1.0/24
delay_pools 1
delay_class 1 3
delay_access 1 allow only128kusers
delay_access 1 deny all
delay_parameters 1 64000/64000 -1/-1 16000/64000
有关这些标签的说明,请参阅配置文件。
上述解决方案提供了一个缓存总共 512kbit 的操作空间,并且每个 IP 地址仅从该池中获得 128kbit。
🔗 您个人如何使用延迟池?
我们有六个本地缓存对等节点,所有节点都带有“proxy-only no-delay”选项,因为它们是连接到快速以太网和微波(ATM)网络的快速机器。
对于本地访问,我们使用 dstdomain ACL,对于延迟池例外,我们也使用 dst ACL,因为延迟池 ACL 处理使用“快速查找”,这意味着(除其他外)它不会等待 DNS 查找(如果需要)。
我们的代理有两个虚拟接口,一个需要学生身份验证才能从不支付流量的部门连接,另一个使用延迟池。此外,主要 Unix 系统的用户可以选择慢速或快速流量,但必须为使用快速缓存的任何流量付费。慢速缓存的访问禁用 Ident 查找,因为它们不需要。慢速访问通过类别 3 延迟池延迟,以在部门之间以及用户之间实现公平性。我们认识到,主机的 Lynx 用户被分组在一个延迟桶中,但他们主要还是查看文本页面,所以这不算严重问题。如果确实存在问题,我们可以将这些主机纳入类别 1 延迟池并为其分配更大的配额。
我更喜欢使用慢速恢复速率和较大的最大速率,优先考虑那些查看网页的人,因为他们个人的桶在他们阅读时会填满,而下载大对象的则处于不利地位。这取决于您认为哪些客户端更重要。此外,一个单独的 8 位网络(一个住宅学院)已额外付费以获得更多带宽。
我配置文件中相关部分是(IP 地址等均已更改)
# ACL definitions
# Local network definitions, domains a.net, b.net
acl LOCAL-NET dstdomain a.net b.net
# Local network; nets 64 - 127. Also nearby network class A, 10.
acl LOCAL-IP dst 192.168.64.0/18 10.0.0.0/8
# Virtual i/f used for slow access
acl virtual_slowcache myip 192.168.100.13
# All permitted slow access, nets 96 - 127
acl slownets src 192.168.96.0/19
# Special 'fast' slow access, net 123
acl fast_slow src 192.168.123.0/24
# User hosts
acl my_user_hosts src 192.168.100.2/31
# Don't need ident lookups for billing on (free) slow cache
ident_lookup_access allow my_user_hosts !virtual_slowcache
ident_lookup_access deny all
# Security access checks
http_access [...]
# These people get in for slow cache access
http_access allow virtual_slowcache slownets
http_access deny virtual_slowcache
# Access checks for main cache
http_access [...]
# Delay definitions (read config file for clarification)
delay_pools 2
delay_initial_bucket_level 50
delay_class 1 3
delay_access 1 allow virtual_slowcache !LOCAL-NET !LOCAL-IP !fast_slow
delay_access 1 deny all
delay_parameters 1 8192/131072 1024/65536 256/32768
delay_class 2 2
delay_access 2 allow virtual_slowcache !LOCAL-NET !LOCAL-IP fast_slow
delay_access 2 deny all
delay_parameters 2 2048/65536 512/32768
一些部门也使用相同的代码,使用类别 2 延迟池,以便在为不同实验室或学生提供不同性能方面有更大的灵活性。
🔗 哪里还可以了解更多关于延迟池的信息?
这在配置文件中也有很好的记录,并附有示例。Squid 安装时会附带 squid.conf.documented 或 squid.conf.default 文件。如果您不再有记录的配置文件,最新版本可在 squid-cache.org 网站上找到。
类别:功能
导航:站点搜索,站点页面,类别,🔼 向上