シリアライゼーションを低減させる

シリアライゼーションを低減させる

クラスタ構成の場合のシリアライゼーション対象は、ネットワーク上のデータ送受信、および、RDBをはじめとするデータソースに対する読み書きです。こういった状況の中でJBossCacheが取った戦略は、データソースに対する読み込みを最低(キャッシュにデータが存在しない場合の最初の1回だけ)にすることで、ネットワークに関するシリアライゼーションによるパフォーマンス・ロスを相殺し、願わくは、パフォーマンスをプラスにしようというものです。

JBossCacheを利用した場合の処理の流れは次のような感じです。


  1. あるデータをデータソースから読み取ります
  2. トランザクションをコミットしてデータを確定します
  3. その全情報(=キャッシュ)をクラスタ上の他のノードに対してコピーします
  4. 次回同じデータが必要となった場合は、データソースに対してアクセスせず、各ノードが持つローカルのキャッシュを利用してトランザクションを行います
  5. そして2回目以降のトランザクションでは、変更のあったデータのみ他ノードへレプリケーションし、シリアライゼーションの発生を最小にします

キャッシュに対して変更が加えられた場合は、その変更をクラスタ上の他のノードに対してコピーし、再びそのキャッシュを参照する場合は ローカルのキャッシュを参照するようになります。つまり、最初の1回を除いてRDBなどのデータストアを参照する必要がまったくなくなります(当然のことながら、更新はその都度発生します)。

JBossCacheの特徴

JBossCacheの具体的な特徴を以下に挙げます。


  1. キャッシュをレプリケート(同期/非同期)できる
  2. ツリー構造をしたキャッシュである
  3. トランザクション/ロック(分離レベル)をコントロールできる
  4. キャッシュを無効化するルールを変更できる
  5. キャッシュを永続化(ファイルやDBに格納)することができる
  6. ヒット率などの統計情報が取得できる
  7. 通常のデータやPOJOをキャッシュできる

いくつか補足しておきますと、「5.キャッシュを永続化することができる」というのは、JavaのオブジェクトをそのままファイルやDBに格納できることを意味します。簡易的なオブジェクト指向DBのような使い方が可能となります。また、JBossCacheはSleepyCat社(注3)製のBerkrey DB Java Editionに対応しており、Javaオブジェクトの永続化に対して高いパフォーマンスと信頼性を付け加えることができます。



※注3: 下記URLを参照して下さい。商用利用の場合はライセンスの購入が必要です。
http://www.sleepycat.com/

「6.ヒット率などの統計情報が取得できる」というのは、JBossにMBeanとして組み込まれた状態の場合に利用できます。既に説明したJMXコンソール等から確認することができます。

「7.通常のデータやPOJOをキャッシュできる」については少し詳しく説明しましょう。JBossCacheには2種類のクラスがあり、それぞれ「TreeCache」、「TreeCacheAOP」と呼ばれています。TreeCacheAOPはTreeCacheのサブクラスとなっており、TreeCacheよりも機能拡張されています。

実はTreeCacheで扱うことのできるJavaオブジェクトはSerializableインターフェースを実装している必要があります。また、キャッシュの単位はオブジェクト全体になってしまいます。

これに対して、TreeCacheAOPの場合はこういった制限がありません。普通のJavaオブジェクト(POJO)をキャッシュとして利用することができますし、オブジェクトのフィールドやコレクション型に格納されている1オブジェクトだけに対して更新をかけるといったことが可能となっています。

つまり、変更のあった部分だけを自動的に検知し、非常に細かい単位でキャッシュの更新(レプリケーション)を行うことを可能としています。

TreeCacheAOPは、通常のJavaオブジェクトに対して動的かつ自動的に必要なインターフェースを実装することで、前述のような機能を実現しています。具体的には、次で説明するJBossAOPのしくみを利用して行っています。

なお、このJBossCacheは単体でも利用することができます(注4)。



※注4: 下記URLよりダウンロードすることができます。
http://sourceforge.net/project/showfiles.php?group_id=22866&package_id=102339

JBossAOP

JBossAOPは、アスペクト指向プログラミング(Aspect Oriented Programming)に対応したフレームワークです。アスペクト指向プログラミングを簡単に説明すると、ひとつの目的を達成するためのコードが複数ソースファイルのあちこちに散らばっているのをひとつにまとめてしまおう、というものです。

具体的にはロギング等を考えるとわかり易いと思います。

デバッグ、トレース、警告などの目的でロギング用のコードはソースコードのいたる所に書かれます。この「ロギング」のソースコードを別クラスとして抽出し、その他の残りのソースコード(アプリケーションが本来目的とするビジネスロジック)から切り離します。そして、これら別々に定義されたクラスファイルを設定ファイルにより結びつけます。こうすることで、ロギングに関するコードを1ヶ所に集めて管理することができます。

アスペクト指向プログラミングは、既存のオブジェクト指向プログラミングを置き換える存在ではなく、オブジェクト指向の欠点を補うものです。一般にオブジェクト指向プログラミングによって90%がカバーされ、残りの10%をアスペクト指向プログラミングによってカバーするといわれています。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30