第6章 メッセージの永続化

本章では、AMQ Broker で永続性がどのように機能するか、および設定方法を説明します。

ブローカーには 2 つの永続性オプションが同梱されています。

  1. ジャーナルベース

    デフォルトです。ファイルシステムのジャーナルにメッセージを書き込む非常に高性能なオプション。

  2. JDBC ベース

    ブローカーの JDBC Store を使用して、メッセージを選択したデータベースに永続化します。

または、ゼロ永続化 のブローカーを設定することもできます。

ブローカーは、メッセージジャーナル以外で大きなメッセージを永続化するために別のソリューションを使用します。詳細は、Large Messages の使用を参照してください。ブローカーは、メモリー不足の状況でメッセージをディスクにページングするように設定することもできます。詳細は、ページングメッセージを参照してください。

注記

サポートされるデータベースおよびネットワークファイルシステムに関する現在の情報は、Red Hat カスタマーポータルのRed Hat AMQ 7 Supported Configurationsを参照してください。

6.1. ジャーナルベースの永続性

ブローカージャーナルは、ディスク上の append-only のファイルセットです。各ファイルは固定サイズに事前作成され、最初にパディングが入力されます。メッセージング操作がブローカーで実行されると、レコードがジャーナルの最後に追加されます。レコードを追加すると、ブローカーはディスクヘッドの移動およびランダムアクセス操作を最小限に抑えることができます。これは通常、ディスク上で最も遅い操作です。1 つのジャーナルファイルがいっぱいになると、ブローカーは新しいジャーナルファイルを使用します。

ジャーナルファイルサイズは設定可能です。各ファイルによって使用されるディスクリプラーの数を最小限に抑えることができます。最新のディスクトポロジーは複雑で、ブローカーはファイルのマッピング先の cylinder を制御することはできません。したがって、ジャーナルファイルのサイジングは、正確な情報ではありません。

その他の永続性関連の機能には、以下が含まれます。

  • 特定のジャーナルファイルがまだ使用中かどうかを判断する洗練されたファイルのガベージコレクションアルゴリズム。そうでない場合は、ファイルを回収して再利用できます。
  • ジャーナルからデッドスペースを削除してデータを圧縮する圧縮アルゴリズム。これにより、ジャーナルがディスク上のファイル数より小さくなります。
  • ローカルトランザクションのサポート。
  • AMQ JMS クライアントを使用する場合の XA トランザクションのサポート。

ジャーナルの大半は Java で書かれています。ただし、実際のファイルシステムの操作は抽象化されるため、プラグ可能な実装を各種使用できます。AMQ Broker には、2 つの実装が同梱されています。

  • Java NIO

    ファイルシステムとのインターフェイスに標準の Java NIO を使用します。これにより、非常に優れたパフォーマンスを実現し、Java 6 以降のランタイムを備えたプラットフォーム上で稼働します。

  • Linux 非同期 IO

    シンネイティブラッパーを使用して Linux 非同期 IO ライブラリー (AIO) と通信します。AIO では、ブローカーはデータがディスクの作成後に呼び出されるので、同期を明示的に回避できます。デフォルトでは、ブローカーは AIO ジャーナルの使用を試み、AIO が利用できない場合は NIO を使用するようにフォールバックします。

    通常、AIO を使用すると、Java NIO を使用するよりもパフォーマンスが向上されます。libaio のインストール方法は、AIO ジャーナルの使用 を参照してください。

注記

サポートされるネットワークファイルシステムに関する現在の情報は、Red Hat カスタマーポータルの Red Hat AMQ 7 Supported Configurations を参照してください。

6.1.1. AIO の使用

Java NIO ジャーナルは非常にパフォーマンスが高くなりますが、Linux カーネル 2.6 以降を使用してブローカーを実行している場合、Red Hat は永続性パフォーマンスを強化するために AIO ジャーナルを使用することを推奨します。他のオペレーティングシステムや、それ以前のバージョンの Linux カーネルで AIO ジャーナルを使用することはできません。

AIO ジャーナルを使用するには、libaio がインストールされていない場合はインストールする必要があります。

手順

  • 以下の例のように、yum コマンドを使用して libaio をインストールします。
yum install libaio