第13章 永続化

本章では、HornetQ での永続化と設定について説明します。
HornetQ は独自の永続化を処理します。これは、高パフォーマンスのジャーナルとともに出荷され、メッセージング固有の使用ケースに対して最適化されます。
HornetQ journal はファイルサイズを設定できる append only であり、単一の書き込み操作を有効にすることによりパフォーマンスが向上します。これは、ディスク上のファイルセットから構成され、最初に固定サイズで事前に作成され、パディングで満たされます。サーバー操作 (メッセージの追加、メッセージの削除、メッセージの更新など) が実行されると、ジャーナルファイルがいっぱいになるまで (この時点で次のジャーナルファイルが使用されます) 操作のレコードがジャーナルに追加されます。
高度なガーベッジコレクションアルゴリズムにより、すべてのデーが削除されたときにジャーナルファイルを再構築および再利用できるかどうかが決定されます。圧縮アルゴリズムにより、デッドスペースがジャーナルファイルから削除され、データが圧縮されます。
また、このジャーナルはローカルトランザクションおよび XA トランザクションの両方を完全にサポートします。
ジャーナルの大部分は Java で記述されていますが、さまざまな接続可能な実装を許可するためにファイルシステムとの統合は抽象化されています。HornetQ に同梱される 2 つの実装は以下のとおりです。
Java 非ブロック IO (NIO)
ファイルシステムと接続するために標準的な Java NIO を使用します。これにより、パフォーマンスが大幅に向上し、Java 6 以降のランタイムがあるプラットフォームで実行が可能になります。
Linux 非同期 IO (AIO)
Linux 非同期 IO ライブラリー (AIO) と対話するには、ネイティブコードラッパーを使用します。AIO では、データが永続化されたときに HornetQ がメッセージを受け取ります。これにより、明示的な同期の必要がなくなります。一般的に、AIO は Java NIO よりも高いパフォーマンスを提供しますが、Linux カーネル 2.6 以降と libaio が必要になります。
また、AIO は ext2ext3ext4jfs、または xfs タイプファイルシステムを必要とします。NFS では、AIO は低速で同期の動作になります。

注記

Red Hat Enterprise Linux の場合は、libaio を以下のコマンドでインストールします。
yum install libaio
標準的な HornetQ コアサーバーは、以下のジャーナルインスタンスを使用します。
バインディングジャーナル
サーバーにデプロイされたキューと属性のセットを含むバインディング関連のデータを格納します。また、ID シーケンスカウンターなどのデータも格納します。バインディングジャーナルは常に NIO ジャーナルであり、通常は、メッセージジャーナルと比較して低いスループットを持ちます。
このジャーナル上のファイルは、接頭辞 hornetq-bindings で設定されます。各ファイルは bindings 拡張を持ちます。ファイルサイズは 1048576 バイトであり、ファイルはバインディングフォルダーにあります。
JMS ジャーナル
JMS キュー、トピック、接続ファクトリーなどのすべての JMS 関連のデータと、これらのリソースに対する JNDI バインディングを格納します。管理 API で作成されたすべての JMS リソースはこのジャーナルに永続化されます。設定ファイルで設定されたすべてのリソースはこのジャーナルに永続化されません。このジャーナルは、JMS が使用中の場合のみ作成されます。
メッセージジャーナル
メッセージ自体と duplicate-id キャッシュを含むすべてのメッセージ関連のデータを格納します。デフォルトでは、HornetQ はこのジャーナルに AIO を使用します。AIO が利用不可の場合は、自動的にNIO が使用されます。
大きなメッセージは、メッセージジャーナル外部で永続化されます。詳細については、21章大きなメッセージ を参照してください。
低メモリーの状況では、HornetQ がメッセージをディスクにページングするよう設定します。詳細については、22章ページング を参照してください。
永続化が必要ない場合は、「HornetQ でのゼロ永続化の設定」 で説明されたように、HornetQ がデータを永続化しないよう設定できます。

13.1. バインディングジャーナルの設定

バインディングジャーナルは、JBOSS_DIST/jboss-as/server/PROFILE/deploy/hornetq/hornetq-configuration.xml の以下の属性を使用して設定されます。
bindings-directory
バインディングジャーナルの場所。デフォルト値は data/bindings です。
create-bindings-dir
true であり、バインディングディレクトリが存在しない場合は、bindings-directory で指定された場所でバインディングディレクトリが自動的に作成されます。デフォルト値は true です。