Hazelcast Inc.のシニアソフトウェアエンジニアであるChristoph Engelbert氏とのインタビューを紹介する。
InfoQ: Hazelcastという会社とそのビジネスモデルについて,簡単に説明をお願いします。
Christoph: Hazelcastはオープンソースのインメモリ・データグリッドソリューションで,Apache License 2のもとに公開されています。Map, List, Set, Queue, Lock, ExecutorServiceなど一般的なJava APIの多くを分散形式で実装した上に,パーティション化されたクラスタ環境用の機能を追加しています。分散型のクエリ(Predicate)や,特定ノード上で実行可能なRunnable/Callableクラスなどがその例です。
同時にHazelcastは,オープンソースプロジェクトの開発,配布,サポートを行う企業の名称でもあります。私たちはミッションクリティカルな環境に必要な商用サポートやトレーニング,技術支援を行うとともに,クラスタ監視および管理,高度な予測可能性のためのソリューションや,パフォーマンスやクラスタセキュリティ,C++やC#など他のネイティブAPIクライアント言語といった面での拡張機能を製品として提供しています。HazelcastはすべてJavaで記述されていますが,memcached準拠のAPIやRESTfulインターフェースなどを通じて多言語をサポートしているのです。
InfoQ: アプリケーションやバーティカル,オープンソースプロジェクトなどで,Hazelcastを使ったものはありますか。また通常はどのような使い方をされるのでしょうか?
Christoph: Hazelcastは金融の分野から出発して,低レイテンシなトレーディングアプリやリスク,金融取引といったアプリケーションで利用されています。大規模な通信会社やネットワーク機器メーカ,クラウドプロバイダなどでも使われていますし,インターネットやモバイル決済,ゲームとギャンブル,旅行やホスピタリティ,Eコマースといった領域への取り組みも始めています。ユースケースとしては,大部分がキャッシュやアプリケーションのスケーリングです。OrientDBやVert.X, MuleSoft, WSO2, Apache Shiroのように,Hazelcast上に自身のソリューションを構築している企業やプロジェクトもたくさんあります。
InfoQ: 先日MapReduce APIがリリースされましたが,そのメインの開発者はあなただと伺っています。どのような動機からこれを作ろうと考えたのですか?
Christoph: CasMapRは研究プロジェクトとして始めました。新しいHazelcast 3 APIに参加したいと思っていたところ,最近になってMapReduce用(JBossクラスタを使用していたので)の別のAPIで開発を行う機会があったのです。それがHazelcastにフィットするように思われたので,2013年の終わりにHazelcastに参加したとき,Hazelcastのメインディストリビューション採用に関しての議論を始めました。
InfoQ: それではあなたが,CasMapRをHazelcastに移植したのですか?
Christoph: そういうことになりますね。最初は単に,コードベースをコアディストリビューションに移行しようと考えていました。しかし時間が経つにつれて,もっとリアクティブプログラムに合ったものにしたいと思うようになったので,内部のほとんどを書き直しました。公開APIについてもたくさん議論しています。CasMapRは全体的に,私の好きなInfinispanのAPIにインスパイアされてます。 新しいMapReduce APIとして私たちは,もっとHadoopらしいAPI(オリジナルのGoogle資料に近いもの)ものにすることを決めたのですが,ジョブの定義方法についてはDSLの方法を継承することにしました。その結果,古い実装で再利用されたのは,ほんの一部だけになってしまいました。新しい実装は,設計レベルで完全にコンカレントです。MapフェーズとReduceフェーズは完全に並列実行されますし,システム全体がストリーミング的な方法で(チャンク処理をベースとして)動作するのです。現在では旧実装の作業はすべて中止して,すべての労力をHazelcast内部のMapReduce APIに費やしています。
InfoQ: それはすばらしいですね。では,HazelcastのMapReduce APIの代表的な(そう推測される)ユースケースは,どのようなものなのでしょう。例えば,MongoDBのMapReduce APIやHadoopとはどのように違いますか?
Christoph: Hazelcast MapReduce APIが使用される典型的なシナリオとしては,EntryProcessorがしっくりこないような分散コンピュータ環境があげられます。データ変換が必要か,複数のデータソースを利用したいのかのいずれかです。 また,実行時間の長い操作にも適しています。現行のシステムではすべてがパーティションスレッド上で直接動作するので,データ変更のために明示的にロックを行う必要がないからです。完全にストリーミングな解析の実行が可能になるように,今後どこかのバージョンで継続的なmapとreduceをサポートするつもりです。このもっともよい例は何といってもTwitterでしょう。リツイートやお気に入り,その他多くの統計解析を行うためにTwitterは,ツイートをリアルタイム処理しています。リスク管理や解析の上でも,この方法は有用です。
Hadoopとの最大の違いは,インメモリであること,リアルタイム処理であることの2つです。 Hadoopにはさまざまなフェーズがあって,それぞれのフェーズが次々と実行されています。しかしHazelcastはコンカレントな内部設計によってmapとreduceがすべてのノードで並列的に実行されますから,最大のパフォーマンスを得ることができるのです。フェーズそれ自体はHadoopのものと極めて近く,マッピング(とコンバイニング),シャッフリング(ノードへのパーティショニング), レデューシングフェーズなどがあるのですが,Hadoopほど明確に分離されてはいません。
MongoDBとの比較は,MongoDBのMapReduce APIを使った経験がないので難しいのですが,コンバイナが欠けているように思います。コンバイナは非常に多くのデータベースを扱う上で便利ですが,先程も言いましたように,私が実装を詳しく知らないだけなのかも知れません。
InfoQ: なるほど。では最後の質問ですが,Hazelcast MapReduce APIに関して,何か読者に伝えておきたいことはありますか?
Christoph: そうですね,個人的な希望ですが,APIのテストドライブをして頂いて,可能な限り多くのフィードバックを提供してほしいと思っています。APIは完全に安定していますので,非常に満足しています。それから,実運用におけるユーザのエクスペリエンスをさらに調査して,調整すべき領域をもっと見つけたいですね。まだまだ改善の余地はあると思います。
インタビューにご協力頂いて,ありがとうございました!