每十分钟刷新一次的配额报表可能漏掉远超十分钟的当前流量。Squid 原生的交易日志通常只写入已完成的交易,因此仍在进行的下载或 CONNECT 隧道可能尚未提供最终字节数。

首先确定配额统计的是哪种流量。

准入发生在最终计费之前

辅助程序可以借助计费数据库准许一个新请求。之后再更新该数据库,并不会自动停止已经被准入的工作。

并发请求也可能查询同一余额。在还剩 20 MB 时,两个并发的 15 MB 操作可能在任何一个改变总额之前都被准入。事后进行准确的报告并不能撤销这次超额。

身份验证和外部 ACL 缓存还可能进一步推迟已经改变的判定。缓存中的放行并不是一次新的余额检查。基于 IP 的计费还可能把同一个转换后源地址后面的用户合并在一起。

定义你真正能执行的限制

宽松的每月策略可以允许延迟汇总和记录在案的超支容许量。硬性的实时上限需要可信的实时计量和一个能对进行中流量采取行动的执法机制。

确定被准入的传输是完成、被中断,还是预留一份预算。定义并发操作如何共享这份预算,以及失败的操作如何释放预留。刚好在限额之下开始的传输应当有可预测的结果。

在计费设计中纳入结转、迟到记录、服务重启和日志轮转。保持持久的处理进度;为了免于重复计费而删除仍在使用的日志,反而可能丢失证据。

相关文章