Squid のダウンロードが月間トラフィック上限を超える理由
定期レポートと完了済みリクエストのログでは、正確なリアルタイムのプロキシ トラフィック上限を適用できない理由を解説します。
10 分ごとに更新される上限レポートでは、直近 10 分よりはるかに長い区間のトラフィックを取りこぼすことがあります。Squid 標準のトランザクション ログは通常、完了したトランザクションを書き出すため、進行中のダウンロードや CONNECT トンネルはまだ最終バイト数を示していない可能性があります。
まず 上限がどのトラフィックを数えるのかを定義してください。
受け入れは最終集計より前に起きる
ヘルパーは集計データベースを使って新しいリクエストを受け入れられます。あとでそのデータベースを更新しても、すでに受け入れた処理は自動では止まりません。
同時リクエストも同じ残量を参照できます。残り 20 MB のとき、15 MB の処理が 2 つ同時に走ると、どちらかが合計を変える前に両方が受け入れられることがあります。後から正確に報告しても、超過は取り消せません。
認証や外部 ACL のキャッシュは、変更後の判断をさらに遅らせます。キャッシュされた許可は新しい残量確認ではありません。IP ベースの集計では、1 つの変換済み送信元の背後にいる利用者がまとめられることもあります。
適用できる上限を定義する
緩やかな月間ポリシーなら、遅延した合計と文書化された超過許容を認められます。厳格なリアルタイム上限には、信頼できるリアルタイム計測と、進行中のトラフィックに作用できる強制手段が必要です。
受け入れた転送を完遂させるのか、中断するのか、予算を確保するのかを決めてください。同時処理がその予算をどう分け合い、失敗した処理が確保をどう解放するかを定義します。上限直下で始まる転送は、予測可能な結果になるべきです。
集計の設計には、期間の切り替わり、遅延レコード、サービス再起動、ログ ローテーションを含めてください。処理の進捗は永続化し、二重計上を避けるために有効なログを削除すると、かえって証拠を失うことがあります。