Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

18.14. 永続性

18.14.1. HornetQ の永続性

HornetQ は独自の永続性を処理します。これには、メッセージング固有のユースケース向けに最適化された高パフォーマンスジャーナルが含まれています。
HornetQ ジャーナルは設定可能なファイルサイズでのみ追加されるため、単一の書き込み操作を有効にすることでパフォーマンスが向上します。これは、ディスク上の 1 組のファイルで構成されます。このファイルは、最初に固定サイズで事前作成され、パディングが書き込まれます。サーバーの操作(メッセージの追加、削除、更新メッセージなど)を実行すると、ジャーナルファイルが満杯になるまで操作の記録がジャーナルに追加されます。ジャーナルファイルが満杯になるまで、次のジャーナルファイルが使用されます。
すべてのデータが削除された場合、高度なガベージコレクションアルゴリズムにより、ジャーナルファイルを回収して再利用できるかどうかが決定されます。圧縮アルゴリズムにより、ジャーナルファイルから不要な領域が削除され、データが圧縮されます。
またジャーナルは、ローカルトランザクションと XA トランザクションの両方に完全に対応しています。
ジャーナルの大半は Java で記述されていますが、ファイルシステムとのやりとりは抽象化されており、さまざまなプラグ可能な実装が可能となります。HornetQ に同梱される 2 つの実装は次のとおりです。
  • Java New I/O (NIO)
    ファイルシステムとのインターフェースに標準の Java NIO を使用します。これにより、非常に優れたパフォーマンスを実現し、Java 6 以降のランタイムを備えたプラットフォーム上で稼働します。
  • Linux 非同期 IO (AIO)
    ネイティブコードラッパーを使用して Linux 非同期 IO ライブラリー(AIO)と通信します。AIO では、データを永続化すると HornetQ はメッセージを受信します。これにより、明示的な同期の必要性がなくなります。通常、AIO は Java NIO よりも優れたパフォーマンスを提供しますが、Linux カーネル 2.6 以降および libaio パッケージが必要です。
    また、AIO には ext2、ext3、ext4、jfs、または xfs タイプのファイルシステムも必要になります。
標準の HornetQ コアサーバーは次のジャーナルインスタンスを使用します。
  • バインディングジャーナル
    サーバーにデプロイされたキューのセットとその属性を含む、バインディング関連のデータを格納します。また、ID シーケンスカウンターなどのデータも格納します。通常、バインディングジャーナルはメッセージジャーナルと比較するとスループットが低くなるため、バインディングジャーナルは常に NIO ジャーナルになります。
    このジャーナルのファイルには、hornetq-bindings というプレフィックスが付けられます。各ファイルには bindings 拡張子があります。ファイルサイズは 1048576 バイトで、bindings フォルダーにあります。
  • JMS ジャーナル
    JMS キュー、トピックまたは接続ファクトリー、これらのリソースの JNDI バインディングなど、JMS 関連のデータをすべて格納します。管理 API で作成された JMS リソースは、このジャーナルに永続化されます。設定ファイルで設定したリソースはありません。このジャーナルは、JMS が使用されている場合にのみ作成されます。
  • メッセージジャーナル
    メッセージ自体や duplicate-id キャッシュを含む、メッセージ関連のデータをすべて格納します。デフォルトでは、HornetQ はこのジャーナルに AIO を使用します。AIO が利用できない場合は、自動的に NIO にフォールバックします。
大きなメッセージは、メッセージジャーナル外で永続化されます。メモリーが少ない状況では、メッセージをディスクにページングするように HornetQ を設定します。永続性が必要ない場合は、データを永続化しないよう HornetQ を設定できます。
注記
HornetQ ネイティブおよびジャーナルタイプが AsyncIO に設定された状態で JBoss EAP サーバーを実行すると、tmpfs ファイルシステムで実行しているとエラーが発生します。