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


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

Postfix メールキュー

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

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

大群 (thundering herd) の回避

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

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

公平性

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

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

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

指数関数的な速度低下

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

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

配送先状態キャッシュ

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