読者です 読者をやめる 読者になる 読者になる

Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

JUDCon 2013&CamelOne 2013 in Bostonに参加してきました

Java Infinispan Cassandra

阪本です。

f:id:acro-engineer:20130611115604p:plain

おなじみRedHat社が主催する、JBossとApache Camelのカンファレンス「JUDCon 2013CamelOne 2013」がアメリカ・ボストンで開催されたので、参加してきました!

JUDConは2010年から、CamelOneは2011年から開催されている、参加者が1000人に及ぶカンファレンスで、JBoss関連プロダクトやCamelの最新情報・事例をいち早く手に入れることができます。
今年のボストン開催では、6/10と6/11にセッションが行われました(JUDConはブラジル等でも開催されています)。


その中で発表があった、いくつかのセッションを簡単に紹介します。

Common JDG Architectures

JDG=JBoss Data Grid の略。
Webアプリケーションに対して、キャッシュ(JDG)を組み込むときのアーキテクチャパターンについて紹介。

最も単純なパターンは、Service/DAOとDBの間にキャッシュを挟むパターン。

Webアプリケーションに組み込む(=WebアプリケーションとキャッシュのJava VMが同じ)ため、
メモリ制限がある。

次は、Webアプリケーションがロードバランサによって冗長化されているパターン。

アプリケーションサーバ内にそれぞれキャッシュを組み込む形。
この場合は、キャッシュ同士がレプリケーションを行う。
キャッシュデータが分散保持されているとき、キャッシュサーバごとに保持するデータが異なるため、
キャッシュへの効率よいアクセス(取得したいデータを保持するキャッシュにアクセス)を行うには、
キャッシュへの接続方法としてHot Rodを用いる。
BigDataに向いている。

次は、上のアーキテクチャに加え、JDG Clusterを組み込むパターン。

片方のWebアプリケーションに対してデータ更新を行うと、
各Webアプリケーション間でデータの矛盾が一時的に生じることになるが、JDGが古いデータを自動で無効化してくれる。
この構成は高負荷なサイトに向いている。

最後に、JDG Clusterを複数構築して、クロスサイトレプリケーションを行うパターン。

片方のクラスタを更新可能、もう片方のクラスタを読み取り専用にするのが安全な構造。
2つのクラスタのキャッシュが同時に更新される場合、どちらのデータを優先するかは議論が必要。
複数のデータセンタなどに向いている。

また、複雑なSQLをDBに発行する場合、代わりにキャッシュに発行する方がよいとされる。
Apache Luceneを用いる。(個人的には、DBでFull Scanが発生していなければ、DBアクセスの方がよい気がする。)

NoSQL - Scaling Beyond Traditional SQL with Cassandra

SQLを用いてスケーリングを行う事例。
RHQ(JBossミドルやTomcatApacheなどを管理するソリューションを提供するアプリ)を例に説明。

RHQは、管理対象のTomcatサーバなどにAgentを入れ、AgentからRHQ Serverに情報を吸い上げる形で動作する。
情報を吸い上げる間隔は30秒だが、データ量を抑えるため、古いデータは数段階に分けて間引きされる。
RHQのアーキテクチャはもともと、データ保存にRDBを用いていたが、
情報が30秒ごとに1000台以上のAgentから送られてくるため、データの書き込みに負荷がかかる。

そこで、Javaで実装されており、CQL(Cassandra Query Language)があり、ツールが揃っているCassandraを採用。

既存のDBはそのまま残し、間引きされる前の生データのみCassandraに入れる。
パフォーマンスを出すなら、この構成がよいとのこと。

(個人的追加:ちなみに、DBが性能ボトルネックとなっていたZabbixもCassandra対応していますが、RHQとほぼ同じ事象だと思われます。)

Working with Apache Camel from HTML5 via hawtio

Apache Camelをはじめ、ActiveMQやInfinispan等のOSSを、Webで統合的に管理するソフトウェア「hawtio」がなんと無料!

このツール(というかiPaaS(Integrated PaaS)と呼んでいた)は、

  1. Camelコンテキストの追加 とか
  2. ルールの作成 とか
  3. バージョン管理・動的バージョン切り替え とか
  4. ルール実行状況確認 とか
  5. デバッグ・値チェック とか

ができてしまうスグレモノ!

プラグインを入れることで、いろんな機能を追加することもできるらしい。

Camelを使っている人は、これは使いこなすとかなり効率的に作業ができますね。

まとめ

今やOSSは単なるOSSではなく、Camelや他のOSSを組み合わせたhawtioのようなクラウド的統合環境を提供するまで発展しています。
HTML5の普及に伴って、さらにOSS周りが面白くなりそうです。


それでは。