では、Sendmail 9のアーキテクチャについて簡単に説明します。まず、図を見ていただきたいと思います。
Sendmail 9のアーキテクチャ |
中央に「QM」と書いてあるのが“キューマネージャ”です。このキューマネージャがグローバルにシステムを見ているわけです。またスケジューリングも行ないます。ですので、「8」シリーズではできなかったグローバルオプティマイゼーションなどが可能になります。
外からメッセージが入ってきますと、「SD」と書いてある“SMTPデーモン”を通っていきます。このSMTPデーモンはスレッド化されています(編註:図中「SD」のボックスが複数描かれていることに注意)。
エンベロープの情報がキューマネージャに入ってくると、キューマネージャは「AR」と描いているアドレスリゾルバを使ってさまざまなアドレス関連の処理を行ないます。たとえばメーリングリストの展開などですね。そのメールがどこに行けばいいのかといったアドレスの管理を行なうわけです。
メールの行き先がわかったら、今度はキューマネージャが「DA」つまり“デリバリーマネージャ”とスケジューリングを行ないます。デリバリーマネージャは複数存在し、どのようなデリバリーをするのかで使うものが変わります。たとえばSMTPデリバリーエージェントもあるし、ローカルのデリバリーエージェントもあります。
データベースですが、通常のMTAは1つしかないのですが、9には2つあります。
“コンテンツDB”には、ヘッダとボディの内容が書かれています。その内容を書くのがSMTPデーモンで、その内容を読むのがデリバリーマネージャです。キューマネージャは、中身を直接覗くということはしません。
逆に“エンベロープDB”はキューマネージャとしか連絡を取らないという仕様になっていますので、キューマネージャのほうが長期的な状況を把握します。
このように複数のDBがプロセス中に存在することで、複数のCPUを活用したり、ディスクI/Oの数も減らせ、並列処理が可能になるわけです。