Sun Java System Messaging Server 6.3 管理ガイド

12.8.2 メッセージあるいは部分メッセージの自動再組み立て

キーワード: defragmentnodefragment

MIME 規格には、メッセージをより小さな部分に分割するための message/partial コンテンツタイプがあります。これはメッセージがサイズ制限のあるネットワークを通過する場合、または信頼性の低いネットワークを通過する場合に便利です。メッセージの断片化により、ある種の「チェックポイント」が提供され、メッセージの転送中にネットワークエラーが発生した場合でも、操作の不要な繰り返しを防ぐことができます。メッセージが宛先に到着したときに自動的に再組み立てが行われるように、それぞれの部分に情報が含まれています。

MTA では、defragment チャネルキーワードと再組み立てチャネルを使うことによって、メッセージの再組み立てを行うことができます。チャネルが defragment でマークされていれば、このチャネルのキューに入れられる部分メッセージはすべて、代わりに再組み立てチャネルのキューに入れられます。すべての部分が到着したら、メッセージは再構築されて本来の宛先に送られます。nodefragment は、このような特別な処理を無効にするものです。デフォルトのキーワードは nodefragment です。

12.8.2.1 再組み立てチャネル

宛先チャネルに defragment キーワードがある場合、メッセージは再組み立てチャネルに転送されます。つまり、MTA がメッセージを待ち行列に入れる通常の宛先チャネルに defragment キーワードが存在する場合、MTA はメッセージ構造を調べます (MIME 解析)。MTA によってこの構造が MIME メッセージ断片であると認識された場合は、メッセージが通常の宛先チャネルではなく再組み立てチャネルに自動的にルーティングされます。

再組み立てデータベースには、MTA に到着するメッセージ断片に関する情報 (各メッセージ断片を受信するホストを示す情報など) が含まれます。最初の断片が受信され、再組み立てデータベース内にその情報がある場合、同じ再組み立てデータベースを使用してほかのシステムで受信されるメッセージの残りの部分は、最初のホストにルーティングされます。次に例を示します。

  1. message/partial; id=123; part=x がホスト 1 に到着し、本来であれば宛先/送信チャネルであるホスト上の defragment キーワードによって、ホスト 1 の再組み立てチャネルにルーティングされます。

  2. ホスト 1 の再組み立てチャネルは、再組み立てデータベースで、このメッセージの残りの部分が到着済みかどうかを確認します。到着していない場合、ホスト 1 の再組み立てチャネルは、この部分を再組み立てデータベースに入れて、ホスト 1 上に置きます。

  3. message/partial; id=123; part=y がホスト 2 に到着し、本来であれば宛先/送信チャネルであるホスト上の defragment キーワードによって、ホスト 2 の再組み立てチャネルにルーティングされます。

  4. ホスト 2 の再組み立てチャネルは、再組み立てデータベースで、このメッセージの part x がホスト 1 にすでに存在して格納されているかどうか確認します。再組み立てチャネルは、メッセージの断片をホスト 1 にリダイレクトします (ソースによって @host1 が含まれるアドレスがルーティングされる)。

  5. message/partial' id=123; part=y がホスト 1 に到着し、再組み立てチャネルにルーティングされます。再組み立てチャネルは、この断片を実行してデータベースに入れます。

断片化されたメッセージの残りの部分すべてが、メッセージの最初の部分 (最初に受信する部分であって、part=1 とは限らない) を受信したホストにリダイレクトされます。そのホストの再組み立てチャネルによって再アセンブルされ、最終的には、再アセンブルされた再組み立て済みのメッセージが (または再組み立て処理がタイムアウトした場合は、notices を超過したために、個々の断片がそのままの状態で) 本来の宛先チャネルに送信されます。どのホストが各メッセージの「最初」の部分を受信することになるかによって、メッセージの再組み立てにおける若干の負荷分散効果が得られます。

12.8.2.2 再組み立てチャネルの保持時間

再組み立てチャネルのキューにあるメッセージは、一定の時間だけ保持されます。最初の非配信通知が送信されるまでの時間の半分が経過すると、メッセージの各部が再組み立てされないまま送信されます。この時間の値を選択すると、再組み立てチャネルのキューにあるメッセージについて非配信通知が送信されなくなります。

notices チャネルキーワードは、非配信通知を送信するまでの時間を指定します。したがって、メッセージを断片のまま送信するまでの保持時間も指定します。notices キーワードの値は、再組み立てのためにメッセージを保持する期間の 2 倍に設定してください。たとえば、notices の値を 4 にすると、メッセージの断片は 2 日間保持されます。


defragment notices 4 
DEFRAGMENT-DAEMON

12.8.2.3 再組み立てとバケーションキャッシングにおける NFS ベースのファイルシステムの使用

NFS ベースのファイルシステムは、再組み立てやバケーションキャッシングに使われることがあります。たとえば、複数の MTA システム間で同じ再組み立てキャッシュを共有することにより、再組み立てデータベースを共有する場合です。それには、それぞれのシステムの msg-svr-base/config/defragment_cache から、共有する再組み立てデータベースのファイルへのリンクを作成します。このファイルは共有の NFS ディスク上に置かれます。

どのような場合でも、適切な NFS ファイルのセマンティクスをサポートする NFS サーバー (具体的には、Solaris NFS のようにロック要求を尊重する NFS サーバー) をバケーションキャッシュや再組み立てキャッシュに使用できます。NFS が使用される場合は、ソフトマウントオプションを使用してください。(ハードマウントがデフォルト。) mount timeo オプション ( mount_nfs(1M) マニュアルページを参照) で制御されるタイムアウト値を比較的短く設定するのもよい方法です。

NFS ハードマウントの使用時に NFS がダウンすると、さまざまなシステムの再組み立てキャッシュがハングアップしているように見えます。ソフトマウントであれば、再組み立てキャッシュはハングアップしませんが、再組み立てキャッシュを開けないために、ほかのホストの再組み立てキャッシュとの調整ができません。たとえば、まずあり得ない例ですが、メッセージの断片すべてが同じホストに最初に到着してしまい、そのホストの再組み立てチャネルがメッセージを再アセンブルして、正しく再アセンブルされたメッセージを送信することができそうな場合です。あり得そうな例としては、該当する再組み立てチャネルの保持期間が切れたときに、断片がほかのホストにあるために再アセンブルされず、個々の断片として送信される場合です。