Postfix の概要 - キューマネージメント


上のレベルへ | イントロダクション | 目的と特徴 | グローバルアーキテクチャ | キューマネージメント | セキュリティ

Postfix メールキュー

Postfix には4つのメインキューがあります: maildrop, incoming, active and deferred (big picture を見るには、左上のアイコンをクリックしてください)。ローカルで 投函されたメールは maildrop に置かれ、形が整えられてから incoming キューにコピーされます。incoming キューは受信処理中のメールや、まだキューマネージャが管理していない メールのためのものです。 active キューは、キューマネージャが配送のためにオープン しているメールのためのもので、サイズが限られています。配送できない メールは deferred キューに行くので、他の配送の邪魔になることは ありません。

キューマネージャは active キューに関する情報だけをメモリに 保持します。active キューのサイズは意図的に制限されています: メッセージの作業負荷のピークであっても、キューマネージャは 作業メモリを使い果たすべきではありませんactiveキューにスペースがあれば、キューマネージャは incoming キューと deferred キューから一つずつ メッセージを入れます。 こうすることで、大きなバックログがある場合でも新しいメールが 通り抜けることができます。

上述のキューに加え、Postfix は二つの駐車スペースを維持します。 hold キューには凍結されたメールがためられます; 誰かが postsuper コマンドで メッセージを開放するまでは配送が試行されません。 corrupt ディレクトリには損傷したキューファイルが入ります。 これらを消してしまうのではなく、Postfix は人間が検査できるように 残しておきます。

大群 (thundering herd) の回避

ハイパフォーマンスなメールシステムの実装は一つの側面です。 しかし、Postfix が他のサイトに接続して大量の同時配送で 圧倒すれば、だれも喜ばないでしょう。これは特にサイトがダウン していて、メールがネットワークのどこかにバックアップされている時に 問題になります。

Postfix はネットワークにおけるよき隣人であろうとします。あるサイトへの メール配送の際には、Postfix は始めは同時に2つのコネクションしか 張りません。配送がうまくいっている間、同時接続数はゆっくりと 設定可能な制限値まで (またはホストやネットワークが負荷を扱えなく なるまで) 増加していきます; 同時接続数は問題に直面すると減少します。 TCP/IP 実装の詳細に詳しい方向けにいうと、Postfix は自身で TCP slow start アルゴリズムを実装しています。

公平性

大群 (thundering herd) コントロールから話は離れますが、 Postfix 配送戦略は ラウンドロビン 選択に基づいています。 キューマネージャは active キューの中でメッセージの受信者を 配送先によってソートし、全ての配送先キューに沿ってラウンドロビン ウォークをします。

概して Postfix は外行きの SMTP チャネルを全て埋め続けるほどの 仕事がないときにだけ、同じドメインへの同時配送をおこないます。 それゆえ、AOL がオフラインになって戻った時でも、システムが 他のサイトへの配送を止めることはありません。

Postfix が配送できる速さよりも速くメールが届くと、Postfix は 遅延メールよりも新しいメールを優先します。新しいメールは できるだけ小さな遅延で届くべきだと考えます; 遅延メールは システムが暇になった時に配送されるはずです。

指数関数的な速度低下

Postfix はメッセージ毎の指数関数的速度低下を実装しています。 メッセージが最初の試行で配送できないと、キューマネージャは キューファイルにある設定可能な時間だけ未来にオフセットした タイムスタンプを与えます。未来のタイムスタンプを持つキューファイルは 通常キューマネージャから無視されます。

試行に失敗するたびに、キューファイルタイムスタンプは メッセージの滞在時間と同じだけの時間未来に移されます。 こうして、配送試行の間の時間は毎回倍になっていきます。 この戦略は効果的に指数関数的速度低下を実装しています。

配送先状態キャッシュ

Postfix キューマネージャは到達できない配送先の制限された、 短期間のリストを維持します。このリストは特に大きなメール バックログを抱えるような場合に、不要な配送試行を避けるのに 役立ちます。
上のレベルへ | イントロダクション | 目的と特徴 | グローバルアーキテクチャ | キューマネージメント | セキュリティ