ネットワーク帯域幅が小さい場合や JMS サーバーが稼働するハードウェアのメモリ容量が少ない場合などに、
メッセージの圧縮が有利に働きます。
JMS では、メッセージの圧縮について規定されていませんが、
FioranoMQ では、Zlib Compressed Data Format Specification Version に基づくメッセージ圧縮機能を提供しています。
メッセージの圧縮は、メッセージ配信のパフォーマンス向上においてていへん重要な機能です。
圧縮アルゴリズム
FioranoMQ が提供している Zlib は、最も効果的な圧縮アルゴリズムの一つです。
Zlib には、次の利点があります。
- CPU タイプ、OS、ファイル システム、文字コードに非依存
- 一時データ ストアを用いることで、膨大な長さのインプット データ ストリームのデータでも処理可能
- 特許や著作権などに抵触せずに、(OSS と同様に) 自由に使用することができる
- 多くの圧縮技法に対応
FioranoMQ では、Zlib を Java ランタイム ライブラリとして実装しています。
この実装では、圧縮および解凍において、異なるレベルを用いることができます。
デフォルトの圧縮レベルは、LZ77 と Huffman コーディングの組み合わせとしています。
圧縮の単位
FioranoMQ では、メッセージの圧縮を次の 2つの単位で実行できるようにしています。
- 個々のメッセージ単位
- ディストネーション (キュー、トピック) 単位
メッセージ単位の圧縮では、送信側クライアントがメッセージの圧縮を行うか否か、個々のメッセージ毎に選択できます。
ディストネーション単位の圧縮化では、指定されたキューもしくはトピックに置かれたメッセージはすべて圧縮されます。
メッセージの暗号化は、ペーロードに対してのみ行われ、ヘッダー部分は暗号化されません。
このため、メッセージ セレクションなどの JMS 機能はそのまま使用することができます。
圧縮のレベルと方法
クライアントは、圧縮レベルと方法を選択できます。
選択可能なオプションには、
- 圧縮しない
- 処理速度最優先
- 圧縮率最優先
- デフォルトの圧縮
があります。
圧縮レベルには、0 から 9 まであり、処理速度最優先 が 1、圧縮率最優先が 9 としています。
|