Postfix接続キャッシュ


はじめに

このドキュメントはPostfix接続キャッシュの実装について記述しています。 これはPostfixバージョン2.2以降で使えます。

このドキュメントがカバーしている話題:

SMTP接続キャッシュができること

SMTP接続キャッシュを使うと、Postfixは同じSMTP接続で複数のメッセージを配送 することができます。デフォルトでは、ある配送先が active キューに大量のメールを 抱えていると、Postfix 2.2は自動的にSMTP接続を再利用します。

SMTP接続キャッシュはパフォーマンスの機能です。実際にパフォーマンスが 向上するかどうかは場合によります:

それ以外の潜在的なSMTP接続キャッシュの問題点は、このドキュメントの最後にある 制限の議論を参照してください。

接続キャッシュの実装

Postfixのメール配送方法の概要は、Postfixアーキテクチャの OVERVIEW ドキュメントを参照してください。

Postfix接続キャッシュはPostfixメール配送プロセス間で共有されます。 これにより開かれた接続を再利用する機会が最大化されます。Sendmailやeximの ような他の MTAには非共有型の接続キャッシュがあります。そこでは、接続を作った メール配送プロセスだけが接続を再利用できます。共有接続キャッシュと同じだけ パフォーマンスを向上させようとすると、非共有接続は長時間開き続ける必要が あります。

Internet <--
smtp(8)
 
<->
scache(8)
 
<->
smtp(8)
 
--> Internet

Postfixバージョン2.2で導入された scache(8) サーバは共有接続キャッシュを管理します。Postfixバージョン2.2では、 smtp(8) クライアントだけがこのキャッシュをサポート しています。

SMTP接続キャッシュが有効になっていると (次のセクション参照)、 smtp(8) クライアントはメール処理の後に接続を切らず、 接続を scache(8) サーバに渡し、 scache(8) サーバは限られた時間の間、接続を 開き続けます。

開いた接続を scache(8) サーバに引き渡した後、 smtp(8) クライアントは他のメール配送要求の処理を 続けます。その間、いずれかの smtp(8) クライアント プロセスが scache(8) サーバにキャッシュされた 接続を要求し、メール配送に再利用するかもしれません。

接続キャッシュは配送先のドメイン名 (受信者アドレスの右側部分) と接続先 ホストのIPアドレスによって検索されます。これにより、リモートホストが異なる 名前のドメインのメールサーバであってもPostfixが接続を再利用できるように なります。

接続キャッシュの設定

Postfix smtp(8) クライアントは2つの接続 キャッシュ戦略をサポートしています:

接続キャッシュの安全機構

接続キャッシュは広く使われなければいけません。使われないSMTP接続を長時間に わたって開き続けるのは非社会的で、また膨大な数のメッセージを同じ接続で 送るのは賢くありません。SMTP接続キャッシュの問題を避けるために、Postfixは 以下の安全機構を実装しています:

接続キャッシュの制限

Postfix SMTP接続キャッシュはある種のアプリケーションと衝突します:

接続キャッシュの統計情報

scache(8) 接続キャッシュサーバはキャッシュ サイズのピークやキャッシュのヒット率といった統計情報をログに記録します。 この情報は connection_cache_status_update_time 秒ごとと、 最大アイドル時間を超過してプロセスが終了するとき、Postfixがリロードされた ときに記録されます。